前几天我问了一个类似的问题,最后解决了那个部分,但现在又卡住了。
我想创建一个噪声过滤器,从图像中消除噪声,避免边缘和边界。我的输入是一个图像文件,过滤器是平滑线性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);
提示:有没有任何想法?非常感谢!这是未经处理的图片。
G
的取值范围是多少?[min(G), max(G)]
的输出是什么?G
的数据类型是什么?是double
还是uint8
? - Shai