首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Opencv MedianBlur实际上是如何工作的?

Opencv MedianBlur实际上是如何工作的?
EN

Stack Overflow用户
提问于 2020-04-13 07:36:28
回答 3查看 3.1K关注 0票数 2

我一直在处理一个灰度图像,它有很多盐和胡椒的噪音,并逐渐认识到MedianBlur是非常有用的。所以我使用了(cv2.medianBlur())。它起了作用,但没有达到我想要的效果。因此,我正在寻找它所使用的实际算法,并得到了以下解释:

如果内核大小(K)为5,那么对于每5个(行计数)x5(列计数)平方窗口,该窗口的中心像素将被所有元素的中值替换。例如,考虑一下这个窗口:

代码语言:javascript
复制
      [[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。这是正确的吗?如果是,前2行会发生什么情况,因为前两行中不可能有元素作为任何窗口的中心元素?根据我的观察(比较原始图像和处理图像),前两行也会发生变化。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-13 07:47:30

根据medianBlur()文档,它在内部使用BORDER_REPLICATE处理边框像素。

代码语言:javascript
复制
BORDER_REPLICATE 
Python: cv.BORDER_REPLICATE

aaaaaa|abcdefgh|hhhhhhh 

因此,它重复边缘像素,直到所有像素都是窗口的中间像素。

编辑:要应用大小为5x5的内核,第一个像素应该位于图像的第三行和第三列。它意味着将边框复制两个像素。所以你的形象在内部变成这样:

代码语言:javascript
复制
  [[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]]
票数 1
EN

Stack Overflow用户

发布于 2020-04-13 07:47:46

来自文件:

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

票数 0
EN

Stack Overflow用户

发布于 2021-01-14 14:41:11

这里,函数cv2.medianBlur()计算内核窗口下所有像素的中值,中心像素被替换为这个中值。这是非常有效的消除盐和胡椒噪音。值得注意的是,在高斯滤波器和盒滤波器中,中心元素的滤波值可以是原始图像中可能不存在的值。然而,中值滤波的情况并非如此,因为中心元素总是被图像中的某个像素值所取代。这有效地降低了噪音。内核大小必须是正数整数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61183379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档