【数字图像处理】傅里叶变换
实验原理及知识点
1.应用傅里叶变换进行图像处理
傅里叶变换是线性系统分析的一个有力工具,它能够定量地分析诸如数字化系统、采样点、电子放大器、卷积滤波器、噪音和显示点等的作用。通过实验培养这项技能,将有助于解决大多数图像处理问题。对任何想在工作中有效应用数字图像处理技术的人来说,把时间用在学习和掌握博里叶变换上是很有必要的。
2.傅立叶(Fourier)变换的定义
对于二维信号,二维Fourier变换定义为:
$F\left ( u,v \right )= \int_{-\infty }^{\infty }\int_{-\infty }^{\infty }f\left ( x,y \right )e^{-j2\pi \left ( ux+uy \right )}dxdy$
逆变换:
$f\left ( x,y \right )= \int_{-\infty }^{\infty }\int_{-\infty }^{\infty }F\left ( u,v \right )e^{j2\pi \left ( ux+uy \right )}dudv$
二维离散傅立叶变换为:
$F\left ( m,n \right )\frac{1}{N}\sum_{i=0}^{N-1}\sum_{k=0}^{N-1}f\left ( i,k \right )e^{-j2\pi \left ( m\frac{i}{N}+n\frac{k}{N} \right )}$
逆变换:
$f\left ( i,k \right )\frac{1}{N}\sum_{m=0}^{N-1}\sum_{n=0}^{N-1}F\left ( m,n \right )e^{j2\pi \left ( m\frac{i}{N}+n\frac{k}{N} \right )}$
图像的傅立叶变换与一维信号的傅立叶变换变换一样,有快速算法,具体参见参考书目,有关傅立叶变换的快速算法的程序不难找到。实际上,现在有实现傅立叶变换的芯片,可以实时实现傅立叶变换。
实验内容
1.读入一副图像,对其进行傅里叶变换,分别显示,原图,傅里叶变换图,中心化后图。
clear; clc; Img=imread('LongyuanCai.jpg');%读入原图 I=rgb2gray(Img);%将RGB图像变换 IF=fft2(I);%进行傅里叶变换 I1=log(abs(IF)+1);%取模后缩放 IC=fftshift(I1);%将频谱图中零频率成分移动至频谱图中心(中心化) I2=log(abs(IC)+1);%取模后缩放显示中心化后图 figure;subplot(131);imshow(Img);title('原图'); subplot(132);imshow(I1,[]);title('傅里叶变换图'); subplot(133);imshow(I2,[]);title('中心化后图');
实验问题及解决:
%1.取模后图像矩阵的数值一般会很大,直接用imshow函数是无法显示的,此时可以用log函数取其对数,如log(abs(F)+1),这样就可以对频谱进行缩放。
%2.fftshift将频谱图中零频率成分移动至频谱图中心
%3.傅里叶变换和频移图imshow函数需要加上[]才能显示
%4.abs作用是将所得变量绝对值和复数求模
2.生成一副图像(简单的黑底白块),对其进行旋转变换,分别对原图和旋转后的图像进行离散傅里叶变换,显示2副傅里叶变换图。
clear; clc; I=zeros(256,256);I(59:237,120:136)=1; J=imrotate(I,45,'bilinear','crop'); I1=fft2(I);F=abs(I1);I2=fftshift(F); J1=fft2(J);F=abs(J1);J2=fftshift(F); subplot(221);imshow(I); subplot(222);imshow(J); subplot(223);imshow(I2,[]); subplot(224);imshow(J2,[]);
实验问题及解决:
%显示傅里叶频谱需要进行:1.傅里叶变换(fft2)
%2.变换后的变量求模(abs)
%3.转换成频谱图并将频谱图中零频率成分移动至频谱图中心(fftshift)
3.读入一副图像,将其变为灰度图。加入高斯噪声,并分别对加入噪声前后的图像进行傅里叶变换,并显示。
clear; clc; Img=imread('GirlFriend.jpg');%读入图像 I=rgb2gray(Img);%图像由RGB变成灰度图 I1=fft(I);F=abs(I1);I2=fftshift(F);%噪声前傅里叶变换 J=imnoise(I,'gaussian',0,0.01);%加入高斯噪声 J1=fft(J);F=abs(J1);J2=fftshift(F);%噪声后傅里叶变换 figure;subplot(131);imshow(I);title('灰度图'); subplot(132);imshow(I2,[]);title('傅里叶变换图'); subplot(133);imshow(J2,[]);title('噪声后图');
4.生成一副图像(简单的黑底白块,参考下面生成程序,但是需自己重新设定数值),进行离散傅里叶变换,再对其分别进行X轴与Y轴上的平移,并分别对其进行离散傅里叶变换,观察3副傅里叶变换图。需显示6幅图,原图,行平移图,列平移图,行平移傅里叶变换图(频谱中心化),列平移傅里叶变换图(频谱中心化)。
clear; clc; I=zeros(256,256);I(59:230,120:136)=1;%产生原图(行坐标修改) [M,N]=size(I);g=zeros(M,N);h=zeros(M,N); a=20;b=20; for i=1:M %行平移 for j=1:N if ((i-a>0)&&(i-a0)&&(j-b