基于matlab的圖像分析_第1頁
基于matlab的圖像分析_第2頁
基于matlab的圖像分析_第3頁
基于matlab的圖像分析_第4頁
基于matlab的圖像分析_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、目 錄1 引言12 基于MATLAB的FFT算法實現(xiàn)22.1系統(tǒng)總體流程圖22.2 FFT運算規(guī)律及編程思想22.2.1圖像信號的采集22.2.2 DIT-FFT算法的基本原理32.2.3 FFT算法的運算規(guī)律及編程思想53 Matlab程序?qū)崿F(xiàn)73.1程序運行結(jié)果73.2對比結(jié)果分析84 系統(tǒng)人機對話界面94.1 GUI簡介94.2 界面設(shè)計94.3 運行調(diào)試105 Matlab軟件簡介116 心得體會12參考文獻13附錄14附錄181 引言MATLAB是矩陣實驗室(Matrix Laboratory)的簡稱,是美國MathWorks公司出品的商數(shù)學(xué)軟件,用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以

2、及數(shù)值計算的高級技術(shù)計算語言和交互式環(huán)境,主要包括MATLAB和Simulink兩大部分。MATLAB 的應(yīng)用范圍非常廣,包括信號和圖像處理、通訊、控制系統(tǒng)設(shè)計、測試和測量、財務(wù)建模和分析以及計算生物學(xué)等眾多應(yīng)用領(lǐng)域。附加的工具箱(單獨提供的專用 MATLAB 函數(shù)集)擴展了 MATLAB 環(huán)境,以解決這些應(yīng)用領(lǐng)域內(nèi)特定類型的問題。它以矩陣運算為基礎(chǔ),把計算、可視化、程序設(shè)計融合在一個簡單易用的交互式工作環(huán)境中,是一款數(shù)據(jù)分析和處理功能都非常強大的工程適用軟件。它可以將聲音文件變換為離散的數(shù)據(jù)文件,然后利用其強大的矩陣運算能力處理數(shù)據(jù),如數(shù)據(jù)濾波、傅立葉變換、時域和頻域分析、聲音回放以及各種圖

3、的呈現(xiàn)等,它的信號處理與分析工具箱位語音信號分析提供了十分豐富的功能函數(shù),利用這些功能函數(shù)可以快捷而又方便的完成語音信號的處理和分析以及信號的可視化。數(shù)字信號處理是MATLAB重要應(yīng)用的領(lǐng)域之一。對于有限長序列x(n),若要求其N點的傅里葉變換(DFT)需要經(jīng)過次復(fù)數(shù)乘法運算和N*(N-1)次復(fù)數(shù)加法運算。隨著N的增加,運算量將急劇增加,而在實際問題中,N往往是較大的,如當N=1024時,完成復(fù)數(shù)乘法和復(fù)數(shù)加法的次數(shù)分別為百萬以上,無論是用通用計算機還是用DSP芯片,都需要消耗大量的時間和機器內(nèi)存,不能滿足實時的要求。因此,DFT的這種運算只能進行理論上的計算,不適合對實時處理要求高的場合。因

4、此,研究作為DSP的快速算法的FFT是相當必要的,快速傅里葉變換(FFT)是為提高DFT運算速度而采用的一種算法,快速算法的種類很多,而且目前仍在改進和提高,它是根據(jù)離散傅里葉變換的奇、偶、虛、實等特性,對離散傅立葉變換的算法進行改進獲得的?;诒緦W(xué)期所學(xué)的DIT-FFT的運算規(guī)律和編程思想以及Matlab的學(xué)習(xí)和使用,本課設(shè)要求在Matlab環(huán)境下編寫基2 DIT-FFT算法實現(xiàn)對離散信號的快速傅里葉變換,再與Matlab軟件自帶的FFT函數(shù)實現(xiàn)對離散信號的傅里葉變換進行比較,如果得到的頻譜相同,那么我們編寫的程序就是正確的。本次課程設(shè)計是實現(xiàn)對選定圖片進行FFT計算、還原(IFFT計算),

