如何使用蒙版去除图像的噪点
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,带有高斯噪声)。 mask(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,我明白你想做什么,但我的背景是黑色的。不管怎样,谢谢你! :) 我会继续寻找错误。以上是关于如何使用蒙版去除图像的噪点的主要内容,如果未能解决你的问题,请参考以下文章