matlab課程設計報告-數(shù)字圖像處理研究_第1頁
已閱讀1頁,還剩18頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  一.課程設計相關知識綜述......................................................................</p><p>  1.1 研究目的及意義..........................................................................3</p><p&

2、gt;  1.2 數(shù)字圖像處理研究的內(nèi)容...........................................................</p><p>  1.3 MATLAB 軟件的介紹..................................................................</p><p>  1.3.1 MATLAB

3、語言的特點.........................................................</p><p>  1.3.2 MATLAB 圖像文件格式....................................................</p><p>  1.3.3 MATLAB 圖像處理工具箱簡介...................

4、.....................</p><p>  1.3.4 MATLAB 中的圖像類型....................................................</p><p>  1.3.5 MATLAB 的主要應用........................................................</p&g

5、t;<p>  1.4 函數(shù)介紹........................................................................................</p><p>  二.課程設計內(nèi)容和要求...........................................................................

6、</p><p>  2.1 主要研究內(nèi)容................................................................................</p><p>  2.2 具體要求............................................................................

7、...........</p><p>  2.3 預期達到的目標...........................................................................</p><p>  設計過程.........................................................................

8、......................</p><p>  3.1 設計方案及步驟............................................................................</p><p>  3.2 程序清單及注釋......................................................

9、.....................</p><p>  3.3 實驗結果........................................................................................</p><p>  團隊情況.....................................................

10、...........................................</p><p>  總結.......................................................................................................</p><p>  參考文獻......................

11、.........................................................................</p><p>  課程設計相關知識綜述.</p><p>  1.1研究目的及意義</p><p>  圖像處理(image processing),用計算機對圖像進行分析,以達到所需結果的技術。又稱影像處理。圖像處理

12、一般指數(shù)字圖像處理。數(shù)字圖像是指用工業(yè)相機、攝像機、掃描儀等設備經(jīng)過拍攝得到的一個大的二維數(shù)組,該數(shù)組的元素稱為像素,其值稱為灰度值。圖像處理技術的一般包括圖像壓縮,增強和復原,匹配、描述和識別3個部分。 常見的系統(tǒng)有康耐視系統(tǒng)、圖智能系統(tǒng)等,目前是正在逐漸興起的技術。</p><p>  21世紀是一個充滿信息的時代,圖像作為人類感知世界的視覺基礎,是人類獲取信息、表達信息和傳遞信息的重要手段。數(shù)字圖像處理,即

13、用計算機對圖像進行處理,其發(fā)展歷史并不長。數(shù)字圖像處理技術源于20世紀20年代,當時通過海底電纜從英國倫敦到美國紐約傳輸了一幅照片,采用了數(shù)字壓縮技術。首先數(shù)字圖像處理技術可以幫助人們更客觀、準確地認識世界,人的視覺系統(tǒng)可以幫助人類從外界獲取3/4以上的信息,而圖像、圖形又是所有視覺信息的載體,盡管人眼的鑒別力很高,可以識別上千種顏色,但很多情況下,圖像對于人眼來說是模糊的甚至是不可見的,通過圖象增強技術,可以使模糊甚至不可見的圖像變得

14、清晰明亮。</p><p>  1.2 數(shù)字圖像處理研究的內(nèi)容</p><p>  數(shù)字圖像處理(Digital Image Processing)是通過計算機對圖像進行去除噪聲、增強、復原、分割、提取特征等處理的方法和技術。數(shù)字圖像處理的產(chǎn)生和迅速發(fā)展主要受三個因素的影響:一是計算機的發(fā)展;二是數(shù)學的發(fā)展(特別是離散數(shù)學理論的創(chuàng)立和完善);三是廣泛的農(nóng)牧業(yè)、林業(yè)、環(huán)境、軍事、工業(yè)和醫(yī)學等

15、方面的應用需求的增長。</p><p><b>  一.主要目的</b></p><p>  (1)提高圖像的視感質(zhì)量,如進行圖像的亮度、彩色變換,增強、抑制某些成分,對圖像進行幾何變換等,以改善圖像的質(zhì)量。</p><p>  (2)提取圖像中所包含的某些特征或特殊信息,這些被提取的特征或信息往往為計算機分析圖像提供便利。提取特征或信息的過程

16、是模式識別或計算機視覺的預處理。提取的特征可以包括很多方面,如頻域特征、灰度或顏色特征、邊界特征、區(qū)域特征、紋理特征、形狀特征、拓撲特征和關系結構等。</p><p>  (3)圖像數(shù)據(jù)的變換、編碼和壓縮,以便于圖像的存儲和傳輸。</p><p>  不管是何種目的的圖像處理,都需要由計算機和圖像專用設備組成的圖像處理系統(tǒng)對圖像數(shù)據(jù)進行輸入、加工和輸出。</p><p&