5、并與系統(tǒng)FFT函數(shù)做對比,進行分析。如果有能力可以選做系統(tǒng)人機對話界面。用GUI界面完成人機交互方便使用的。本課程設(shè)計主要是對數(shù)字信號的分析。2 基于MATLAB的FFT算法實現(xiàn)2.1系統(tǒng)總體流程圖本設(shè)計要求找到一張明暗對比較大的圖片;在Matlab環(huán)境下編寫基FFT算法;利用自己編寫的算法對已選擇的圖片信號進行計算,并顯示出計算的結(jié)果,將計算的結(jié)果與Matlab數(shù)字信號處理工具箱中自帶的fft函數(shù)進行對比研究,驗證自編算法的正確性。系統(tǒng)的總體設(shè)計流程圖如圖2-1所示:對圖像進行灰度處理用系統(tǒng)自帶的IFFT計算并顯示用自編的FFT計算并顯示用自編的IFFT計算并顯示將顯示的結(jié)果進行對比 驗證自

6、編FFT算法和IFFT算法的正確性用系統(tǒng)自帶的FFT計算并顯示圖像信號的采集和讀入圖2-1 系統(tǒng)的總體設(shè)計流程圖2.2 FFT運算規(guī)律及編程思想2.2.1圖像信號的采集圖像信號最好采用明暗對比比較大的灰度圖像進行分析,這樣實驗結(jié)果對比比較明顯。在Matlab中用語句:filename, pathname=uigetfile(*.jpg;*.tif;*.bmp;*.gif ,File Selector);image=imread(strcat(pathname,filename);用于讀取圖片的信號,Matlab圖像分析支持多種格式的圖像信號,用上述語句時,在Matlab中分析圖像的時候可以系統(tǒng)

7、自動檢索所需分析的圖片。語句:image=rgb2gray(image);可以對圖像進行灰度處理。當我們要將圖片顯示出來的的時候只需要用語句:imshow(image);本次課程設(shè)計就是分析灰度圖像。通過用兩種不同的方法對灰度圖像的FFT計算和IFFT計算,來得到我們想要的結(jié)果。采集到圖像信號之后,就可以對圖像信號進行分析和計算了。2.2.2 DIT-FFT算法的基本原理快速傅里葉變換(FFT)是為提高DFT運算速度而采用的一種算法。對一個有限長度序列x(n)的N點的DFT為:所以,要求N點的DFT,需要N2次的復(fù)數(shù)乘法運算,N*(N-1)次復(fù)數(shù)乘法運算算。隨著N的增加,運算量將急劇增加,而在

8、實際問題中,N往往是較大的,如當N=1024時,完成復(fù)數(shù)乘法和復(fù)數(shù)加法的次數(shù)分別為百萬以上,無論是用通用計算機還是用DSP芯片,都需要消耗大量的時間,不能滿足實時的要求,,不適合于對實時處理要求高的場合。為了能實時處理DFT,要想減少DFT的運算量可以有兩個途徑:第一是降N,N的值減小了,運算量就減少了;第二是利用旋轉(zhuǎn)因子的周期性,對稱性和可約性。利用這兩個途徑實現(xiàn)DFT的快速傅里葉變換(FFT),F(xiàn)FT算法基本上可分為按時間抽取的FFT算法(DIT-FFT)和按頻率抽取的FFT算法(DIF-FFT)。旋轉(zhuǎn)因子的性質(zhì):(1)周期性(2)共軛對稱性(3)可約性本次課設(shè)要求用用基2的按時間抽取的F

9、FT算法(DIT-FFT)實現(xiàn)FFT功能,設(shè)序列x(n)的長度為N,且N滿足N=2M,M為正整數(shù)。若N不能滿足上述關(guān)系,可以將序列x(n)補零實現(xiàn)。按時間抽取基2-FFT算法的基本思路是將N點序列按時間下標的奇偶分為兩個N/2點序列,計算這兩個N/2點序列的N/2點DFT,計算量可減小約一半;每一個N/2點序列按照同樣的劃分原則,可以劃分為兩個N/4點序列,最后,將原序列劃分為多個2點序列,將計算量大大降低。按時間下標的奇偶將N點x(n)分別抽取組成兩個N/2點序列,分別記為x1(n)和x2(n),將x(n)的DFT轉(zhuǎn)化為x1(n)和x2(n)的DFT的計算。利用旋轉(zhuǎn)因子的可約性,即:用蝶形運

10、算可表示為如圖2-2所示:圖2-2 DIT-FFT蝶形運算流圖符號以此類推,還可以把x1(n)和x2(n)按n值得奇偶分為兩個序列,這樣就達到了降N得目的,從而減少了運算量。FFT對DFT的數(shù)學(xué)運算量改進:直接采用DFT進行計算,運算量為N2次復(fù)數(shù)乘法和N*(N-1)次復(fù)數(shù)乘法。當采用M次FFT時,由N=2M求得M=logN,運算流圖有M級蝶形,每一級都由N/2個蝶形運算構(gòu)成,這樣每一級蝶形運算都需要N/2次復(fù)數(shù)乘法和N次復(fù)數(shù)加法。M級運算共需要復(fù)數(shù)乘法次數(shù)為C=N/2*M,復(fù)數(shù)加法次數(shù)為C=N*M。當N值較大時,F(xiàn)FT減少運算量的特點表現(xiàn)的越明顯。2.2.3 FFT算法的運算規(guī)律及編程思想為

11、了編寫DIT-FFT算法的運算程序,首先要分析其運算規(guī)律,總結(jié)編程思想并繪出程序框圖。1. 原位計算對點的FFT共進行M級運算,每級由N/2個蝶形運算組成。在同一級中,每個蝶的輸入數(shù)據(jù)只對本蝶有用,且輸出節(jié)點與輸入節(jié)點在同一水平線上,這就意味著每算完一個蝶后,所得數(shù)據(jù)可立即存入原輸入數(shù)據(jù)所占用的數(shù)組元素(存儲單元),這種原位(址)計算的方法可節(jié)省大量內(nèi)存。2. 蝶形運算實現(xiàn)FFT運算的核心是蝶形運算,找出蝶形運算的規(guī)律是編程的基礎(chǔ)。蝶形運算是分級進行的;每級的蝶形運算可以按旋轉(zhuǎn)因子的指數(shù)大小排序進行;如果指數(shù)大小一樣則可從上往下依次蝶算。對點的FFT共有M級運算,用L表示從左到右的運算級數(shù)(L

12、=1,2,M )。第L級共有個不同指數(shù)的旋轉(zhuǎn)因子,用R表示這些不同指數(shù)旋轉(zhuǎn)因子從上到下的順序(R=0,1,B-1)。第R個旋轉(zhuǎn)因子的指數(shù),旋轉(zhuǎn)因子指數(shù)為P的第一個蝶的第一節(jié)點標號k從R開始,由于本級中旋轉(zhuǎn)因子指數(shù)相同的蝶共有個,且這些蝶的相鄰間距為,故旋轉(zhuǎn)因子指數(shù)為P的最后一個蝶的第一節(jié)點標號k為:,本級中各蝶的第二個節(jié)點與第一個節(jié)點都相距B點。應(yīng)用原位計算,蝶形運算可表示成如下形式: (J)= (J)+ (J+B)* (J+B)= (J)-(J+B)* 總結(jié)上述運算規(guī)律,可采用如下運算方法進行DIT-FFT運算。首先讀入數(shù)據(jù),根據(jù)數(shù)據(jù)長度確定運算級數(shù)M,運算總點數(shù),不足補0處理。然后對讀入數(shù)

13、據(jù)進行數(shù)據(jù)倒序操作。數(shù)據(jù)倒序后從第1級開始逐級進行,共進行M級運算。在進行第L級運算時,先算出該級不同旋轉(zhuǎn)因子的個數(shù)(也是該級中各個蝶形運算兩輸入數(shù)據(jù)的間距),再從R=0開始按序計算,直到R=B-1結(jié)束。每個R對應(yīng)的旋轉(zhuǎn)因子指數(shù),旋轉(zhuǎn)因子指數(shù)相同的蝶從上往下依次逐個運算,各個蝶的第一節(jié)點標號k都是從R開始,以為步長,到(可簡取極值N-2)結(jié)束??紤]到蝶形運算有兩個輸出,且都要用到本級的兩個輸入數(shù)據(jù),故第一個輸出計算完畢后,輸出數(shù)據(jù)不能立即存入輸入地址,要等到第二個輸出計算調(diào)用輸入數(shù)據(jù)完畢后才能覆蓋。這樣數(shù)據(jù)倒序后的運算可用三重循環(huán)程序?qū)崿F(xiàn)。整個蝶形運算流程圖如圖2-3所示:圖2-3 整個蝶形運

