找到合适的陷波滤波器以消除图像中的噪声

时间:2016-05-23 16:48:12

标签: matlab image-processing filtering noise

我想使用陷波滤波器消除图像中的周期性噪声。我执行以下步骤:

I = imread('...img....');
ft = fftshift(fft2(I));
[m,n] = size(ft);
filt = ones(m,n);
%filt(......) = 0; % my problem is here 
ft = ft .* filt;
ifft_ = ifft2(ifftshift( ft));

so i don't know what exactly to set to zero to get the proper result.

2 个答案:

答案 0 :(得分:2)

陷波滤波器背后的主要思想是将FFT图像中的少量频率归零,从而产生噪声。

为了找到它们,您可以查看FFT幅度:

F = abs(ft2); 
F = log(F+1); 
imshow(F,[])

可以看到频率图像中的峰值位于以下点:

pnts2del ={[88,155],[101,92],[138,71],[125,134]};

enter image description here

如果您将这些点周围的每个点清零,您将获得更清晰的图像:

G = 60;
for ii=1:length(pnts2del)
    pnt = pnts2del{ii};
    filt(pnt(1),pnt(2)-G:pnt(2)+G) = 0;
    filt(pnt(1)-G:pnt(1)+G,pnt(2)) = 0;
    filt(pnt(1)-1:pnt(1)+1,pnt(2)-1:pnt(2)+1) = 0;
end

结果(之前和之后,以及更新的FFT):

enter image description here enter image description here

答案 1 :(得分:1)

看看这张图片。

Notch locations

这是具有类似噪声问题的图像的FFT。那些红色圆圈指出了尖峰'在与该类噪声相关的频域中。看看你的图像,看看你是否能找到它们。

这些高峰是你想要消除的。换句话说,您的过滤器在这些位置的值应为零,在所有其他位置的值应为1。然后,当你在下一行中相乘时,你将消除这些信息,并大大减少与之相关的噪音。