matlab的傅里叶变换
更多MATLAB圖像處理視頻請(qǐng)點(diǎn)擊? http://study.163.com/course/courseMain.htm?courseId=1003594013???
圖像變換: ???
更多MATLAB圖像處理視頻請(qǐng)點(diǎn)擊? http://study.163.com/course/courseMain.htm?courseId=1003594013
???? 在 MATLAB 中,一般用二元函數(shù) f(x, y) 作為圖像的數(shù)學(xué)表示。? f( x, y) 表示在特定點(diǎn)f( x, y) 處的函數(shù)值,表示圖像在該點(diǎn)相應(yīng)的顏色強(qiáng)度或者灰度。所謂圖像變換就是指把圖像轉(zhuǎn)換為另一種數(shù)學(xué)表示方式的操作。
??????? 在圖像處理技術(shù)中,圖像的正交變換技術(shù)有著廣泛的應(yīng)用,是圖像處理的重要工具。通過變換圖像,改變圖像的表示域及表示數(shù)據(jù),可以給后繼工作帶來極大的方便。例如,傅立葉變換可使處理分析在頻域中進(jìn)行,使運(yùn)算簡(jiǎn)單;而離散余弦變換(DCT)可使能量集中在少數(shù)數(shù)據(jù)上,從而實(shí)現(xiàn)數(shù)據(jù)壓縮,便于圖像傳輸和存儲(chǔ)。
???????? 1.傅立葉變換的基本概念
?????? 假設(shè)? f (m,n) 是一個(gè)包含兩個(gè)離散空間變量 m 和 n 的函數(shù),則該函數(shù)的二維傅立葉變換的定義如下:
????????????????????????????????????????????????????????????
?????? 式中, ω 1 和 ω 2 為頻域變量,其單位為弧度/采樣單元。通常函數(shù) F( ω 1 ,? ω 2 )稱為函數(shù) f (m, n)的頻域表示。F( ω 1 ,? ω 2 )是復(fù)變函數(shù),其變量 ω 1 和 ω 2 的周期均為 2π。因?yàn)檫@種周期性的存在,所以通常在圖像顯示時(shí),這兩個(gè)變量的取值范圍為-pi<=ω 1,ω 2<=pi.
?? 傅立葉反變換定義如下:
????????????
??????? 簡(jiǎn)單地說,該方程說明 f (m, n)可以表示為無限多項(xiàng)不同頻率的復(fù)指函數(shù)之和。而不同的頻率點(diǎn)( ω 1 ,? ω 2 )所做的貢獻(xiàn)由幅度 F( ω 1 ,? ω 2 )決定。
? ?
????? 例如,考察下面的矩形函數(shù) f (m, n)。該函數(shù)在一個(gè)矩形的區(qū)域中的函數(shù)值為 1,其他區(qū)域都為 0,如圖 所示。
????? 在 MATLAB 中,變量 m、n 和函數(shù) f (m, n)均采用離散表示,所以要想真實(shí)地逼近連續(xù)函數(shù),只能通過提高取樣率。因此,f (m, n)函數(shù)的傅立葉變換可由以下程序段獲得,傅立葉變換的幅值即|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('矩形連續(xù)函數(shù)')
%圖片自動(dòng)適應(yīng)窗口大小輸出
F=fft2(f,N,N);
% F = fft2(f,N,N)是由用戶設(shè)定變換區(qū)域的大小NxN。當(dāng)然,如果用戶設(shè)定的區(qū)域大小不是 2 的整數(shù)次方,FFT 還會(huì)有默認(rèn)的補(bǔ)零操作
F2=fftshift(abs(F));
%fftshift的作用正是讓正半軸部分和負(fù)半軸部分的圖像分別關(guān)于各自的中心對(duì)稱。
%因?yàn)橹苯佑胒ft得出的數(shù)據(jù)與頻率不是對(duì)應(yīng)的,fftshift可以糾正過來
figure(2);
x=1:N;y=1:N;
mesh(x,y,F2(x,y)),title('傅立葉變換幅值');%三維網(wǎng)格圖
colormap(gray);%輸出灰色系曲面圖
colorbar;%添加顏色條
2.離散傅立葉變換
????? 在用計(jì)算機(jī)處理傅立葉變換通常采用離散傅立葉變換(Discrete Fourier Transform,DFT)。采用離散傅立葉變換主要有以下兩個(gè)原因:
??? (1)因?yàn)?DFT 的輸入/輸出均為離散值,非常適用于計(jì)算機(jī)的運(yùn)算操作。
?? (2)采用離散傅立葉變換,就可以用一種快速算法,即快速傅立葉變換(Fast FourierTransform,FFT)。
???? FFT 的設(shè)計(jì)思想是將原函數(shù)分為奇數(shù)項(xiàng)和偶數(shù)項(xiàng),通過不斷將一個(gè)奇數(shù)項(xiàng)和一個(gè)偶數(shù)項(xiàng)相加(減),得到需要的結(jié)果。
?? 也就是說 FFT 是將復(fù)雜的乘法運(yùn)算變成兩個(gè)數(shù)相加(減)的簡(jiǎn)單運(yùn)算的重復(fù),即通過計(jì)算兩個(gè)單點(diǎn)的 DFT,來計(jì)算兩個(gè)雙點(diǎn)的 DFT;通過計(jì)算兩個(gè)雙點(diǎn)的 DFT,來計(jì)算四個(gè)? 點(diǎn)的DFT??依此類推。
??? 對(duì)于任何 N=2 m 的 DFT 的計(jì)算,通過計(jì)算兩個(gè) N/2 點(diǎn)的 DFT,來計(jì)算 N 個(gè)點(diǎn)的 DFT。
??? 數(shù)學(xué)定義:
???
????? 在 MATLAB 中,可分別用函數(shù) fft、fft2 和 fftn 來計(jì)算一維、二維和 n 維的 FFT,而其反變換依次為 ifft、ifft2 和 ifftn。
例:
?f = zeros(30,30);
f(5:24,13:17) = 1;
imshow(f,'InitialMagnification','fit');title('矩形連續(xù)函數(shù)');
%圖片自動(dòng)適應(yīng)窗口大小輸出
F = fft2(f);
F2 = log(abs(F));%輸出幅度值的另一種方法
figure
imshow(F2,[-1 5],'InitialMagnification','fit'); colormap(jet); colorbar;title('傅里葉變換幅值');
%matlab colormap(jet)中數(shù)值大為紅色,數(shù)值小為藍(lán)色
??? 在計(jì)算離散傅立葉變換時(shí),可以通過下面的語句對(duì)被變換函數(shù)(或圖像區(qū)域)進(jìn)行補(bǔ)零操作來提高分辨率,具體調(diào)用方式如下:
??? F = fft2(f,M,N);M×N 表示進(jìn)行補(bǔ)零操作后被變換區(qū)域的大小,與原區(qū)域不相重疊的區(qū)域補(bǔ)零。
3.利用傅立葉變換進(jìn)行圖像特征識(shí)別
(1)快速卷積
? ? ? ?? 傅立葉變換的另一個(gè)重要特性是能夠?qū)崿F(xiàn)快速卷積。由線性系統(tǒng)理論可知,兩個(gè)函數(shù)的卷積的傅立葉變換等于兩個(gè)函數(shù)的傅立葉變換的乘積。該特性與快速傅立葉變換一
起,可以快速計(jì)算函數(shù)的卷積
fft(f1*f2)=fft(f1)x fft(f2)
f1*f2=ifft(fft(f1)xfft(f2));
(2)圖像特征識(shí)別
? ?? 傅立葉變換可以用于與卷積密切相關(guān)的相關(guān)運(yùn)算(correlation)。在數(shù)字圖像處理中的相關(guān)運(yùn)算通常用于匹配模板,可以用于對(duì)某些模板對(duì)應(yīng)的特征進(jìn)行定位。例如,假如我們希望在圖像 text.tif 中定位字母“a”,如圖所示,可以采用下面的方法定位。
? ? 將包含字母“a”的圖像與圖像 text.png 進(jìn)行相關(guān)運(yùn)算,也就是對(duì)字母“a”的圖像和圖像 text.png 進(jìn)行傅立葉變換,然后利用快速卷積的方法,計(jì)算字母“a”和圖像 text.png 的卷積,提取卷積運(yùn)算的峰值,即得到在圖像 text.png 中對(duì)應(yīng)字母“a”的定位結(jié)果。
例:
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);
>> %卷積運(yùn)算的值大于60的輸出為白色,小于的為黑色,卷積值反映了相似程度,越大表示越相近,當(dāng)大于閾值的時(shí)候就任務(wù)是字母'a'了,
更多MATLAB圖像處理視頻請(qǐng)點(diǎn)擊? http://study.163.com/course/courseMain.htm?courseId=1003594013
總結(jié)
以上是生活随笔為你收集整理的matlab的傅里叶变换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tf.data详解
- 下一篇: plt.errorbar画误差曲线