我一直在处理带有大量盐和胡椒粉噪声的灰度图像,并且知道MedianBlur非常有用。因此,我使用了Python版本的Opencv(cv2.medianBlur()
)。它起作用了,但是没有按照我想要的方式起作用。所以我一直在寻找它可以工作的实际算法,并得到以下解释:
如果内核大小(k)为5,则对于每5(行数)x5(列数)正方形窗口,该窗口的中心像素将被其中所有元素的中值代替。因此,例如,考虑以下窗口:
[[11, 4, 17, 1, 5],
[ 6, 14, 0, 12, 16],
[24, 19, 13, 18, 23],
[ 7, 11, 11, 10, 5],
[10, 13, 23, 3, 0]]
在这里,中心元素13将被所有这些元素的中位数(即11)代替。这是否正确?如果是,那么由于前两行中没有任何元素是ANY窗口的中心元素,因此前两行会发生什么情况?根据我的观察(比较原始图像和处理后的图像),前两行也发生了变化。
根据medianBlur()
文档,它在BORDER_REPLICATE
内部用于处理边框像素。
BORDER_REPLICATE
Python: cv.BORDER_REPLICATE
aaaaaa|abcdefgh|hhhhhhh
因此,它将重复边界像素,直到所有像素都是窗口的中间像素。
编辑:要应用大小为5x5的内核,第一个像素应位于图像的第三行和第三列。这意味着将边框复制两个像素。因此,您的图像在内部变为:
[[11, 11, 11, 4, 17, 1, 5, 5, 5],
[11, 11, 11, 4, 17, 1, 5, 5, 5],
[11, 11, 11, 4, 17, 1, 5, 5, 5],
[ 6, 6, 6, 14, 0, 12, 16, 16, 16],
[24, 24, 24, 19, 13, 18, 23, 23, 23],
[ 7, 7, 7, 11, 11, 10, 5, 5, 5],
[10, 10, 10, 13, 23, 3, 0, 0, 0],
[10, 10, 10, 13, 23, 3, 0, 0, 0],
[10, 10, 10, 13, 23, 3, 0, 0, 0]]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句