17、gt;<b>  二.常用方法</b></p><p>  1)圖像變換:由于圖像陣列很大,直接在空間域中進行處理,涉及計算量很大。因此,往往采用各種圖像變換的方法,如傅立葉變換、沃爾什變換、離散余弦變換等間接處理技術,將空間域的處理轉換為變換域處理,不僅可減少計算量,而且可獲得更有效的處理(如傅立葉變換可在頻域中進行數(shù)字濾波處理)。新興研究的小波變換在時域和頻域中都具有良好的局部化特性,它

18、在圖像處理中也有著廣泛而有效的應用。</p><p>  2 )圖像編碼壓縮:圖像編碼壓縮技術可減少描述圖像的數(shù)據(jù)量(即比特數(shù)),以便節(jié)省圖像傳輸、處理時間和減少所占用的存儲器容量。壓縮可以在不失真的前提下獲得,也可以在允許的失真條件下進行。編碼是壓縮技術中最重要的方法,它在圖像處理技術中是發(fā)展最早且比較成熟的技術。</p><p>  3 )圖像增強和復原:圖像增強和復原的目的是為了提高

19、圖像的質(zhì)量,如去除噪聲,提高圖像的清晰度等。圖像增強不考慮圖像降質(zhì)的原因,突出圖像中所感興趣的部分。如強化圖像高頻分量,可使圖像中物體輪廓清晰,細節(jié)明顯;如強化低頻分量可減少圖像中噪聲影響。圖像復原要求對圖像降質(zhì)的原因有一定的了解,一般講應根據(jù)降質(zhì)過程建立"降質(zhì)模型",再采用某種濾波方法,恢復或重建原來的圖像。</p><p>  4 )圖像分割:圖像分割是數(shù)字圖像處理中的關鍵技術之一。圖像分

20、割是將圖像中有意義的特征部分提取出來,其有意義的特征有圖像中的邊緣、區(qū)域等,這是進一步進行圖像識別、分析和理解的基礎。雖然已研究出不少邊緣提取、區(qū)域分割的方法,但還沒有一種普遍適用于各種圖像的有效方法。因此,對圖像分割的研究還在不斷深入之中,是圖像處理中研究的熱點之一。</p><p>  5 )圖像描述:圖像描述是圖像識別和理解的必要前提。作為最簡單的二值圖像可采用其幾何特性描述物體的特性,一般圖像的描述方法采

21、用二維形狀描述,它有邊界描述和區(qū)域描述兩類方法。對于特殊的紋理圖像可采用二維紋理特征描述。隨著圖像處理研究的深入發(fā)展,已經(jīng)開始進行三維物體描述的研究,提出了體積描述、表面描述、廣義圓柱體描述等方法。</p><p>  6 )圖像分類(識別):圖像分類(識別)屬于模式識別的范疇,其主要內(nèi)容是圖像經(jīng)過某些預處理(增強、復原、壓縮)后,進行圖像分割和特征提取,從而進行判決分類。圖像分類常采用經(jīng)典的模式識別方法,有統(tǒng)計

22、模式分類和句法(結構)模式分類,近年來新發(fā)展起來的模糊模式識別和人工神經(jīng)網(wǎng)絡模式分類在圖像識別中也越來越受到重視。</p><p>  1.3 MATLAB 軟件的介紹</p><p>  MATLAB(矩陣實驗室)是MATrix LABoratory的縮寫,是一款由美國The MathWorks公司出品的商業(yè)數(shù)學軟件。MATLAB是一種用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計算的高級

23、技術計算語言和交互式環(huán)境。除了矩陣運算、繪制函數(shù)/數(shù)據(jù)圖像等常用功能外,MATLAB還可以用來創(chuàng)建用戶界面及與調(diào)用其它語言(包括C,C++和FORTRAN)編寫的程序。</p><p>  盡管MATLAB主要用于數(shù)值運算,但利用為數(shù)眾多的附加工具箱(Toolbox)它也適合不同領域的應用,例如控制系統(tǒng)設計與分析、圖像處理、信號處理與通訊、金融建模和分析等。另外還有一個配套軟件包Simulink,提供了一個可視化

