matlab的傅里叶变换
更多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
總結
以上是生活随笔為你收集整理的matlab的傅里叶变换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tf.data详解
- 下一篇: plt.errorbar画误差曲线