14、算流程圖送入x(n),MN=2M倒序L=1:MB=2(L-1)J=0:B-1P=J*2(M-L) K=J:2L:N-1T=A(K)+A(K+B)*WNPA(K+B)=A(K)-A(K+B)*WNPA(K)=T輸出開始 結(jié)束束束3 Matlab程序?qū)崿F(xiàn)3.1程序運行結(jié)果用圖片cj.jpg作為例子,運行調(diào)試程序。圖片cj.jpg如圖3-1所示:圖3-1 原圖像程序運行開始的時候可以先建立一個M_file。生成M_file方法為:File-New-M-File,或者單擊 Matlab主界面的空白文檔。如圖3-2所示:圖3-2 生成M文件將自行編寫的程序?qū)懙轿募校缓蟊4?,運行,程序執(zhí)行之后會自動查

15、詢所要處理的圖片。程序開始時要輸入的窗口如圖3-2所示:圖3-2 開始輸入程序的界面將已經(jīng)編號的程序?qū)懙綀D3-2所示的窗口中保存之后就可以運行了。用自建的FFT和IFFT運行的結(jié)果如圖3-3所示:圖3-3 程序的運行結(jié)果3.2對比結(jié)果分析如圖3-3可以看出自編的FFT算法和系統(tǒng)自帶的FFT算法運行結(jié)果有所不同,具體體現(xiàn)在三個方面。一是:自建的FFT處理后的圖片的大小發(fā)生了變化,寬度和內(nèi)置的FFT處理后的結(jié)果相同;高度變小了。二是:圖像的亮度發(fā)生了變化,自建的FFT處理后的圖片的亮度比系統(tǒng)自帶的FFT處理后的圖像的亮度高。三是:程序的運行時間不同。自建的FFT算法運行的時間比系統(tǒng)自帶的FFT算法