24、開發(fā)環(huán)境,常用于系統(tǒng)模擬、動態(tài)/嵌入式系統(tǒng)開發(fā)等方面。</p><p>  MATLAB和Mathematica、Maple并稱為三大數(shù)學軟件。它在數(shù)學類科技應用軟件中在數(shù)值計算方面首屈一指。MATLAB可以進行矩陣運算、繪制函數(shù)和數(shù)據(jù)、實現(xiàn)算法、創(chuàng)建用戶界面、連接其他編程語言的程序等,主要應用于工程計算、控制設計、信號處理與通訊、圖像處理、信號檢測、金融建模設計與分析等領域。</p><p&

25、gt;  MATLAB的基本數(shù)據(jù)單位是矩陣,它的指令表達式與數(shù)學、工程中常用的形式十分相似,故用MATLAB來解算問題要比用C,F(xiàn)ORTRAN等語言完成相同的事情簡捷得多,并且MATLAB也吸收了像Maple等軟件的優(yōu)點,MATLAB成為一個強大的數(shù)學軟件。在新的版本中也加入了對C,F(xiàn)ORTRAN,C++,JAVA的支持。可以直接調(diào)用,用戶也可以將自己編寫的實用程序導入到MATLAB函數(shù)庫中方便自己以后調(diào)用,此外許多的MATLAB愛好者

26、都編寫了一些經(jīng)典的程序,用戶可以直接進行下載就可以用。</p><p>  1.3.1 MATLAB 語言的特點</p><p>  1.高效的矩陣運算機制</p><p>  MATLAB軟件是基于矩陣計算開發(fā)的,在其他編程語言中需要使用多個for語句才能完成的操作,在MATLAB中直接使用矩陣即可完成計算,因而MATLAB在數(shù)據(jù)計算分析,特別是對海量數(shù)據(jù)的處理方

27、面表現(xiàn)出相比其他的編程語言更大的優(yōu)勢。</p><p>  2.多樣化的操作途徑</p><p>  MATLAB語言為用戶提供了多種操作方式選擇。用戶可以編寫代碼實現(xiàn)各種功能,代碼可重復利用,同時,不擅長編程的用戶也可以通過MATLAB圖形界面操作,完成MATLAB的相應功能。</p><p>  3.功能強大的工具箱</p><p>  

28、對于算法的開發(fā),MATLAB提供了大量現(xiàn)成的函數(shù),用戶可以直接調(diào)用。MATLAB軟件對目前主流的算法都提供了現(xiàn)成的函數(shù),并封裝成一個個適用于不同領域的算法工具箱。常用的工具箱包括數(shù)學類、經(jīng)濟類、信號處理類工具箱,同時隨著MATLAB軟件版本的更新,不斷有功能更強大的工具箱添加到MATLAB中。MATLAB語言的這一特點,將大大節(jié)省算法開發(fā)的時間,用戶無須詳細了解算法的細節(jié),只要掌握MATLAB中算法相應函數(shù)的調(diào)用即可。</p>

29、;<p><b>  4.良好的擴展能力</b></p><p>  利用MATLAB語言編寫的程序具有良好的擴展能力,可以方便地與各種編程語言鏈接。用戶可以方便地在MATLAB中調(diào)用其他語言已編寫好的程序,同時在其他語言中也可以方便地調(diào)用MATLAB的程序。MATLAB語言具有良好的接口編程技術。</p><p><b>  5.完善的幫助系

30、統(tǒng)</b></p><p>  完善的幫助系統(tǒng)是MATLAB的又一突出特點,MATLAB向用戶提供了多種幫助途徑,在1.4節(jié)中將詳細介紹MATLAB強大的幫助系統(tǒng)。通過MATLAB的幫助系統(tǒng),用戶可以獲取MATLAB常用函數(shù)的使用方法及應用實例,而且這種幫助可以是實時的、在線的。同時,為了便于用戶更好地使用MATLAB軟件,在MATLAB中的主要算法都是可以直接看到源代碼的。</p>&

31、lt;p>  1.3.2 MATLAB 圖像文件格式</p><p>  (1) JPEG(Joint Photogyaphic Expeyts Group):一種稱為聯(lián)合圖像專家組的圖像壓縮格式。</p><p>  (2) BMP(Windows Bitmap):有1位、4位、8位、24位非壓縮圖像,<WBR>8位RLE(Run length Encoded)的圖像。

32、文件內(nèi)容包括文件頭(一個BITMAP FILEHEADER數(shù)據(jù)結構)、位圖信息數(shù)據(jù)塊(<WBR>位圖信息頭BITMAP INFOHEADER和一個顏色表)和圖像數(shù)據(jù)。</p><p>  (3) PCX(Windows Paintbrush):可處理1位、4位、8位、16位、<WBR>24位等圖像數(shù)據(jù)。文件內(nèi)容包括文件頭、<WBR>圖像數(shù)據(jù)和擴展色圖數(shù)據(jù)。</p>

