圖像傅里葉變換、反變換的實現(xiàn)
課程大作業(yè)實驗報告
圖像傅里葉變幻、反變換的實現(xiàn)
課程名稱:數(shù)字圖像處理
組 長: 王文雄 學號:200730590323 年級專業(yè)班級:07通信3班 成員一: 龐柱堅 學號:200730590318 年級專業(yè)班級:07通信3班 成員二: 王彌光 學號:200730590322 年級專業(yè)班級: 07通信3班 成員三: 學號: 年級專業(yè)班級:07通信3班
指導教師 鄧繼忠
報告提交日期
2010年 6 月1日
項目答辯日期
2010年 6 月1日
目 錄
1. 項目要求............................................................... 3 2. 項目開發(fā)環(huán)境........................................................... 3 3. 系統(tǒng)分析............................................................... 3 3.1. 系統(tǒng)的主要功能分析 ............................................... 3 3.2. 系統(tǒng)的關鍵問題及解決方法(或思路) ............................... 6 4. 系統(tǒng)設計............................................................... 8 4.1. 程序流程圖及說明 ................................................... 8 4.2. 程序主要模塊(或功能)介紹 ........................................ 10 4.2.1. 一維 FFT 和 IFFT ............................................. 10 4.2.2. 二維圖像 FFT 和 IFFT: ....................................... 11 5. 實驗結果與分析........................................................ 12 5.1. 實驗結果 .......................................................... 12 5.2. 項目的創(chuàng)新之處 .................................................... 13 5.3. 存在問題及改進設想 ................................................ 13 6. 心得體會.............................................................. 14 6.1. 系統(tǒng)開發(fā)的體會 .................................................... 14 6.2. 對本門課程的改進意見或建議 ........................................ 14 7. 附件一................................................................ 15
1. 項目要求
1.基本要求:自修教材相關內容(P52-74)或其它參考資料,在CVI下編程對尺寸為2N(N為正整數(shù))的圖像進行FFT(快速傅里葉變換)和(快速傅里葉反變換)。 (不能利用CVI下的函數(shù))
2.題目拓展:編程實現(xiàn)任意大小圖像的二維傅立葉的變換與反變換。
2. 項目開發(fā)環(huán)境
項目開發(fā)環(huán)境主要分為軟件環(huán)境和硬件環(huán)境
軟件:Lab Windows/CVI和IMAQ_Vision for LabWindows/CVI。Lab Windows/CVI是美國National Instrument(簡稱NI)公司開發(fā)的基于C語言的虛擬儀器開發(fā)平臺,適用于自動測試、自動控制、測試儀器通信、測試硬件控制、信號分析及圖像處理等軟件的開發(fā)。經(jīng)過版本的不斷更新,Lab Windows/CVI已經(jīng)成為測控領域應用最為廣泛的軟件開發(fā)工具之一。而IMAQ_Vision for LabWindows/CVI是NI公司開發(fā)的基于LabWindows/CVI的高級圖像處理和分析軟件包,是進行圖像處理和分析的教學和科研的有力工具。軟件包提供了3個重要的文件:
硬件:個人PC電腦(主頻:2.6GHZ*2 內存:1G*2)
3. 系統(tǒng)分析
3.1. 系統(tǒng)的主要功能分析
傅里葉變換是研究信號頻域特性首要數(shù)學工具。在數(shù)字圖像頻域處理中,常常要對二維圖像做快速傅里葉變換,由于傅里葉變換的可分離性,二維快速傅里葉變可以分解為對行、列兩個方向的一維快速傅里葉變換,所以在LabWindows/CVI 集成開發(fā)
環(huán)境下實現(xiàn)二維圖像的快速傅里葉變換的關鍵是一維傅里葉變換的實現(xiàn)。
在本系統(tǒng)設計過程中,主要分成兩個部分完成:
第一部分是一維快速傅里葉變換,該部分所包含的變量函數(shù)基本上不依賴于特定的軟件平臺,僅僅與C語言有關,這部分是為二維快速傅里葉服務的。主要有內容及其作用如表格1所示。
表 1 一維快速傅里葉變換及反變換功能模塊列表
第二部分是二維快速傅里葉變換及其反變換,該部分主要是在一維快速傅里葉變換及其反變換的基礎上,完成對一幅二維圖像的快速傅里葉變換及其反變換,并將結果顯示出來。主要函數(shù)模塊及其功能如表格2所示。
表2 二維快速傅里葉變換及反變換功能模塊列表
3.2. 系統(tǒng)的關鍵問題及解決方法(或思路)
二維圖像的快速傅里葉變換及其反變換可以分解成行、列兩個方向上的一維快速傅里葉變換及其反變換,由因為快速傅里葉變換和反變換的原理是一致的,所以,在整個系統(tǒng)設計的過程中,最關鍵的問題就是如何用C語言程序描述模擬整個快第一文庫網(wǎng)速傅里葉變換的運算流程。
為了解決這個問題,根據(jù)快速傅里葉變換運算流圖,將整個變換過程分層描述,共分解為3個層次:“級”、“組”和“個”。一個快速傅里葉變換運算過程分為i個級,每個級包含j個組,每個組又包含k個單個蝶形運算。例如如圖1所示的N=8的快速傅里葉變換的運算流圖,該流圖共分為3個級:第一級包含4個組,每個組又1個單個蝶形運算;第二級包含2個組,每個組有2個單個蝶形運算;第三級包含1個組,每個組有4個蝶形運算。
圖1 N=8的`快速傅里葉變換蝶形運算流圖
在函數(shù)fft(int length, complex src[])實現(xiàn)時使用3重for循環(huán)來描述,最外
層for循環(huán)是對“級”的循環(huán),第二層for循環(huán)是對每一級里“組”的循環(huán),最內層for
循環(huán)是對每一組里“個“,即單個蝶形運算的循環(huán)。程序代碼如下所示:
/*快速傅里葉變換*/
void fft(int length, complex src[]) {
int i=0; int j=0; int k=0;
//1次FFT蝶形運算
int Distance=0; //1個FFT蝶形運算跨越的
//計算一級運算當前已經(jīng)走過的步長 //FFT蝶形運算級數(shù)寄存器 //FFT蝶形運算組數(shù)寄存器 //FFT蝶形運算個數(shù)寄存器 //1個蝶形運算中間結果寄存器 //1個蝶形運算中間結果寄存器
int grade=0; int group=0; int unit=0; complex up;
complex down;
complex product; //1個蝶形運算中間結果寄存器
/*先對原始數(shù)據(jù)做
/*計算1次FFT的級數(shù)總數(shù)grade*/ grade=(int)(log(length)/log(2));
for(i=0;i
/*計算第i級運算包含組數(shù)group*/ group=(int)pow(2,(double)(grade-1-i));
/*計算單個蝶形運算跨越距離*/ Distance=1
/*一級蝶形運算*/ for(j=0;j
/*計算一級運算當前已經(jīng)走過的步長*/ Step=2*Distance*j;
/*計算一組蝶形運算中包含的蝶形運算個數(shù)unit*/ unit=(int)pow(2,(double)(i));
/*一組蝶形運算*/ for(k=0;k
/*一個蝶形運算*/
mul(src[Step+k+Distance],W[length*k/2/Distance],&product); add(src[Step+k],product,&up); sub(src[Step+k],product,&down); src[Step+k]=up;
src[Step+k+Distance]=down;
} }
4. 系統(tǒng)設計
4.1. 程序流程圖及說明
整體程序流程圖如下所示:
圖2 整體程序流程圖
說明:A.當開始運行程序后,通過點擊“打開一幅圖像并顯示”按鈕,在彈出的對話框
中選擇一幅格式符合要求的圖像并確定,之后程序就會在另一個名為“源圖像”的窗口中顯示原始圖像并在主界面中顯示原始圖像寬度和高度。按鈕“打開一幅圖像并顯示”左邊的指示LED燈亮,表示已經(jīng)打開一幅圖像,并可以開始下面的操作。
B.打開一幅圖像后,點擊“傅里葉變換”按鈕,對原始圖像進行二維FFT變換,
得到變換后的數(shù)據(jù),并在一個名為“FFT圖像”的窗口中顯示經(jīng)過傅里葉變換后的復數(shù)圖像。
C.點擊“傅里葉反變換”按鈕,對第二步中二維傅里葉變換變換得到的數(shù)據(jù)進行
二維傅里葉反變換,恢復原始圖像,并在一個名為“IFFT圖像”的窗口中顯示。
D.如果此時要退出程序,那么就點擊“退出”按鈕;如果不想退出,想對另外一
幅圖像進行1~3步的操作,那么就點擊“清除”按鈕,程序會重新回到剛運行程序的狀態(tài)。
4.2. 程序主要模塊(或功能)介紹 4.2.1. 一維 FFT 和 IFFT 流程圖:
圖3 一維FFT 和 IFFT流程圖
說明:A.FFT和IFFT的運算及其總體流程圖是相同的,均是按以上流程圖來實現(xiàn)。
iWNB.首先,先計算 。
C.對輸入數(shù)據(jù)x(n)進行位倒序處理。
D.接著,根據(jù)運算流圖進行三重for循環(huán)運算,最后得出結果。
E.grade是指一次FFT或IFFT運算分級的總數(shù);group是每個級分組的總數(shù);unit是每個組包含蝶形運算的總數(shù)。
F.對于得出自然順序的結果,可以用兩種方法去實驗,一是輸入數(shù)據(jù)經(jīng)過位倒序處理后再運算,輸出數(shù)據(jù)為自然順序。二是不先對輸入數(shù)據(jù)做位倒序處理,運算后在做處理也可以得到自然順序的結果數(shù)據(jù)。
4.2.2. 二維圖像 FFT 和 IFFT: 流程圖:
圖4 二維FFT和IFFT流程圖
說明:1、二維圖像FFT和IFFT的運算流程圖是相同的,均是按上圖所示。
2、先通過打開圖像來獲得width和height,并定義二維數(shù)組
Buffer[width][height]。
3、width和height分別是原始圖像的寬度和高度;Buffer[width][height]是用
來存放原始數(shù)據(jù)、中間運算數(shù)據(jù)及最終結果的緩沖區(qū)。
4、 其實,二維數(shù)組的運算就是一維數(shù)組的變換運算,對Buffer數(shù)組的第一行進
行FFT或IFFT運算,之后對矩陣進行倒置,再對此矩陣的第一行進行FFT或IFFT運算,再進行多一次倒置,進而得出結果。
5、對于最終結果的顯示是通過在CVI下用復數(shù)圖像顯示。
5. 實驗結果與分析
5.1. 實驗結果
(應有實驗結果的圖片,有結果分析或說明)
下面表格里是3組實驗圖片,從左到右分別是原始圖像、經(jīng)過快速傅里葉變換后的到的數(shù)據(jù)轉換而來的FFT圖像(complex image)以及通過對快速傅里葉變換得到的數(shù)據(jù)進行快速傅里葉反變換恢復的圖像。
從3組實驗圖片的FFT圖片表示中,可以看出圖像中央是直流低頻成分,四角是高頻成分。
從3組圖像的源圖像與IFFT圖像的比較中可知,從快速傅里葉變換結果數(shù)據(jù)用反變換的來的圖像與原始圖像幾乎是相同的,由此證明程序是正確的。
圖5 三組實驗結果
5.2. 項目的創(chuàng)新之處
本設計其實并沒有創(chuàng)新之處。如果要說做的比較好的地方的話,那就是使用malloc
()動態(tài)分配內存空間,包括快速傅里葉變換及其反變換的緩沖區(qū),用于數(shù)組到圖像轉換的一維數(shù)組空間等。使用動態(tài)分配空間可以適應不同大小的圖片(圖像寬度和高度可以不同,但仍然需要滿足2的N次方條件),另外就是動態(tài)分配的內存空間使用完后及時回收,節(jié)省對內存空間的資源和提高利用率。 5.3. 存在問題及改進設想
對本設計中存在的問題是快速傅里葉變換及其反變換所用的時間比較長,原因可能有
以下兩點:一是描述complex數(shù)據(jù)類型的實部虛部成員使用double類型(64位)過大;二是在快速傅里葉變換及其反變換程序實現(xiàn)時,在一些運算量比較大的地方,例如for循環(huán)里,不必要的重復運算過多。
針對上面問題,本組認為可以從選擇合適的數(shù)據(jù)類型和優(yōu)化程序代碼等方面入手,
較少運算時間。
6. 心得體會
6.1. 系統(tǒng)開發(fā)的體會
在本設計中,本組成員體會比較深刻的是分層和面向過程的程序設計思想。
首先,對于一個比較復雜的程序可以簡化思路,提高代碼可讀性等等,這是對程序設計的縱向優(yōu)化。在本系統(tǒng)設計中,主要有兩個地方體現(xiàn)了這一思想。一是對于一維快速傅里葉變換及其反變換的實現(xiàn)過程,結合運算流程的特點,將一個運算流程分解成若干級,每個級中包含若干組,每個組中又分成若干個單個的蝶形運算,這樣子分層,可以使得程序設計更為清晰,系統(tǒng)化,也便于理解;二是將一維快速福利葉變換及其反變換與二維的分離開。
其次是面向過程程序設計。在系統(tǒng)設計中,把不同功能的程序封裝成各個獨立的函數(shù),使得代碼重用性,可讀性提高,也便于以后的修改。例如把一維快速傅里葉變換或反變換封裝函數(shù)供二維變換調用。 6.2. 對本門課程的改進意見或建議
對本門課程的改進意見或建議:其實,課程的主要目的都是在于提高學生的學習熱情和創(chuàng)新意識,這有利于多方面開發(fā)學生智力,提高學生的綜合素質等。 所以,對于這門課程更有利開展,如果條件允許的話,可以嘗試整合課程教學資源,例如包括課程介紹、教學大綱、授課教案、作業(yè)習題、實驗指導、參考文獻目錄、授課實況錄像等資源,然后整合完畢后都可以發(fā)送到每一個學生手上,有了這些資料,學生就可以嘗試自己開展課程的學習,更有利于提高學生的積極性與自主性。如學生可以根據(jù)課堂講授,結合在課后對課堂知識進行消化吸收,加深對課堂內容的理解,深入分析試驗數(shù)據(jù),對實驗結果進行論證。其次,課程可以更多結合當今的就業(yè)工作所需對學生進行專業(yè)性知識講解,使學生對未來就業(yè)某個方向有一定了解,也可以使學生提高自己的知識結構。因為每一個學生最關注的都是未來就業(yè)的壓力與自己的能力,所以可以適當關注一下這個方向。
附件一
華南農(nóng)業(yè)大學
圖像大作業(yè)成績評定表
注:如果小組成員僅僅分工撰寫實驗報告或制作PPT,沒有參與編程,則其成績要低于編程的同學。
【圖像傅里葉變換、反變換的實現(xiàn)】相關文章:
分數(shù)階傅里葉變換的數(shù)值實現(xiàn)10-03
傅里葉變換的意義07-09
基于變形分數(shù)傅里葉變換的六重密鑰圖像加密07-11
BZOJ 3257 ZJOI2014快速傅里葉變換 -電腦資料01-01
探測波導全息光柵傅里葉變換光譜的新方法07-05
基于正弦變換的紅外圖像均衡算法07-31
基于小波變換的圖像配準07-23
基于圖像的OMR技術的實現(xiàn)01-20