16、運行的時間要長。但是不論何種算法實現(xiàn)FFT,它們的進行IFFT后得出的結(jié)果相同,和原圖片一樣。4 系統(tǒng)人機對話界面4.1 GUI簡介圖形用戶界面(GUI),是一種提供人機交互的工具和方法。GUI是包含圖形對象,如窗口、圖標、菜單和文本等圖文并茂的用戶界面。4.2 界面設(shè)計用MATLAB圖形用戶界面開發(fā)環(huán)境設(shè)計GUI點的一般步驟是:1.進行界面設(shè)計。2.設(shè)計控件屬性。3.進行M語言編程。以本設(shè)計要求為例介紹。第一步,該選擇本圖形用戶界面需要的控件:七個推按鈕(Push button),其中六個用來運行所要顯示的圖片,第七個用來退出程序。六個軸對象(axes)用來顯示原圖像,兩種不同F(xiàn)FT處理后的

17、圖片以及進行IFFT后的圖像。完成人機設(shè)計界面如圖4-1所示:圖4-1 人機界面設(shè)計圖第二步,設(shè)置控件屬性:雙擊組件可以設(shè)置文本框,推按鈕的屬性,如顯示大小,名稱和默認值等。第三步,編寫回調(diào)函數(shù)。組件事件的發(fā)生是通過回調(diào)函數(shù)進行工作的。控件設(shè)置完成后保存,然后運行GUI(操作為ctrl+T),就會進入editor窗口,加入各個控件功能的函數(shù)代碼。完成后保存即可。第四步,運行GUI。運行editor窗口的程序后,會彈出已經(jīng)激活的人機對話界面。系統(tǒng)人機對話界面如圖4-2所示。圖4-2 系統(tǒng)的人機對話界面4.3 運行調(diào)試運行GUI,已經(jīng)彈出圖4-2的系統(tǒng)人機對話界面,根據(jù)提示分別點擊T1,T2,T3