33、<p>  (4) TIFF(Tagged Iamge File Format):處理1位、4位、8位、24位非壓縮圖像,<WBR>1位、4位、8位、24位packbit壓縮圖像,<WBR>1位CCITT壓縮圖像等。文件內(nèi)容包括文件頭、<WBR>參數(shù)指針表與參數(shù)域、參數(shù)數(shù)據(jù)表和圖像數(shù)據(jù)四部分。</p><p>  (5) PNG(Portable Network G

34、raphics):包括1位、2位、4位、<WBR>8位和16位灰度圖像,8位和16位索引圖像,<WBR>24位和48位真彩色圖像。</p><p>  (6) GIF(Graphics Interchange Format):任何1位到8位的可交換的圖像。</p><p>  (7) HDF(Hierarchial Data Format):有8位、24位光柵圖像數(shù)

35、據(jù)集。</p><p>  (8) ICO(Windows Icon resource):有1位、4位、8位非壓縮圖像。</p><p>  (9) CUR(Windows Cursor resource):有1位、4位、8位非壓縮圖像。</p><p>  (10) XWD(X Windows Dump):包括1位、8位Zpixmaps,<WBR>XY

36、Bitmaps,XYPixmmmaps。</p><p>  (11) RAS(Sun Raster image):有1位bitmap、8位索引、<WBR>24位真彩色和帶有透明度的32位真彩色。</p><p>  (12) PBM(Portable Bitmap)。</p><p>  (13) PGM(Portable Graymap)。</

37、p><p>  (14) PPM(Portable Pixmap)。</p><p>  1.3.3 MATLAB 圖像處理工具箱簡介</p><p>  圖像處理工具箱提供了一套全方位的參照標準算法和圖形工具,用于進行圖形處理、分析、可視化和算法開發(fā)??蛇M行圖像增強、圖像去模糊、特征檢測、降噪、圖像分割、空間轉換和圖像配準。該工具箱的許多功能支持多線程,可發(fā)揮多核多處

38、理器計算機的性能。</p><p>  圖像處理工具箱支持多種多樣的圖像類型,包括高動態(tài)范圍,千兆像素分辨率、ICC兼容色彩和斷層掃描圖像。圖形工具可用于探索圖像、檢查像素區(qū)域、調(diào)節(jié)對比度、創(chuàng)建輪廓或柱狀圖以及操作感興趣區(qū)域(ROI)。工具箱算法可用于還原退化的圖像、檢查和測量特征、分析形狀和紋理并調(diào)節(jié)圖像的色彩平衡。</p><p>  1.3.4 MATLAB 中的圖像類型</p

39、><p><b>  1、索引圖像</b></p><p>  索引圖像包括一個數(shù)據(jù)矩陣X,一個顏色映像矩陣Map。其中Map是一個包含三列、若干行的數(shù)據(jù)陣列,其中每個元素的值均為[0, 1]之間的雙精度浮點型數(shù)據(jù)。Map矩陣的每一行分別表示紅色、綠色和藍色的顏色值。在MATLAB中,索引圖像是從像素值到顏色映射表值的“直接映射”。像素顏色由數(shù)據(jù)矩陣X作為索引指向矩陣Ma

40、p進行索引,例如,值1指向矩陣Map中的第一行,值2指向第二行,以此類推。</p><p>  顏色映射表通常和索引圖像存在一起,當用戶在調(diào)用函數(shù)imread時,MATLAB自動將顏色映射表與圖像同時加載,在MATLAB中可以選擇所需要的顏色映射表,而不必局限于使用默認的顏色映射表。我們可以使用屬性CDataMapping來選取其他的顏色映射表,包括用戶自定義的顏色映射表。</p><p>

41、;  如果圖像數(shù)據(jù)矩陣是雙精度的數(shù)據(jù)類型,則值1指向矩陣Map中的第一行,值2指向第二行,但如果圖像矩陣是8位無符號的整數(shù)類型或16位無符號的整數(shù)類型,則由于存在一個偏移量,因而使值0指向矩陣Map中的第一行,以此類推。</p><p><b>  2、灰度圖像</b></p><p>  在MATLAB中,一幅灰度圖像是一個數(shù)據(jù)矩陣I,I中的數(shù)據(jù)均代表了在一定范圍內(nèi)

