数字图像处理之傅里叶变换
数字图像处理之傅里叶变换
by方阳
版权声明:本文为博主原创文章,转载请指明转载地址
http://www.cnblogs.com/fydeblog/p/7068986.html
1. 前言
今天将之前学的数字图像处理的东西放到博客园里,所以下面会有连续几篇的博客都是关于数字图像处理的!
这篇博客将介绍图像的快速傅里叶变换,逆变换以及图像的平移变换的实现,理论的知识还请看书和百度,这里不再复述。
2. 原理说明
(1) 图像的二维FFT变换可以观察图像的频谱,再进行逆变换即可复原图像;
(2) 图像的平移性:图像在空间域乘以-1^(x+y),再进行傅里叶变换,即可看出图像的频谱图在x和y周平移了半个周期,原因是-1^(x+y)傅里叶变换表现复指数函数,相当于频谱的平移;
3. 实现内容
(1) 选择一幅图像,显示傅里叶变换频谱。再对得到傅里叶图像做傅里叶逆变换,显示图像,观察是否与原图像相同。
(2) 图像做傅里叶变换的平移性证明,将频谱中心移至中央。
4. 程序实现及实验结果
(1) 图像的傅里叶变换与反变换
参考代码:
I=imread('lena.bmp'); I_2D=D3_To_D2(I); I1=fft2(I_2D); I2=uint8(real(ifft2(I1))); I1=log(1+abs(fftshift(I1))); figure; subplot(1,3,1); imshow(I); title('原图'); subplot(1,3,2); imshow(I1,[]); title('fft2后的频谱'); subplot(1,3,3); imshow(I2,[]); title('ifft2后的复原图像');
D3_To_D2函数(将三维降二维)参考代码:
function image_out=D3_To_D2(image_in) [m,n]=size(image_in); n=n/3;%由于我的灰度图像是185x194x3的,所以除了3,你们如果是PxQ的,就不要加了 A=zeros(m,n);%构造矩阵 for i=1:m for j=1:n A(i,j)= image_in(i,j);%填充图像到A end end image_out=uint8(A);
运行结果:
(2)平移验证
参考代码:
f(1000,1000)=0; f=mat2gray(f); [Y,X]=meshgrid(1:1000,1:1000); f(350:649,475:524)=1; f2=f.*(-1).^(X+Y); f1=fft2(f); f1_1=abs(f1); f2=fft2(f2); f3=log(1+abs(f2)); figure; subplot(2,2,1); imshow(f); title('原图'); subplot(2,2,2); imshow(f1_1,[]); title('fft2后的频谱'); subplot(2,2,3); imshow(abs(f2),[]); title('中心化'); subplot(2,2,4); imshow(f3,[]); title('对数化');
运行结果:
(3)相角复原(新添的)
参考代码:
I=imread('boy.jpg'); I=D3_To_D2(I); I=fft2(I); I_angle=angle(I); I4=exp(1i*I_angle); I4=uint8(ifft2(I4)*256); I5=ifft2(I); figure; subplot(2,2,1); imshow(I_angle); title('相角'); subplot(2,2,2); imshow(I4,[]); title('相角复原后的图像'); subplot(2,2,3); imshow(I5,[]); title('谱复原后的图像');
运行结果:
五. 结果分析
1.由第一个图可以看出,图像经过傅里叶变换再经过傅里叶反变换是可以还原出原图像的。
2.由第二个图可以看出,图像的平移性对观察图像的傅里叶频谱很有帮助,图像的频谱经过平移,低频聚集在中心,易于观察,对频谱进行对数化可以更加直观看图像的频谱分布。
3.由第三个图可以看出,相角决定图像的细节。