數字圖像處理之傅里葉變換
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.由第三個圖可以看出,相角決定圖像的細節。