42、的圖像灰度值。MATLAB把灰度圖像存儲為一個數(shù)據(jù)矩陣,該矩陣中的元素分別代表了圖像中的像素。矩陣中的元素可以是雙精度的浮點類型、8位或16位無符號的整數(shù)類型。大多數(shù)情況下,灰度圖像很少和顏色映射表一起保存,但是在顯示灰度圖像時,MATLAB仍然在后臺使用系統(tǒng)預定義的默認灰度顏色映射表。</p><p><b>  3、RGB圖像</b></p><p>  RGB圖

43、像即真菜圖像,在MATLAB中存儲為n*m*3的數(shù)據(jù)矩陣。數(shù)組中的元素定義了圖像中的每一個像素的紅、綠、藍顏色值。需指出的是,RGB圖像不是用windows的顏色映射表,像素的顏色由保存在像素位置上的紅、綠、藍的灰度值的組合來確定。圖形文件格式把RGB圖像存儲為24位的圖像,紅、綠、藍分別占8位,這樣可以有1000多萬種顏色。</p><p><b>  4、二值圖像</b></p&g

44、t;<p>  與灰度圖像相同,二值圖像只需要一個數(shù)據(jù)矩陣,每個像素只取兩個灰度值。</p><p>  1.3.5 MATLAB 的主要應用</p><p>  MATLAB 的應用范圍非常廣,包括信號和圖像處理、通訊、控制系統(tǒng)設計、測試和測量、財務建模和分析以及計算生物學等眾多應用領域。附加的工具箱(單獨提供的專用MATLAB函數(shù)集)擴展了MATLAB 環(huán)境,以解決這些應

45、用領域內(nèi)特定類型的問題。</p><p>  MATLAB 產(chǎn)品族可以用來進行以下各種工作:</p><p> ?、贁?shù)值分析 ②數(shù)值和符號計算 ③工程與科學繪圖 ④控制系統(tǒng)的設計與仿真</p><p> ?、輸?shù)字圖像處理技術 ⑥數(shù)字信號處理技術 ⑦通訊系統(tǒng)設計與仿真</p><p> ?、嘭攧张c金融工程 ⑨管理與調(diào)度

46、優(yōu)化計算(運籌學)</p><p><b>  1.4 函數(shù)介紹</b></p><p>  Imshow 顯示圖像</p><p>  Im2bw 轉換圖像為二進制圖像</p><p>  Imread 從圖像文件中讀?。ㄝd入)圖像</p><p>  Edge 圖像邊緣檢測</p&

47、gt;<p>  Graythresh 使用最大類間方差法找到圖片的一個合適的閾值。</p><p>  Rgb2gray 轉換RGB圖像或顏色映像表為灰色圖像</p><p>  Double 轉換數(shù)據(jù)為雙精度型</p><p>  Asind 反正弦函數(shù)</p><p>  Regionprops 用來度量圖像區(qū)域

48、屬性的函數(shù),常用來統(tǒng)計被標記的區(qū)域的面積積分,顯示區(qū)域總數(shù)。</p><p><b>  課程設計內(nèi)容和要求</b></p><p>  2.1 主要研究內(nèi)容</p><p>  從所拍攝的圖像中檢測多邊形目標區(qū)域的幾何中心、周長、面積和主軸方向。</p><p><b>  三.設計過程.</b>

49、</p><p>  3.1 設計方案及步驟</p><p> ?。?)U盤圖像,先進行灰度化、中值濾波等基本操作,平滑背景噪聲。</p><p> ?。?)二值化,并進行形態(tài)學開閉運行,去除背景的雜點噪聲。</p><p>  (3)定位左上角、右上角、左下角,進而利用直線擬合知識,得到直線方程。</p><p> 

50、?。?)根據(jù)U盤矩形特點,繪制平行線,通過計算交點定位出右下角。</p><p> ?。?)得到四周邊界后,可以生成二值化蒙版圖像,進而計算周長、質(zhì)心、面積等基本參數(shù)。</p><p>  3.2 程序清單及注釋.</p><p>  function varargout = MainForm(varargin)</p><p>  % MA

51、INFORM MATLAB code for MainForm.fig</p><p>  % MAINFORM, by itself, creates a new MAINFORM or raises the existing</p><p>  % singleton*.</p><p><b>  %</b></

52、p><p>  % H = MAINFORM returns the handle to a new MAINFORM or the handle to</p><p>  % the existing singleton*.</p><p><b>  %</b></p><p>  % MA

53、INFORM('CALLBACK',hObject,eventData,handles,...) calls the local</p><p>  % function named CALLBACK in MAINFORM.M with the given input arguments.</p><p><b>  %</b></p

