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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/anpingbo/article/details/76359302
  1. Fourier变换
    Fourier变换最开始由傅里叶提出,当时为了解决热力学问题。后来经过发展形成了一套完整的理论,应用在物理学、信号学等很多方面。如果一个函数满足绝对可积条件,即:
    这里写图片描述
    因为计算机处理的是离散值,要求对f(x)和F(w)都采样,这时Fourier变换被称为离散Fourier变换(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
  1. 二维图像频率滤波
    频率域滤波方法有很多,主要是滤除某种频率成分,从滤除成分来看分为低通滤波、高通滤波、带通滤波等,技术手段上看有理想低通滤波、ButterWorth滤波,高斯滤波等。
    现在分别讨论这三种滤波器。低通滤波器可以表示为在某一个频率范围是1,而之外为0。对于一幅图像,其中心频率位于DFT变换函数的矩形中心,即F(k,l)中心(N/2,M/2),则理想低通表示为:
    这里写图片描述
    对于理想低通滤波器,其Fourier反变换函数为sinc函数,其图形如下
    这里写图片描述
    图1 理想低通滤波器
    低通滤波器频率域相乘,在空间域为卷积,上述函数在和DFT变换前函数卷积时,其边瓣会造成振铃。
    为了消除边瓣的波动,产生了ButterWorth和高斯滤波,当然也是因为理想低通滤波无法在物理上实现。而ButterWorth滤波器为
    这里写图片描述
    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

猜你喜欢

转载自blog.csdn.net/anpingbo/article/details/76359302