張 淼
【摘要】本文采用MATLAB軟件編寫程序,利用一維或二維的傅里葉變換函數(shù),實現(xiàn)了對二維圖像信息的傅里葉變換,通過程序?qū)ζ漕l譜結(jié)果進行處理,利用傅里葉反變換函數(shù),實現(xiàn)了對二維圖像信息的壓縮,進而展示了傅里葉變換與反變換在信號的時域、頻域處理方面的作用。本文有助于對信號處理原理的學(xué)習(xí)與理解。
【關(guān)鍵詞】二維信號 二維離散 傅里葉變換 傅里葉反變換 圖像壓縮 MATLAB
一、引言
對信號的分類,可以從不同的角度進行,通??梢苑譃闀r域信號、頻域信號,一維信號、二維或多維信號,連續(xù)信號、離散信號等。將信號采用數(shù)學(xué)函數(shù)表達式表示,給信號的連續(xù)性、確定性的研究提供了必要的研究基礎(chǔ),而常見的一維或二維的信號,如連續(xù)的一維聲音信號、連續(xù)的二維圖像信號,它們在時域上離散表示時,通常采用相關(guān)的數(shù)據(jù)表示。本文研究的內(nèi)容,主要是時域上離散的二維圖像信號數(shù)據(jù)與其頻域信號的變換、處理問題。
二、二值化離散
對于二維離散數(shù)據(jù)可以理解為:它們原先是時間函數(shù)在一定采樣頻率下離散的結(jié)果。對一張圖像、一個指紋、一個漢字等二維平面上的信息采樣,可得到二維離散數(shù)據(jù)。離散后的數(shù)據(jù),一般為正實數(shù)內(nèi)的數(shù)據(jù),為簡便起見,下面對一個漢字進行二維數(shù)據(jù)進行二值化離散,即非0即1的離散。
將漢字“王”字的二維二值化數(shù)據(jù),可用如圖1(a)所示的矩陣描述,在f(m,n)矩陣中,將漢字中的筆畫上的點用“1”表示,無筆畫的地方用“0”表示。圖1(b)為將圖1(a)中“0”去掉以后的情形,由此可見,圖1(a)所示的矩陣能基本表示出“王”字的信息。當(dāng)然,點陣數(shù)越多,所描述出的漢字信息也越多,準(zhǔn)確性越好,失真越小。
圖1 “王”字的16*16點陣矩陣
對二維連續(xù)信號的傅里葉變換,定義為
(1)
其中p、q為空間頻率,通常f(m,n)為空間頻率的復(fù)數(shù)值函數(shù),它也有模值與相角,其模值為二維幅度譜(能量譜、密度譜)。由于式(1)可表示為
因此,對二維連續(xù)信號f(m,n)的傅里葉變換可視為先沿一個方向進行一維的傅里葉變換,再沿另一個方向進行一維的傅里葉變換。同理,對傅里葉反變換也可以兩次按一維進行。
與一維連續(xù)傅里葉變換相似,式(1)為二維連續(xù)信號的傅里葉變換,要想用計算機處理,必須將其離散化,二維離散傅里葉變換為
(2)
式(2)中,離散矩陣f(m,n)的行與列為M行、N列,M與N可以不相等,但都為正整數(shù)。如在圖1中M=N=16。
三、軟件實現(xiàn)
在MATLAB軟件中,對一維數(shù)組a進行傅里葉變換使用函數(shù)fft(a)進行,對二維數(shù)組c進行傅里葉變換,可以利用對一維數(shù)組進行傅里葉變換的函數(shù),進行二維數(shù)組的傅里葉變換函數(shù),其形式為:fft(fft(c).′).′,也可以直接利用對二維數(shù)組的傅里葉變換函數(shù)fft2(c)進行;對二維數(shù)組c的傅里葉反變換函數(shù),其形式為ifft2(c)。下面的MATLAB程序?qū)崿F(xiàn)對圖1所示的二維離散數(shù)據(jù)的進行顯示、傅里葉變換、能量譜的顯示、頻譜壓縮、傅里葉反變換、還原顯示等處理,程序行右邊以“%”開頭的是程序的注釋。
imshow(f,'notruesize')%顯示矩陣f點陣圖,如圖2所示。
a=input('aaaaa=')%等待從命令窗口輸入任意數(shù),目的是看清圖2結(jié)果。
F = fft2(f);%對矩陣f進行2維傅里葉變換,賦值到F中
F0=F;%將F保存到F0中,后續(xù)還要用到F
F1 = log(abs(F));%對變換結(jié)果取模值,并取常用對數(shù),數(shù)越大,幅度越強
imshow(F1,[-1 4],'notruesize');%以五種顏色顯示頻譜,
colormap(jet); colorbar%結(jié)果如圖3所示
a=input('bbbbb=') %等待從命令窗口輸入任意數(shù)
由圖3可知,頻譜的中心部分對應(yīng)圖像的高頻分量,其能量較低,它們在傅里葉變換反變換中作用較小,為此,可將中心部分的頻譜去掉,清空為零,,然后進行傅里葉變換反變換,得到點陣圖案。為此,可繼續(xù)執(zhí)行如下程序。
for i=8:1:10;%對第8到第10行
for j=6:1:12;%對第6到第12列
F( i,j )=0;%頻譜的中間清空(為0)
end%列循環(huán)結(jié)束
end%行循環(huán)結(jié)束
f1=ifft2(F)%對中空的頻譜做傅里葉反變換
f2=abs(f1)%對變換結(jié)果取絕對值,因為變換結(jié)果為有正、負的實數(shù)
imshow(f2,'notruesize') %將矩陣f2中的數(shù)據(jù)顯示出來,結(jié)果與圖2完全相同
a=input('cccccc=')%等待從命令窗口輸入任意數(shù),目的是看清圖的結(jié)果
從中空的頻譜的反變換所得到的點陣圖像與原點陣圖像相同這一點說明,二維數(shù)據(jù)的頻譜從能量上看,主要分布在邊緣部分,如果將原頻譜F0的四角重新組織在一起,從16*16頻譜矩陣F0生成一個新的8*8頻譜矩陣F2。
這樣處理,實際上就是實現(xiàn)了頻譜壓縮,將壓縮的頻譜進行傅里葉變換反變換,得到壓縮一般的點陣圖案,為此,可繼續(xù)執(zhí)行程序(程序略)。
由圖4可見,這是一個非二值化的灰度圖象,已基本上看不清是一個“王”字,因為在f4矩陣中的數(shù)據(jù)盡管是實數(shù),但并非是非0即1的數(shù)據(jù),為此,要進行二值化處理,將高于某個數(shù)值的認為是1,而低于某個數(shù)值的認為是0,這個數(shù)值即閾值。對閾值的選擇,可取f4矩陣中的數(shù)據(jù)的平均值。
四、結(jié)論
通過程序執(zhí)行發(fā)現(xiàn),用平均值作閾值所得到的圖像并不是十分理想,而當(dāng)閾值y=2.53~2.71時,形成的壓縮圖像保持一致,如圖6所示。比較圖2原16*16點陣圖與圖6壓縮8*8點陣圖,壓縮圖筆畫信息稍有失真。可見,還原閾值的選擇十分重要。
以上例子顯示了利用傅里葉變換與反變換函數(shù),對二維圖像信息的壓縮處理與還原的具體應(yīng)用,展示了傅里葉變換與反變換在信號的時域、頻域處理方面的作用。
參考文獻:
[1]程佩青.數(shù)字信號處理教程[M].北京:清華大學(xué)出版社,2001,8.
[2]樊昌信.通信原理[M].北京:國防工業(yè)出版社,2008,3.