54、><p>  % MAINFORM('Property','Value',...) creates a new MAINFORM or raises the</p><p>  % existing singleton*. Starting from the left, property value pairs are</p>

55、<p>  % applied to the GUI before MainForm_OpeningFcn gets called. An</p><p>  % unrecognized property name or invalid value makes property application</p><p>  % stop. Al

56、l inputs are passed to MainForm_OpeningFcn via varargin.</p><p><b>  %</b></p><p>  % *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one</p>&l

57、t;p>  % instance to run (singleton)".</p><p><b>  %</b></p><p>  % See also: GUIDE, GUIDATA, GUIHANDLES</p><p>  % Edit the above text to modify the respons

58、e to help MainForm</p><p>  % Last Modified by GUIDE v2.5 08-Jul-2016 10:09:38</p><p>  % Begin initialization code - DO NOT EDIT</p><p>  gui_Singleton = 1;</p><p>  g

59、ui_State = struct('gui_Name', mfilename, ...</p><p>  'gui_Singleton', gui_Singleton, ...</p><p>  'gui_OpeningFcn', @MainForm_OpeningFcn, ...</p><p>

60、  'gui_OutputFcn', @MainForm_OutputFcn, ...</p><p>  'gui_LayoutFcn', [] , ...</p><p>  'gui_Callback', []);</p><p>  if nargin && ischar(varargi

61、n{1})</p><p>  gui_State.gui_Callback = str2func(varargin{1});</p><p><b>  end</b></p><p>  if nargout</p><p>  [varargout{1:nargout}] = gui_mainfcn(gui_Sta

62、te, varargin{:});</p><p><b>  else</b></p><p>  gui_mainfcn(gui_State, varargin{:});</p><p><b>  end</b></p><p>  % End initialization code - DO

63、 NOT EDIT</p><p>  % --- Executes just before MainForm is made visible.</p><p>  function MainForm_OpeningFcn(hObject, eventdata, handles, varargin)</p><p>  % This function has no

64、output args, see OutputFcn.</p><p>  % hObject handle to figure</p><p>  % eventdata reserved - to be defined in a future version of MATLAB</p><p>  % handles structure with

65、handles and user data (see GUIDATA)</p><p>  % varargin command line arguments to MainForm (see VARARGIN)</p><p>  % Choose default command line output for MainForm</p><p>  handl

66、es.output = hObject;</p><p>  InitAxes(handles);</p><p>  handles.Img = 0;</p><p>  handles.I = 0;</p><p>  handles.I2 = 0;</p><p>  handles.bw = 0;</p&

67、gt;<p>  handles.bw2 = 0;</p><p>  handles.wd = 5;</p><p>  handles.mask = 0;</p><p>  % Update handles structure</p><p>  guidata(hObject, handles);</p>

68、<p>  % UIWAIT makes MainForm wait for user response (see UIRESUME)</p><p>  % uiwait(handles.figure1);</p><p>  % --- Outputs from this function are returned to the command line.</p>

69、<p>  function varargout = MainForm_OutputFcn(hObject, eventdata, handles) </p><p>  % varargout cell array for returning output args (see VARARGOUT);</p><p>  % hObject handle to fig

70、ure</p><p>  % eventdata reserved - to be defined in a future version of MATLAB</p><p>  % handles structure with handles and user data (see GUIDATA)</p><p>  % Get default comm

71、and line output from handles structure</p><p>  varargout{1} = handles.output;</p><p>  ------------------載入圖像-------------------------------</p><p>  % --- Executes on button press

72、 in pushbutton1.</p><p>  function pushbutton1_Callback(hObject, eventdata, handles)</p><p>  % hObject handle to pushbutton1 (see GCBO)</p><p>  % eventdata reserved - to be de

73、fined in a future version of MATLAB</p><p>  % handles structure with handles and user data (see GUIDATA)</p><p>  filename = fullfile(pwd, '5.JPG');%圖像的路徑 </p><p>  Img

74、= imread(filename);%讀入圖像</p><p>  axes(handles.axes1); imshow(Img, []);</p><p>  title('原圖像');</p><p>  handles.Img = Img;</p><p>  guidata(hObject, handles);&l

75、t;/p><p>  ---------------------------圖像灰度化-----------------------------------------------</p><p>  % --- Executes on button press in pushbutton2.</p><p>  function pushbutton2_Callbac

76、k(hObject, eventdata, handles)</p><p>  % hObject handle to pushbutton2 (see GCBO)</p><p>  % eventdata reserved - to be defined in a future version of MATLAB</p><p>  % handles

77、 structure with handles and user data (see GUIDATA)</p><p>  if isequal(handles.Img, 0)</p><p><b>  return;</b></p><p><b>  end</b></p><p>&l

