3

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

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

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

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

其中:original(x,y)将是输入,带有噪声的图像(例如,带有高斯噪声)。 mask(x,y)是基于图像边缘的系数矩阵(已经完成)和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:原图无噪点

任何想法?太感谢了!

4

1 回答 1

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);
于 2013-12-29T16:08:36.300 回答