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