matlabのメディアンフィルターmedfilt2()とopencvのmedianblur()は異なります



Median Filter Medfilt2 Matlab



次に示すように、matlabのメディアンフィルターmedfilt2()とopencvのメディアンblur()は異なる結果を生成します。
Opencvの処理結果は次のとおりです。
画像
Matlabの処理結果は次のとおりです。
画像
Opencv処理のプログラムコード:
float aa [] = {1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16
CvMat temp = cvMat(4、4、CV_32FC1、&aa)
printf( '元の行列: n')
printarry(&temp)
CvMat * dat = cvCreateMat(4、4、CV_32FC1)
cvSmooth(&temp、dat、CV_MEDIAN、3、3)
printf( '処理マトリックス: n')
printarry(dat)
cvSmooth()が実際にmedianblur関数を呼び出す場合、真実の画像があります。ソースコードは次のとおりです。
画像
では、なぜ結果が異なるのでしょうか。
その理由は、medfilt2(Z、[3 3])のデフォルトの境界が0で埋められているため、最後の境界のピクセルが0になり、上の図の4つの角が0になるためです。
cvSmoothのデフォルトはテンプレート処理ですが、境界はコピーで埋められているため、cvSmoothとmatlabには違いがあります。そして、違いはすべて国境にあります。