78、t;b>  % 灰度化</b></p><p>  Img = handles.Img;</p><p>  if ndims(Img) == 3</p><p>  I = rgb2gray(Img);</p><p><b>  else</b></p><p><b&

79、gt;  I = Img;</b></p><p><b>  end</b></p><p>  axes(handles.axes2); imshow(I, []);</p><p>  title('灰度圖像');</p><p>  handles.I = I;</p>

80、<p>  guidata(hObject, handles);</p><p>  -----------------濾波去噪----------------------- </p><p>  % --- Executes on button press in pushbutton3.</p><p>  function pushbutton3_Ca

81、llback(hObject, eventdata, handles)</p><p>  % hObject handle to pushbutton3 (see GCBO)</p><p>  % eventdata reserved - to be defined in a future version of MATLAB</p><p>  % ha

82、ndles structure with handles and user data (see GUIDATA)</p><p>  if isequal(handles.I, 0)</p><p><b>  return;</b></p><p><b>  end</b></p><p>

83、;<b>  % 中值濾波</b></p><p>  I2 = medfilt2(handles.I);</p><p>  I2 = mat2gray(I2);</p><p>  axes(handles.axes3); imshow(I2, []);</p><p>  title('濾波圖像')

84、;</p><p>  handles.I2 = I2;</p><p>  guidata(hObject, handles);</p><p>  ------------------ 二值化---------------------</p><p>  % --- Executes on button press in pushbutt

85、on4.</p><p>  function pushbutton4_Callback(hObject, eventdata, handles)</p><p>  % hObject handle to pushbutton4 (see GCBO)</p><p>  % eventdata reserved - to be defined in a f

86、uture version of MATLAB</p><p>  % handles structure with handles and user data (see GUIDATA)</p><p>  if isequal(handles.I2, 0)</p><p><b>  return;</b></p>&l

87、t;p><b>  end</b></p><p>  I2 = handles.I2;</p><p>  bw = im2bw(I2, graythresh(I2));%圖像的二值化 </p><p>  bw = ~bw;%取反</p><p>  axes(handles.axes4); imshow(bw

88、, []);</p><p>  title('二值化圖像');</p><p>  handles.bw = bw;</p><p>  guidata(hObject, handles);</p><p>  ---------------形態(tài)學濾波------------------------- </p>

89、<p>  % --- Executes on button press in pushbutton5.</p><p>  function pushbutton5_Callback(hObject, eventdata, handles)</p><p>  % hObject handle to pushbutton5 (see GCBO)</p>&

90、lt;p>  % eventdata reserved - to be defined in a future version of MATLAB</p><p>  % handles structure with handles and user data (see GUIDATA)</p><p>  if isequal(handles.bw, 0)</p>