18、,T4,T5,T6可以分別運行出原圖像,自編FFT處理后的圖像,自編IFFT后的圖像,和原圖像,內(nèi)置FFT處理后的圖像,內(nèi)置IFFT處理后的圖像。運行結(jié)果如圖4-3所示。如果運行結(jié)束,可以通過點擊“EXIT”推按鈕退出該人機對話界面,返回Matlab。圖4-3 運行結(jié)果顯示5 Matlab軟件簡介MATLAB產(chǎn)生的歷史背景20世紀70年代中期,Cleve Moler博士和其同事在美國國家科學(xué)基金的資助下開發(fā)了調(diào)用EISPACK和LINPACK的FORTRAN子程序庫。EISPACK是特征值求解的FORTRAN程序庫,LINPACK是解線性方程的程序庫。在當時,這兩個程序庫代表矩陣運算的最高水平

19、。在以后的數(shù)年里,MATLAB在多所大學(xué)里作為教學(xué)輔助軟件使用,并作為面向大眾的免費軟件廣為流傳。1983年春天,Cleve Moler到Stanford大學(xué)講學(xué),MATLAB深深地吸引了工程師John Little。John Little敏銳地覺察到MATLAB在工程領(lǐng)域的廣闊前景。同年,他和 Cleve Moler、Sieve Bangert一起,用C語言開發(fā)了第二代專業(yè)版。這一代的MATLAB語言同時具備了數(shù)值計算和數(shù)據(jù)圖示化的功能。 1984年,Cleve Moler和 John Lithe成立了MathWorks公司,正式把MATLAB推向市場,并繼續(xù)進行MATLAB的研究和開發(fā)。

20、在當今30多個數(shù)學(xué)類科技應(yīng)用軟件中,就軟件數(shù)學(xué)處理的原始內(nèi)核而言,可分為兩大類。一類是數(shù)值計算型軟件,如 MATLAB、Xmath、Gauss等,這類軟件長于數(shù)值計算,對處理大批數(shù)據(jù)效率高;另一類是數(shù)學(xué)分析型軟件,如Mathematica、Maple等,這類軟件以符號計算見長,能給出解析解和任意精度解,其缺點是處理大量數(shù)據(jù)時效率較低。MathWorks公司順應(yīng)多功能需求之潮流,在其卓越數(shù)值計算和圖示能力的基礎(chǔ)上,又率先在專業(yè)水平上開拓了其符號計算、文字處理、可視化建模和實時控制能力,開發(fā)了適合多學(xué)科、多部門要求的新一代科技應(yīng)用軟件MATLAB。經(jīng)過多年的國際競爭,MATLAB 已經(jīng)占據(jù)了數(shù)值型

21、軟件市場的主導(dǎo)地位。 在MATLAB進入市場前,國際上的許多應(yīng)用軟件包都是直接以FORTRAN和C語言等編程語言開發(fā)的。這種軟件的缺點是使用面窄、接口簡陋、程序結(jié)構(gòu)不開放以及沒有標準的基庫,很難適應(yīng)各學(xué)科的最新發(fā)展,因而很難推廣。MATLAB的出現(xiàn),為各國科學(xué)家開發(fā)學(xué)科軟件提供了新的基礎(chǔ)。在MATLAB問世不久的20世紀80年代中期,原先控制領(lǐng)域里的一些軟件包紛紛被淘汰或在MATLAB上重建。 時至今日,經(jīng)過Math Works公司的不斷完善,MATLAB已經(jīng)發(fā)展成為適合多學(xué)科、多種工作平臺的功能強勁的大型軟件。在國外,MATLAB已經(jīng)經(jīng)受了多年考驗。在歐美等高校,MATLAB已經(jīng)成為線性代數(shù)

