二维离散傅里叶变换以及滤波应用

一、二维离散傅里叶变换

二维离散傅里叶变换的公式: F ( u , v ) = 1 M N [ m = 0 M 1 n = 0 N 1 f ( m , n ) W M u m W N v n ] R M N ( u , v ) F(u,v) = \frac{1}{MN}[\sum_{m=0}^{M-1}\sum_{n=0}^{N-1}f(m,n)W_M^{um}W_N^{vn}] \bullet R_{MN}(u,v)
式中发 F ( m , n ) F(m,n) 的区域范围是:
m = 0 M 1 ; m = 0 \backsim M-1; n = 0 N 1 ; n = 0 \backsim N-1; W M = e j 2 π / M ; (旋转因子) W_M= e^{-j2\pi /M};\text {(旋转因子)} W N = e j 2 π / N ; (旋转因子) W_N= e^{-j2\pi /N};\text {(旋转因子)} R M N ( u , v ) = { 0 (其他) 1 (u = 0   M-1, v = 0   N-1) R_{MN}(u,v) = \begin{cases} 0& \text{(其他)}\\ 1& \text{(u = 0 ~ M-1, v = 0 ~ N-1)} \end{cases}
由二维离散傅里叶变换公式可以看出,二维变换可以看成是先对矩阵中的每一行做傅里叶变换,然后对每一列做傅里叶变换。一般采取基2的FFT分别对数据的行列进行处理,所以矩阵行列不足时可以补齐。经过变换后得到频域数据(复数)和原图像个数一样,在原点上(u = 0,v = 0),
F ( 0 , 0 ) = 1 M N m = 0 M 1 n = 0 N 1 f ( x , y ) F(0,0) = \frac{1}{MN} \sum_{m=0}^{M-1}\sum _{n=0}^{N-1}f(x,y)
此处是一个实数,可以理解为整幅图像的平均值。

二、低通滤波器

1、理想低通滤波器

理想低通滤波器的平滑处理过程中会产生较为严重的模糊和振铃现象。其传递函数:
H ( u , v ) = { 1 D ( u , v ) < = D 0 0 D ( u , v ) > D 0 H(u,v) =\left\{ \begin{aligned} 1 & & D(u,v) <= D_0\\ 0& & D(u,v) > D_0\\ \end{aligned} \right.

2、巴特沃斯低通滤波器

巴特沃斯低通滤波器在通过与截止频率之间没有明显的不连续性。经其滤波的图像模糊程度会减少,由于通带和阻带的平滑过渡,结果也不会有振铃现象。截止频率为D0的n阶巴特沃斯低通滤波器的传递函数为:
H ( u , v ) = 1 1 + [ D ( u , v ) / D 0 ] 2 n H(u,v) =\frac 1{1 + [D(u,v)/D_0]^{2n}}
下图是采用4阶巴特沃斯高、低通滤波器得到的图像:
啥打法是否

clear all;
clc
Src = imread('lena1.jpg');
Src_Gray = rgb2gray(Src);

Src_fft = fft2(Src_Gray);
Src_fftshift = fftshift(Src_fft);

[Rows,Cols] = size( Src_fftshift );
n = 4;
Cutoff_freq = 30;
m = fix( Rows/2 );
n = fix( Cols/2 );
Filter_lowpass = zeros(Rows,Cols);
Filter_highpass = zeros(Rows,Cols);
for i = 1 : Rows
    for j = 1 : Cols
        d_eucl = sqrt((i - m)^2 + (j - n)^2);
        Filter_lowpass(i,j) = 1/(1 + (d_eucl/Cutoff_freq)^(2*n));
        Filter_highpass(i,j) = 1/(1 + (Cutoff_freq/d_eucl)^(2*n));
    end
end
H_low = Filter_lowpass .* Src_fftshift;
H_high = Filter_highpass .* Src_fftshift;


Dst_lowpass = ifft2(H_low);
Dst_lowpass = uint8(abs(Dst_lowpass));

Dst_highpass = ifft2(H_high);
Dst_highpass = uint8(abs(Dst_highpass));

%% show image 
subplot(2,3,1);
imshow(Src);
title('1.Src image');

subplot(2,3,4);
imshow(Src_Gray);
title('2.Gray image');

subplot(2,3,2);
imshow(log(abs(Src_fft) + 1),[]);
title('3.Image DFT');

subplot(2,3,3);
imshow(log(abs(Src_fftshift) + 1),[]);
title('4.FFT Shift ');

subplot(2,3,5);
imshow(Dst_lowpass);
title('5.Low-pass filtering');

subplot(2,3,6);
imshow(Dst_highpass);
title('6.High-pass filtering');

猜你喜欢

转载自blog.csdn.net/Chi_Hong/article/details/82758916