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