22、、自動控制理論、數(shù)理統(tǒng)計、數(shù)字信號處理、時間序列分析、動態(tài)系統(tǒng)仿真等高級課程的基本教學(xué)工具;成為攻讀學(xué)位的大學(xué)生、碩士生、博士生必須掌握的基本技能。在設(shè)計研究單位和工業(yè)部門,MATLAB被廣泛用于科學(xué)研究和解決各種具體問題。6 心得體會本次實習(xí)的主要內(nèi)容是通過用Matlab實現(xiàn)FFT的設(shè)計,可以實現(xiàn)對一張圖片進行FFT運算和IFFT運算并且輸出結(jié)果。把自己編寫的FFT算法與Matlab自帶FFT算法進行比較。在之前數(shù)字信號處理的學(xué)習(xí)以及完成實驗的過程中,已經(jīng)使用過Matlab,對其有了一些基礎(chǔ)的了解和認識,通過這次的課程設(shè)計使我進一步了解了圖像信號的分析方法,以及其中產(chǎn)生信號和繪制信號的基本命

23、令和一些基礎(chǔ)編程語言。讓我感受到只有在了解課本知識的前提下,才能更好的應(yīng)用這個工具,并且熟練的應(yīng)用Matlab也可以很好的加深我對課程的理解,方便我的思維。這次課程設(shè)計使我了解了Matlab的使用方法,提高了自己的分析和動手實踐能力。同時我相信,進一步加強對MATLAB的學(xué)習(xí)與研究對我今后的學(xué)習(xí)將會起到很大的幫助。這次的課程設(shè)計是對本學(xué)期所學(xué)知識的一次重要鞏固,使得在課堂上掌握的知識得到了真正的運用。在學(xué)習(xí)的過程中和同學(xué)討論,更明白了理論知識與實踐的聯(lián)系。書到用時方恨少,有些知識學(xué)會是一回事,掌握是一回事,但應(yīng)用起來,確實不是那么簡單的,需要很多知識的融會貫通。程序運行調(diào)試初期,曾經(jīng)多次出現(xiàn)錯

24、誤、不能產(chǎn)生圖形等問題,但在我翻閱資料認真改正及老師同學(xué)的幫助下基本功能還是完成了,經(jīng)過1個星期的上機實習(xí),程序已得到一些完善,能完成基本的要求的功能。最后經(jīng)過努力,又深入學(xué)習(xí)了圖形用戶界面(GUI),完成了選做要求的人機對話界面。學(xué)習(xí)就是一個了解,疑惑,進而解惑的過程,這次實習(xí)就是提供了這樣一個發(fā)現(xiàn)自己知識漏洞,與同學(xué)老師探討進行解惑的的機會。通過這次課程設(shè)計實習(xí),我更深刻的了解了Matlab的運用,重新復(fù)習(xí)了FFT 中的重要的序列倒序和蝶形變換的程序,對課本上的知識有了更深的理解,使我對數(shù)字信號處理有了系統(tǒng)的認知。在這里特別感謝魏老師和李老師,他們給了我們很大的發(fā)揮空間,讓我們真正自己動手

