为了账号安全,请及时绑定邮箱和手机立即绑定

Opencv MedianBlur 是如何工作的?

Opencv MedianBlur 是如何工作的?

慕无忌1623718 2022-10-06 18:34:49
我一直在处理具有大量椒盐噪声的灰度图像,并开始知道 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)替换。这是正确的吗?如果是,前两行会发生什么,因为前两行中不能有任何窗口的中心元素?根据我的观察(比较原始图像和处理后的图像),前两行也发生了变化。
查看完整描述

3 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

根据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]]


查看完整回答
反对 回复 2022-10-06
?
湖上湖

TA贡献2003条经验 获得超2个赞

此处,函数 cv2.medianBlur() 计算内核窗口下所有像素的中值,并将中心像素替换为该中值。这对于消除椒盐噪声非常有效。需要注意的一件有趣的事情是,在高斯和盒式滤波器中,中心元素的滤波值可能是原始图像中可能不存在的值。然而,在中值滤波中情况并非如此,因为中心元素总是被图像中的某个像素值替换。这有效地降低了噪音。内核大小必须是一个正奇数整数。



查看完整回答
反对 回复 2022-10-06
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

从文档:

中值滤波器在内部使用#BORDER_REPLICATE 来处理边界像素,请参阅#BorderTypes


查看完整回答
反对 回复 2022-10-06
  • 3 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信