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