|
| 1 | +# 图像的傅立叶变换 |
| 2 | + |
| 3 | +## 目的 |
| 4 | + |
| 5 | +1.掌握二维 DFT 变换及其物理意义 |
| 6 | + |
| 7 | +2.掌握二维 DFT 变换的MATLAB 程序 |
| 8 | + |
| 9 | +3.空域滤波与频域滤波 |
| 10 | + |
| 11 | +## 原理 |
| 12 | + |
| 13 | +### 1.应用傅立叶变换进行图像处理 |
| 14 | + |
| 15 | +傅里叶变换是线性系统分析的一个有力工具,它能够定量地分析诸如数字化系统、采样点、电子放大器、卷积滤波器、噪音和显示点等的作用。通过实验培养这项技能,将有助于解决大多数图像处理问题。对任何想在工作中有效应用数字图像处理技术的人来说,把时间用在学习和掌握博里叶变换上是很有必要的。 |
| 16 | + |
| 17 | +### 2.傅立叶(Fourier)变换的定义 |
| 18 | + |
| 19 | +对于二维信号,二维Fourier 变换定义为: |
| 20 | +$$ |
| 21 | +F(u, v)=\int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f(x, y) e^{-j 2 \pi (u x+vy)} d x d y |
| 22 | +$$ |
| 23 | +逆变换: |
| 24 | +$$ |
| 25 | +f(x, y)=\int_{-\infty}^{\infty} \int_{-\infty}^{\infty} F(u d, v) e^{j 2 \pi (u x+vy) } d u d v |
| 26 | +$$ |
| 27 | +二维离散傅立叶变换为: |
| 28 | +$$ |
| 29 | +F(u, v)=\sum_{x=0}^{M-1} \sum_{y=0}^{N-1} f(x, y) e^{-j 2 \pi(\frac{\mathrm{ux}}{\mathrm{M}}+\frac{v y}{N})} |
| 30 | +$$ |
| 31 | +逆变换: |
| 32 | +$$ |
| 33 | +f(x, y)=\frac{1}{M N} \sum_{u=0}^{M-1} \sum_{v=0}^{N-1} F(u, v) e^{j 2 \pi(\frac{\mathrm{ux}}{M}+\frac{v y}{N})} |
| 34 | +$$ |
| 35 | +图像的傅立叶变换与一维信号的傅立叶变换变换一样,有快速算法,具体参见参考书目,有关傅立叶变换的快速算法的程序不难找到。实际上,现在有实现傅立叶变换的芯片,可以实时实现傅立叶变换。 |
| 36 | + |
| 37 | +## 利用MATLAB 实现数字图像的傅立叶变换 |
| 38 | + |
| 39 | +A. |
| 40 | + |
| 41 | +```matlab |
| 42 | +I=imread('D:\pic\DIP3E_CH03\Fig0316(3)(third_from_top).tif'); %读入原图像文件 |
| 43 | +imshow(I); %显示原图像 |
| 44 | +fftI=fft2(I); %二维离散傅立叶变换 |
| 45 | +sfftI=fftshift(fftI); %直流分量移到频谱中心 |
| 46 | +RR=real(sfftI); %取傅立叶变换的实部 |
| 47 | +II=imag(sfftI); %取傅立叶变换的虚部 |
| 48 | +A=sqrt(RR.^2+II.^2);%计算频谱幅值 |
| 49 | +A=(A-min(min(A)))/(max(max(A))-min(min(A)))*225; %归一化 |
| 50 | +figure %设定窗口 |
| 51 | +imshow(A); %显示原图像的频谱 |
| 52 | +``` |
| 53 | + |
| 54 | +B. |
| 55 | + |
| 56 | +傅立叶变换在图像处理,特别是在图像增强、复原和压缩中,扮演着非常重要的作用。实际中一般采用一种叫做快速傅立叶变换(FFT)的方法,MATLAB 中的fft2 指令用于得到二维FFT 的结果,ifft2 指令用于得到二维FFT 逆变换的结果。 |
| 57 | + |
| 58 | +近似冲击函数的二维快速傅立叶变换(FFT) |
| 59 | + |
| 60 | +```matlab |
| 61 | +x=1:99;y=1:99; |
| 62 | +[X,Y]=meshgrid(x,y); |
| 63 | +A=zeros(99,99); |
| 64 | +A(49:51,49:51)=1; |
| 65 | +B=fft2(A); |
| 66 | +subplot(1,2,1),imshow(A),xlabel('空域图象'); |
| 67 | +subplot(1,2,2),imshow(B),xlabel('时域图象'); |
| 68 | +figure |
| 69 | +subplot(1,2,1),mesh(X,Y,A),xlabel('空域'),grid on; |
| 70 | +subplot(1,2,2),mesh(X,Y,abs(B)),xlabel('时域'),grid on; |
| 71 | +``` |
| 72 | + |
| 73 | +## 空域滤波与频域滤波 |
| 74 | + |
| 75 | +```matlab |
| 76 | +% 用于频域滤波的m函数 |
| 77 | +function g=dftfilt(f,H) |
| 78 | +F=fft2(f,size(H,1),size(H,2)); |
| 79 | +g=real(ifft2(H.*F)); |
| 80 | +g=g(1:size(f,1),1:size(f,2)); |
| 81 | +
|
| 82 | +% |
| 83 | +function PQ=paddedsize(AB,CD,PARAM) |
| 84 | +if nargin==1 |
| 85 | +PQ=2*AB; |
| 86 | +elseif nargin ==2 & ~ischar(CD) |
| 87 | +PQ=AB+CD-1; |
| 88 | +PQ=2*ceil(PQ/2); |
| 89 | +elseif nargin == 2 |
| 90 | +m=max(AB); |
| 91 | +P=2^nextpow2(2*m); |
| 92 | +PQ=[P,P]; |
| 93 | +elseif nargin == 3 |
| 94 | +m=max([AB CD]); |
| 95 | +P=2^nextpow2(2*m); |
| 96 | +PQ=[P,P]; |
| 97 | +else |
| 98 | +error('Wrong number of inputs') |
| 99 | +end |
| 100 | +
|
| 101 | +
|
| 102 | +%图像f的傅里叶频谱 |
| 103 | +f=imread(' D:\pic\DIP3E_CH04\Fig0438(a)(bld_600by600).tif'); |
| 104 | +F=fft2(f); |
| 105 | +S=fftshift(log(1+abs(F))); |
| 106 | +%S=gscale(S); |
| 107 | +% gscale 函数参照 function g=gscale(f,varargin) |
| 108 | +imshow(S) |
| 109 | +
|
| 110 | +%使用函数fspecial生成空间滤波器 |
| 111 | +h=fspecial(‘sobel’) |
| 112 | +freqz2(h) %查看相应频域滤波器图形 |
| 113 | +PQ=paddedsize(size(f)); |
| 114 | +H=freqz2(h,PQ(1),PQ(2)); |
| 115 | +H1=ifftshift(H); |
| 116 | +
|
| 117 | +imshow(abs(H),[]) |
| 118 | +figure,imshow(abs(H1),[]) |
| 119 | +
|
| 120 | +gs=imfilter(double(f),h);% 生成滤波后的图像,并默认采用了0进行边界填 |
| 121 | +充 |
| 122 | +gf=dftfilt(f,H1); |
| 123 | +
|
| 124 | +imshow(gs,[]) |
| 125 | +figure,imshow(gf,[]) |
| 126 | +
|
| 127 | +figure,imshow(abs(gs),[]) |
| 128 | +figure,imshow(abs(gf),[]) |
| 129 | +
|
| 130 | +%创建一幅阀值2值图像 |
| 131 | +figure,imshow(abs(gs)>0.2*abs(max(gs(:)))) |
| 132 | +figure,imshow(abs(gf)>0.2*abs(max(gf(:)))) |
| 133 | +d=abs(gs-gf); |
| 134 | +max(d(:)) |
| 135 | +min(d(:)) |
| 136 | +``` |
| 137 | + |
| 138 | + |
| 139 | + |
| 140 | +参考文献: |
| 141 | + |
| 142 | +[1] [Rafael C. Gonzalez, Richard E. Woods, and Steven L. Eddins. 2003. Digital Image Processing Using MATLAB. Prentice-Hall, Inc., USA.](https://github.com/timerring/digital-image-processing-matlab/blob/main/reference/Digital_Image_Processing_Using_Matlab.pdf) |
| 143 | + |
| 144 | +[2] [阮秋琦. 数字图像处理(MATLAB版)\[M\]. 北京:电子工业出版社, 2014.](https://github.com/timerring/digital-image-processing-matlab/blob/main/reference/Digital_Image_Processing_(MATLAB_version).pdf) |
| 145 | + |
| 146 | +[3] [冈萨雷斯. 数字图像处理(第三版)\[M\]. 北京:电子工业出版社, 2011.](https://github.com/timerring/digital-image-processing-matlab/blob/main/reference/Digital_Image_Processing_(Third_Edition).pdf) |
| 147 | + |
| 148 | + |
| 149 | + |
| 150 | +[返回首页](https://github.com/timerring/digital-image-processing-matlab) |
0 commit comments