matlab的傅里葉變換

原文鏈接:https://blog.csdn.net/MATLAB_matlab/article/details/54087573

更多MATLAB圖像處理視頻請點擊  http://study.163.com/course/courseMain.htm?courseId=1003594013   

圖像變換:    

更多MATLAB圖像處理視頻請點擊  http://study.163.com/course/courseMain.htm?courseId=1003594013

     在 MATLAB 中,一般用二元函數 f(x, y) 作爲圖像的數學表示。  f( x, y) 表示在特定點f( x, y) 處的函數值,表示圖像在該點相應的顏色強度或者灰度。所謂圖像變換就是指把圖像轉換爲另一種數學表示方式的操作。

        在圖像處理技術中,圖像的正交變換技術有着廣泛的應用,是圖像處理的重要工具。通過變換圖像,改變圖像的表示域及表示數據,可以給後繼工作帶來極大的方便。例如,傅立葉變換可使處理分析在頻域中進行,使運算簡單;而離散餘弦變換(DCT)可使能量集中在少數數據上,從而實現數據壓縮,便於圖像傳輸和存儲。

         1.傅立葉變換的基本概念

       假設  f (m,n) 是一個包含兩個離散空間變量 m 和 n 的函數,則該函數的二維傅立葉變換的定義如下:

                                                            

       式中, ω 1 和 ω 2 爲頻域變量,其單位爲弧度/採樣單元。通常函數 F( ω 1 ,  ω 2 )稱爲函數 f (m, n)的頻域表示。F( ω 1 ,  ω 2 )是複變函數,其變量 ω 1 和 ω 2 的週期均爲 2π。因爲這種週期性的存在,所以通常在圖像顯示時,這兩個變量的取值範圍爲-pi<=ω 1,ω 2<=pi.

   傅立葉反變換定義如下:

            

        簡單地說,該方程說明 f (m, n)可以表示爲無限多項不同頻率的復指函數之和。而不同的頻率點( ω 1 ,  ω 2 )所做的貢獻由幅度 F( ω 1 ,  ω 2 )決定。

   

      例如,考察下面的矩形函數 f (m, n)。該函數在一個矩形的區域中的函數值爲 1,其他區域都爲 0,如圖 所示。
      在 MATLAB 中,變量 m、n 和函數 f (m, n)均採用離散表示,所以要想真實地逼近連續函數,只能通過提高取樣率。因此,f (m, n)函數的傅立葉變換可由以下程序段獲得,傅立葉變換的幅值即|F( ω 1 ,  ω 2 )|,如圖 (b)所示。其中 x 軸和 y 軸分別爲水平分量和垂直分量

例:  

N=100;
f=zeros(50,50);
f(15:35,23:28)=1;
figure(1);
imshow(f,'InitialMagnification','fit');title('矩形連續函數')
%圖片自動適應窗口大小輸出

F=fft2(f,N,N);
% F = fft2(f,N,N)是由用戶設定變換區域的大小NxN。當然,如果用戶設定的區域大小不是 2 的整數次方,FFT 還會有默認的補零操作

F2=fftshift(abs(F));
%fftshift的作用正是讓正半軸部分和負半軸部分的圖像分別關於各自的中心對稱。
%因爲直接用fft得出的數據與頻率不是對應的,fftshift可以糾正過來

figure(2);
x=1:N;y=1:N;
mesh(x,y,F2(x,y)),title('傅立葉變換幅值');%三維網格圖
colormap(gray);%輸出灰色系曲面圖
colorbar;%添加顏色條





2.離散傅立葉變換

      在用計算機處理傅立葉變換通常採用離散傅立葉變換(Discrete Fourier Transform,DFT)。採用離散傅立葉變換主要有以下兩個原因:

    (1)因爲 DFT 的輸入/輸出均爲離散值,非常適用於計算機的運算操作。
   (2)採用離散傅立葉變換,就可以用一種快速算法,即快速傅立葉變換(Fast FourierTransform,FFT)。
     FFT 的設計思想是將原函數分爲奇數項和偶數項,通過不斷將一個奇數項和一個偶數項相加(減),得到需要的結果。

   也就是說 FFT 是將複雜的乘法運算變成兩個數相加(減)的簡單運算的重複,即通過計算兩個單點的 DFT,來計算兩個雙點的 DFT;通過計算兩個雙點的 DFT,來計算四個  點的DFT⋯⋯依此類推。

    對於任何 N=2 m 的 DFT 的計算,通過計算兩個 N/2 點的 DFT,來計算 N 個點的 DFT。
    數學定義:

   

      在 MATLAB 中,可分別用函數 fft、fft2 和 fftn 來計算一維、二維和 n 維的 FFT,而其反變換依次爲 ifft、ifft2 和 ifftn。

例:

 f = zeros(30,30);
f(5:24,13:17) = 1;
imshow(f,'InitialMagnification','fit');title('矩形連續函數');
%圖片自動適應窗口大小輸出
F = fft2(f);
F2 = log(abs(F));%輸出幅度值的另一種方法
figure
imshow(F2,[-1 5],'InitialMagnification','fit'); colormap(jet); colorbar;title('傅里葉變換幅值');
%matlab colormap(jet)中數值大爲紅色,數值小爲藍色

    在計算離散傅立葉變換時,可以通過下面的語句對被變換函數(或圖像區域)進行補零操作來提高分辨率,具體調用方式如下:
    F = fft2(f,M,N);M×N 表示進行補零操作後被變換區域的大小,與原區域不相重疊的區域補零。


3.利用傅立葉變換進行圖像特徵識別

(1)快速卷積

         傅立葉變換的另一個重要特性是能夠實現快速卷積。由線性系統理論可知,兩個函數的卷積的傅立葉變換等於兩個函數的傅立葉變換的乘積。該特性與快速傅立葉變換一
起,可以快速計算函數的卷積

fft(f1*f2)=fft(f1)x fft(f2)

f1*f2=ifft(fft(f1)xfft(f2));

(2)圖像特徵識別

     傅立葉變換可以用於與卷積密切相關的相關運算(correlation)。在數字圖像處理中的相關運算通常用於匹配模板,可以用於對某些模板對應的特徵進行定位。例如,假如我們希望在圖像 text.tif 中定位字母“a”,如圖所示,可以採用下面的方法定位。

    將包含字母“a”的圖像與圖像 text.png 進行相關運算,也就是對字母“a”的圖像和圖像 text.png 進行傅立葉變換,然後利用快速卷積的方法,計算字母“a”和圖像 text.png 的卷積,提取卷積運算的峯值,即得到在圖像 text.png 中對應字母“a”的定位結果。

例:

bw=imread('text.png');
>> a=bw(32:45,88:98);
>> figure,imshow(bw),title('原圖,在這幅圖中找出字母a的位置');
>> figure,imshow(a),title('字母a');
>>
>> C = real(ifft2(fft2(bw) .* fft2(rot90(a,2),256,256)));
figure, imshow(C,[]),title('C');
>> max(C(:))

ans =

   68.0000

>> thresh=60;
>> figure,imshow(C>thresh);
>> %卷積運算的值大於60的輸出爲白色,小於的爲黑色,卷積值反映了相似程度,越大表示越相近,當大於閾值的時候就任務是字母'a'了,


更多MATLAB圖像處理視頻請點擊  http://study.163.com/course/courseMain.htm?courseId=1003594013

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章