如何使用蒙版消除图像的噪音

时间:2013-12-29 15:03:55

标签: matlab image-processing noise-reduction

前几天我问了类似的事情,最后我解决了那个部分,但我再次陷入困境。

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

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

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

其中:原始(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没有噪音

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

1 个答案:

答案 0 :(得分:1)

a2上应用平均滤波器后,

a是平滑的。我试图理解你期望在结果图像中显示的内容。实际上,在sobel算子之后获得的G也是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值。{/ p>

修改

回应您的建议:如何使用

result=a2+(255-G);