Python Opencv MedianBlur实际上是如何工作的?
我一直在处理一个灰度图像,它有大量的椒盐噪声,我知道MedianBlur非常有用。因此,我使用了Opencv的Python版本(Python Opencv MedianBlur实际上是如何工作的?,python,opencv,image-processing,signal-processing,Python,Opencv,Image Processing,Signal Processing,我一直在处理一个灰度图像,它有大量的椒盐噪声,我知道MedianBlur非常有用。因此,我使用了Opencv的Python版本(cv2.medianBlur())。它起作用了,但没有按我想要的方式起作用。因此,我在寻找它所使用的实际算法,并得到以下解释: 如果内核大小(k)为5,则对于每5个(行计数)x5(列计数)方形窗口,该窗口的中心像素将替换为其中所有元素的中值。例如,考虑这个窗口: [[11, 4, 17, 1, 5], [ 6, 14, 0, 12, 1
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。这是正确的吗?如果是,那么前两行会发生什么情况,因为前两行中不能有任何窗口的中心元素?根据我的观察(比较原始图像和处理后的图像),前两行也会发生变化。根据文档,它在内部使用BORDER\u 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]]
从文件:
中值滤波器使用#边界#内部复制来处理
边框像素,请参见#边框类型
这里,函数cv2.medianBlur()计算内核窗口下所有像素的中值,并用该中值替换中心像素。这在消除椒盐噪声方面非常有效。值得注意的一件有趣的事情是,在高斯和盒滤波器中,中心元素的滤波值可能是原始图像中不存在的值。然而,在中值滤波中并非如此,因为中心元素总是被图像中的某个像素值替换。这样可以有效地降低噪音。内核大小必须是正奇数整数。他们没有太多关于BORDER\u REPLICATE的文档。据我所知,如果你有一行,abcdefh,其中“a”和“h”是边界像素,那么它将像aaaaa | abcdefgh | hhhhhh一样填充该行。但它如何在二维窗口中工作呢?如果我有一个像[[13,16,18],[16,17,19],[20,17,18]]这样的2D窗口,我必须使它成为5x5,它将如何工作?同样,如果你有
ab
它在2D中变成aabb,a | ab | b,aabb
。将边框扩展到左/右/上/下。[[13,16,18],[16,17,19],[20,17,18]]
变成[[13,13,16,18,18],[13,13,16,18,18],[16,16,17,19,19],[20,20,17,18],[20,17,18,18]。
好的,让我重新表述我的意见:如果我有输入图像的前5行和前5列,我必须对它应用中值模糊来改变第一个像素值[0,0],它会怎么样?给出前5行和前5列:[[13,16,18,23,14],[16,17,19,16],[20,17,18,19,16],[21,14,13,13,13],[16,13,14,14,14]]谢谢@ilke444的解释和Cris,你也是。