【问题标题】:Find proper notch filter to remove noise from image找到合适的陷波滤波器以去除图像中的噪声
【发布时间】:2016-09-20 15:42:25
【问题描述】:

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

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.

【问题讨论】:

    标签: matlab image-processing filtering noise


    【解决方案1】:

    陷波滤波器的主要思想是将 FFT 图像中的少量频率归零,这会导致噪声。

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

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

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

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

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

    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):

    【讨论】:

    • tnx 为您解答。你如何确定 G?
    • tnx 为您解答。你如何确定 G?
    • 你能给我完整的代码吗? ft 矩阵和 filt 矩阵的大小不同。所以,我无法计算 ft = ft .* filt。 tnx 再次
    • @Ibezito +1 用于 gr8 示例。在你的程序pnts2del ={[88,155],[101,92],[138,71],[125,134]};中是手动找到这些点还是写了代码找到?
    • 感谢@JeruLuke,在这种情况下它是手动的。然而,可以编写一个在傅里叶图像中搜索这些峰值的代码
    【解决方案2】:

    看看这张图片。

    这是与您的具有类似噪声问题的图像的 FFT。那些红色圆圈指出了与该类型噪声相关的频域中的“尖峰”。看看你的图片,看看你能不能找到这些。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-01
      • 2018-10-19
      • 2016-09-27
      • 1970-01-01
      • 2019-05-21
      • 2014-04-04
      • 2015-09-02
      • 1970-01-01
      相关资源
      最近更新 更多