91、;<p><b>  return;</b></p><p><b>  end</b></p><p><b>  % 形態(tài)學濾波</b></p><p>  bw = handles.bw;</p><p>  bw = imfill(bw, 'hol

92、es');</p><p>  bw = imopen(bw, strel('square', handles.wd));</p><p>  axes(handles.axes4); imshow(bw, []);</p><p>  title('形態(tài)學濾波圖像');</p><p>  handl

93、es.bw2 = bw;</p><p>  guidata(hObject, handles);</p><p>  ---------------邊界擬合--------------------------</p><p>  % --- Executes on button press in pushbutton6.</p><p> 

94、 function pushbutton6_Callback(hObject, eventdata, handles)</p><p>  % hObject handle to pushbutton6 (see GCBO)</p><p>  % eventdata reserved - to be defined in a future version of MATLAB<

95、;/p><p>  % handles structure with handles and user data (see GUIDATA)</p><p>  if isequal(handles.bw2, 0)</p><p><b>  return;</b></p><p><b>  end<

96、/b></p><p>  bw = handles.bw2;</p><p>  wd = handles.wd;</p><p><b>  % 定位大致區(qū)域</b></p><p>  [r, c] = find(bw);</p><p><b>  % 定位有效角點<

97、/b></p><p>  [~, ind_min_r] = min(r);</p><p>  [~, ind_min_c] = min(c);</p><p>  [~, ind_max_c] = max(c);</p><p><b>  % 角點信息</b></p><p>  pt

98、_up = [c(ind_min_r)+wd r(ind_min_r)-wd];</p><p>  pt_left = [c(ind_min_c)-wd r(ind_min_c)+wd];</p><p>  pt_right = [c(ind_max_c)+wd r(ind_max_c)];</p><p><b>  % 擬合上邊界</b>

99、;</p><p>  k1 = (pt_right(2)-pt_up(2))/(pt_right(1)-pt_up(1));</p><p>  x1 = linspace(min([pt_up(1) pt_right(1)]), max([pt_up(1) pt_right(1)]), 500);</p><p>  y1 = k1*(x1-pt_up(1))

100、+ pt_up(2);</p><p><b>  % 擬合左邊界</b></p><p>  k2 = (pt_left(2)-pt_up(2))/(pt_left(1)-pt_up(1));</p><p>  x2 = linspace(min([pt_up(1) pt_left(1)]), max([pt_up(1) pt_left(1

101、)]), 500);</p><p>  y2 = k2*(x2-pt_up(1)) + pt_up(2);</p><p><b>  % 計算右下角點</b></p><p>  b1 = pt_left(2) - k1*pt_left(1);</p><p>  b2 = pt_right(2) - k2*pt

102、_right(1);</p><p>  [xt, yt] = linecross(k1, b1, k2, b2);</p><p>  xt = xt + 2*wd;</p><p>  yt = yt - wd;</p><p><b>  % 擬合下邊界</b></p><p>  k3 =

103、 (yt-pt_left(2))/(xt-pt_left(1));</p><p>  x3 = linspace(min([xt pt_left(1)]), max([xt pt_left(1)]), 500);</p><p>  y3 = k3*(x3-pt_left(1)) + pt_left(2);</p><p><b>  % 擬合右邊界&l

104、t;/b></p><p>  k4 = (yt-pt_right(2))/(xt-pt_right(1));</p><p>  x4 = linspace(min([xt pt_right(1)]), max([xt pt_right(1)]), 500);</p><p>  y4 = k4*(x4-pt_right(1)) + pt_right(2);

105、</p><p><b>  % 顯示</b></p><p>  axes(handles.axes3); imshow(handles.I2, []);</p><p>  title('邊界擬合');</p><p><b>  hold on;</b></p>

106、<p>  plot(pt_up(1), pt_up(2), 'r+');</p><p>  plot(pt_left(1), pt_left(2), 'g+');</p><p>  plot(pt_right(1), pt_right(2), 'b+');</p><p>  plot(x1, y1,

107、'y:');</p><p>  plot(x2, y2, 'm:');</p><p>  plot(x3, y3, 'y-.');</p><p>  plot(x4, y4, 'm-.');</p><p>  plot(xt, yt, 'c+');<

108、/p><p><b>  hold off;</b></p><p><b>  % 制作蒙版</b></p><p>  mask = zeros(size(bw));</p><p>  for i = 1 : length(x1)</p><p>  mask(round(

109、y1(i)), round(x1(i))) = 1;</p><p><b>  end</b></p><p>  for i = 1 : length(x2)</p><p>  mask(round(y2(i)), round(x2(i))) = 1;</p><p><b>  end</b>

110、;</p><p>  for i = 1 : length(x3)</p><p>  mask(round(y3(i)), round(x3(i))) = 1;</p><p><b>  end</b></p><p>  for i = 1 : length(x4)</p><p>  m

111、ask(round(y4(i)), round(x4(i))) = 1;</p><p><b>  end</b></p><p><b>  % 形態(tài)學填充</b></p><p>  mask = imfill(mask, 'holes');</p><p>  mask =

112、logical(mask);</p><p><b>  % 邊緣點</b></p><p>  ms = bwperim(mask);</p><p>  [r, c] = find(ms);</p><p>  axes(handles.axes4); imshow(handles.Img, []);</p&g

113、t;<p><b>  hold on;</b></p><p><b>  % 標記區(qū)域邊緣</b></p><p>  for i = 1 : length(r)</p><p>  plot(c(i), r(i), 'r.');</p><p><b>

114、  end</b></p><p><b>  hold off;</b></p><p>  title('目標區(qū)域');</p><p>  handles.mask = mask;</p><p>  guidata(hObject, handles);</p><p

115、>  -----------------參數(shù)測量--------------------------</p><p>  % --- Executes on button press in pushbutton7.</p><p>  function pushbutton7_Callback(hObject, eventdata, handles)</p><p

116、>  % hObject handle to pushbutton7 (see GCBO)</p><p>  % eventdata reserved - to be defined in a future version of MATLAB</p><p>  % handles structure with handles and user data (see G

117、UIDATA)</p><p>  if isequal(handles.mask, 0)</p><p><b>  return;</b></p><p><b>  end</b></p><p>  bw = handles.mask;</p><p><b&g

溫馨提示

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

評論

0/150

提交評論