如何使用蒙版去除图像的噪点

Posted

技术标签:

【中文标题】如何使用蒙版去除图像的噪点【英文标题】:How to remove noise of an image using a mask 【发布时间】:2014-01-16 13:37:46 【问题描述】:

前几天我问了一个类似的问题,最后我解决了那个部分,但我又卡住了。

我想创建一个噪点过滤器,以去除图像中的噪点,避免边缘和边界。我的输入是一个图像文件,过滤器是一个平滑线性 FIR。

但我希望将结果与原始内容混合写入输出,遵循下一个等式:

result(x,y) = original(x,y)*mask(x,y) + filter_output(x,y)*(1-mask(x,y))

其中:original(x,y) 将是输入,带有噪声的图像(this for example,带有高斯噪声)。 ma​​sk(x,y) 是基于图像边缘的系数矩阵 (alredy done) 而filter_ouput(x,y),应该是线性FIR之后的图像。

我的问题是:我尝试了这么多过滤器和噪声类型(高斯、盐和胡椒......),但我没有得到好的结果。我得到的结果(x,y)与有噪声的图像相同!随着任何变化。好奇怪。

哪个过滤器是正确的?我不知道我的错误是在过滤器中还是在代码中。但是有些事情正在实施错误。这是代码。

filter = ones(5,5) / 25;
a2 = imfilter(a,filter); % a is the image with noise, a2 is the filtered image (output)

%The equation. G is the mask.

result=uint8(a).*uint8(G) + uint8(a2).*uint8(1-G);
imshow(result);

PS:Original image 无噪音

有什么想法吗?非常感谢!

【问题讨论】:

你的掩码G的取值范围是多少? [min(G), max(G)] 的输出是什么? G 的数据类型是什么?是double 还是uint8 G的范围是[0, 1], 512x512, double. 【参考方案1】:

a2 在对a 应用平均滤波器后是平滑的。我试图了解您期望在结果图像中显示的内容。其实你的G是经过sobel算子得到的,也是uint8的图片,范围从0到255。所以我猜你的

result=uint8(a).*uint8(G) + uint8(a2).*uint8(1-G);

应该是result=a.*uint8(G1) + a2.*uint8(1-G1);,其中G1 =im2bw(G,thresh) 是您预设的thresh 值。

编辑

回应您的建议:如何使用

result=a2+(255-G);

【讨论】:

你好。我希望仅在平坦区域获得没有噪点的图像,避免边缘和边界。我按照你说的做了,我也遇到了同样的问题。结果,我在平坦区域获得了嘈杂的图像。我会继续努力的。 我不知道我是否解释一下,对不起。仅使用过滤器(a->a2),我得到一个平滑的图像,没有噪音,但边缘模糊。使用这个等式,目标是获得没有噪声的图像,但保持原始边缘,即没有模糊。 使用 result=a2+(255-G); 怎么样? 不@lennon310,我明白你想做什么,但我的背景是黑色的。不管怎样,谢谢你! :) 我会继续寻找错误。

以上是关于如何使用蒙版去除图像的噪点的主要内容,如果未能解决你的问题,请参考以下文章

hsv 阈值化后的图像噪声去除

Opencv 中的去噪

Opencv和python用于自动裁剪

洪水填充图像的图像处理

如何在图像中添加高斯噪声?

从图像中去除背景和噪点