25、真正掌握了知識,感謝他們細心指導(dǎo)。也非常感謝我的同學(xué),他們解開了我在實習(xí)中出現(xiàn)的諸多知識死角,謝謝大家!參考文獻1范壽康 DSP 技術(shù)與DSP芯片.北京:電子工業(yè)出版社2程佩青.數(shù)字信號處理教程.北京:清華大學(xué)出版社出版,20013高西全 丁玉美等.數(shù)字信號處理.北京:電子工業(yè)出版社,20094 李勇 徐震.MATLAB輔助現(xiàn)代工程數(shù)字信號處理.西安電子科技大學(xué)出版社5 陳杰.Matlab寶典.電子工業(yè)出版社6 蘇金明 張蓮花 劉波.MATLAB工具箱應(yīng)用,電子工業(yè)出版社附錄function image_process_FFT() filename, pathname=uigetfile(*.

26、jpg;*.tif;*.bmp;*.gif ,File Selector);image=imread(strcat(pathname,filename); %獲取一個圖像信號if ndims(image)=3 image=rgb2gray(image);endscrsz=get(0,ScreenSize);figure(position,0 0 scrsz(3)-1 scrsz(4);set(gcf,Name,快速傅里葉變換);subplot(2,3,1);imshow(image);title(原始圖像);subplot(2,3,4);imshow(image);title(原始圖像);r,

27、c=size(image); %補0至最接近的2的整數(shù)次冪array=image;t=log2(r);t1=floor(t);t2=ceil(t);if t1=t2 array(2t2,c)=0;endr1,c1=size(array);t=log2(c1);t3=floor(t);t4=ceil(t);if t3=t4 array(r1,2t4)=0;end r1,c1=size(array);n=r1/2;data_col=zeros(1,n,double); %按列方向計算時用到的for m=1:n data_col(m)=exp(-1i*2*pi*(m-1)/r1);endn=c1/2

28、;data_row=zeros(1,n,double); %按行方向計算時用到for m=1:n data_row(m)=exp(-1i*2*pi*(m-1)/r1);endarray=transform_fft2(array);Ft=fftshift(array);S1=log(1+abs(Ft);subplot(2,3,2);imshow(S1,);title(自建FFT2函數(shù)結(jié)果); array=transform_ifft2(array);array=abs(array);array=array(1:r,1:c);subplot(2,3,3);imshow(array,);title(

29、自建IFFT2結(jié)果);F=fft2(image);FC=fftshift(F);S=log(1+abs(FC);subplot(2,3,5)imshow(S,);title(內(nèi)置FFT2結(jié)果);array=ifft2(F);array=round(abs(array);subplot(2,3,6);imshow(array,);title(內(nèi)置IFFT2結(jié)果);returnfunction array=transform_fft2(array)array=double(array);r1 c1=size(array);for j=1:r1 array(j,:)=transform_fft(ar

30、ray(j,:);endfor j=1:c1 array(:,j)=transform_fft(array(:,j);endN=length(array);n=N/2;w=zeros(1,n,double); for m=1:n w(m)=exp(-1i*2*pi*(m-1)/N);endp=log2(N);array1=zeros(1,N,double);for q=1:p t1=2(q-1); t2=2(p-1); for k=0:(t2/t1-1) for j=0:(t1-1) if mod(q,2)=1 data1=array(k*t1+j+1); data2=array(k*t1+j

31、+t2+1); array1(k*t1*2+j+1)=data1+data2; array1(k*t1*2+j+t1+1)=(data1-data2)*w(k*t1+1); else data1=array1(k*t1+j+1); data2=array1(k*t1+j+t2+1); array(k*t1*2+j+1)=data1+data2; array(k*t1*2+j+t1+1)=(data1-data2)*w(k*t1+1); end end endendif mod(p,2)=1 return else array1=array; returnendfunction array=tr

32、ansform_ifft2(array) array=conj(array);r1,c1=size(array);for i=1:r1 array(i,:)=transform_fft(array(i,:);endfor i=1:c1 array(:,i)=transform_fft(array(:,i);endarray=array/(r1*c1);附錄function varargout = image_fft(varargin)gui_Singleton = 1;gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Si

33、ngleton, . gui_OpeningFcn, image_fft_OpeningFcn, . gui_OutputFcn, image_fft_OutputFcn, . gui_LayoutFcn, , . gui_Callback, );if nargin & ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);endif nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, vara

34、rgin:);endfunction image_fft_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;guidata(hObject, handles);function varargout = image_fft_OutputFcn(hObject, eventdata, handles) varargout1 = handles.output;function pushbutton1_Callback(hObject, eventdata, handles)image=imread(cj

35、.jpg);if ndims(image)=3 image=rgb2gray(image);endaxes(handles.one_axes)imshow(image);title(原始圖像);function pushbutton2_Callback(hObject, eventdata, handles)image=imread(cj.jpg);if ndims(image)=3 image=rgb2gray(image);endaxes(handles.two_axes)r,c=size(image);array=image;t=log2(r);t1=floor(t);t2=ceil(t

36、);if t1=t2 array(2t2,c)=0;endr1,c1=size(array);t=log2(c1);t3=floor(t);t4=ceil(t);if t3=t4 array(r1,2t4)=0;end r1,c1=size(array); n=r1/2;data_col=zeros(1,n,double); %按列方向計算時用到的for m=1:n data_col(m)=exp(-1i*2*pi*(m-1)/r1);endn=c1/2;data_row=zeros(1,n,double); %按行方向計算時用到for m=1:n data_row(m)=exp(-1i*2*

37、pi*(m-1)/r1);end%正變換array=transform_fft2(array);Ft=fftshift(array);S1=log(1+abs(Ft);imshow(S1,);title(自建FFT2函數(shù)結(jié)果);function array=transform_fft2(array)array=double(array);r1 c1=size(array);for j=1:r1 array(j,:)=transform_fft(array(j,:);endfor j=1:c1 array(:,j)=transform_fft(array(:,j);endfunction arr

38、ay1=transform_fft(array) %計算w矩陣N=length(array);n=N/2;w=zeros(1,n,double); for m=1:n w(m)=exp(-1i*2*pi*(m-1)/N);endp=log2(N);array1=zeros(1,N,double);for q=1:p t1=2(q-1); t2=2(p-1); for k=0:(t2/t1-1) for j=0:(t1-1) if mod(q,2)=1 data1=array(k*t1+j+1); data2=array(k*t1+j+t2+1); array1(k*t1*2+j+1)=data

39、1+data2; array1(k*t1*2+j+t1+1)=(data1-data2)*w(k*t1+1); else data1=array1(k*t1+j+1); data2=array1(k*t1+j+t2+1); array(k*t1*2+j+1)=data1+data2; array(k*t1*2+j+t1+1)=(data1-data2)*w(k*t1+1); end end endendif mod(p,2)=1 return else array1=array; returnendfunction pushbutton3_Callback(hObject, eventdata

40、, handles)image=imread(cj.jpg);if ndims(image)=3 image=rgb2gray(image);endaxes(handles.three_axes)r,c=size(image);array=image;t=log2(r);t1=floor(t);t2=ceil(t);if t1=t2 array(2t2,c)=0;endr1,c1=size(array);t=log2(c1);t3=floor(t);t4=ceil(t);if t3=t4 array(r1,2t4)=0;end r1,c1=size(array); %計算w矩陣n=r1/2;d

41、ata_col=zeros(1,n,double); %按列方向計算時用到的for m=1:n data_col(m)=exp(-1i*2*pi*(m-1)/r1);endn=c1/2;data_row=zeros(1,n,double); %按行方向計算時用到for m=1:n data_row(m)=exp(-1i*2*pi*(m-1)/r1);end%正變換array=transform_fft2(array);Ft=fftshift(array);S1=log(1+abs(Ft);% 逆變換array=transform_ifft2(array);array=abs(array);ar

42、ray=array(1:r,1:c);imshow(array,);title(自建IFFT2結(jié)果);function array=transform_fft2(array) array=double(array);r1 c1=size(array);for j=1:r1 array(j,:)=transform_fft(array(j,:);endfor j=1:c1 array(:,j)=transform_fft(array(:,j);endfunction array1=transform_fft(array) %計算w矩陣N=length(array);n=N/2;w=zeros(1,n,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論