Advertisement

图像处理(3)频率域滤波

阅读量:

由法国数学家傅里叶提出的一种积分变换方法最初是为了研究热传导问题而提出的。经过一段时间的发展和完善后形成了一个完整的理论体系。这种变换方法广泛应用于物理学、信号处理等多个领域。当且仅当函数满足绝对可积条件时(即函数在整个实数范围内绝对积分收敛),该变换才能顺利进行并具有良好的收敛性质。

这里写图片描述

考虑到计算机仅能处理离散数值,在对函数f(x)和F(w)进行采样时,则称此时该变换则被定义为离散傅里叶变换(DFT)。

这里写图片描述

离散Fourier变换所需的计算量较大数目,在减少计算负担方面存在较大的挑战;为此可采用快速Fourier变换方法(FFT),该方法基于相位因子的对称性质及其周期特性。

这里写图片描述

将f(n)分成两个部分,并对这两个部分分别计算其DFT;接着对每个部分继续分解处理,直至无法再进一步分解时。

这里写图片描述

由于A(k)和B(k)是关于N/2周期对称,所以有:

这里写图片描述

然后一直不断进行分割。这样可以大大降低计算量。
附上MATLAB代码:

复制代码
    function y=FFT_recur(x)
    
    N=length(x);
    
    x1=zeros(1,N/2);
    x2=zeros(1,N/2);
    
    y=zeros(1,N);
    
    %split x into two space: odd and even
    for j=1:N
       if mod(j,2)==0
       x1(j/2)=x(j);
       else
       x2((j+1)/2)=x(j);
       end
    end
    
    
    if N==2
    y(1)=x(1)+x(2);
    y(2)=x(1)-x(2);
    else
    x_a=FFT_recur(x1);
    x_b=FFT_recur(x2);
    for k=1:N/2
        y(k)=x_a(k)+exp(-i*2*pi*(k-1)/N)*x_b(k);
        y(k+N/2)=x_a(k)-exp(-i*2*pi*(k-1)/N)*x_b(k);
    end
    end

二维数字图像的频域处理

这里写图片描述

对于理想低通滤波器,其Fourier反变换函数为sinc函数,其图形如下

这里写图片描述

图1展示了理想低通滤波器

这里写图片描述

MATLAB实现代码如下:

复制代码
    function ifft_image=filter_frequency(image,mode,mode_parameter)
    
    %fourier transformation
    fft_image=fft2(image);
    fft_image=fftshift(fft_image);
    
    [row,col]=size(fft_image);
    filter_temp=zeros(row,col);
    
    %Low Pass filter
    if strcmp(mode,'LowPass')
    
    for i=1:row
        for j=1:col
            if sqrt((i-row/2)^2+(j-col/2)^2)<=mode_parameter
                filter_temp(i,j)=1;
            else
                filter_temp(i,j)=0;
            end
        end
    end
    
    %Butter Worth filter with n=2    
    elseif strcmp(mode,'ButterWorth')
    for i=1:row
        for j=1:col
            filter_temp(i,j)=1/(1+(sqrt((i-row/2)^2+(j-col/2)^2)/mode_parameter)^4);
        end
    end
    
    %gaussion filter
    elseif strcmp(mode,'Gaussion')
    for i=1:row
        for j=1:col
            filter_temp(i,j)=exp(-((i-row/2)^2+(j-col/2)^2)/(2*mode_parameter^2));
        end
    end
    
    end
    
    fft_image=fft_image.*filter_temp;
    
    fft_image=ifftshift(fft_image);
    ifft_image=ifft2(fft_image);
    ifft_image=abs(ifft_image);
  1. 结果
这里写图片描述

图2 (a)原始1024x1024图像 (b)加入了周期噪声

这里写图片描述

图3 低通滤波 (a)D0=100 (b)D0=300

这里写图片描述

图4 ButterWorth滤波 (a)D0=100 (b)D0=300

这里写图片描述

图5 高斯滤波 (a)D0=100 (b)D0=300

全部评论 (0)

还没有任何评论哟~