基于支持向量機的圖像分割程序?qū)崿F(xiàn)_第1頁
基于支持向量機的圖像分割程序?qū)崿F(xiàn)_第2頁
基于支持向量機的圖像分割程序?qū)崿F(xiàn)_第3頁
基于支持向量機的圖像分割程序?qū)崿F(xiàn)_第4頁
基于支持向量機的圖像分割程序?qū)崿F(xiàn)_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、學院(部)數(shù)學科學院題 目基于支持向量機的圖像分割程序?qū)崿F(xiàn)基于支持向量機的圖像分割程序?qū)崿F(xiàn)目錄摘要3Abstract4第一章 背景資料51.1研究的動機和目的51.2研究的背景和現(xiàn)狀51.2.1支持向量機51.2.2支持向量機的應用61.3研究內(nèi)容61) MATLAB編程實現(xiàn)基于SVM的真彩色圖像切割62) MATLAB GUI制作交互界面6第二章 系統(tǒng)理論72.1支持向量機72.1.1定義72.1.2線性支持向量機72.1.3非線性分類92.1.4計算支持向量機分類器92.1.5經(jīng)驗風險最小化122.1.6分類模型的VC維與可學習性132.2 libsvm工具箱142.3 圖像分割的定義14

2、2.3 MATLAB用戶圖形界面(GUI)152.3.1人機交互界面152.3.2 MATLAB GUI152.3.3 MATLAB GUIDE152.3.4 函數(shù)句柄152.3.4 回調(diào)函數(shù)16第三章 需求分析173.1需求分析的任務173.2程序功能分析171) 用戶讀入jpg或rgb格式的圖像172) 用戶使用鼠標操作在讀入的圖像上選取前景和背景樣本點確定訓練集173) 建立支持向量機進行圖像分割174) 友好的用戶界面173.4程序功能模塊設計171) 讀圖模塊172) 選取樣本模塊173) 建立支持向量機進行圖像分割模塊174) 用戶界面模塊173.5程序功能調(diào)用圖183.6程序功能

3、設計說明18第四章 詳細設計與軟件展示及課題展望194.1詳細設計與軟件展示194.1.1讀圖模塊194.1.2選取樣本模塊204.1.3建立支持向量機并進行圖像分割模塊234.1.4用戶界面模塊264.2設計缺陷與課題展望:31第五章 總結32參考文獻33致 謝34附錄351.1 程序功能351.2 開發(fā)測試環(huán)境351.3 運行環(huán)境351.4 使用說明35摘要本論文主要介紹了應用MATLAB編程,開發(fā)簡易的圖像分割軟件,實行基于支持向量機實行真彩色圖像的分割。其中圖像分割模塊使用MATLAB的LIBSVM包實現(xiàn)主要算法,與用戶交互的界面使用MATLAB GUI達到自由輸入圖像進行切割的目的。

4、其中用支持向量機作圖像分割是我這個項目主要的工作,大致流程是讀入圖像,訓練選取樣本點確定訓練集,建立支持向量機進行圖像切割。此外,我用MATLAB的GUI功能制作了一個用戶交互界面,這樣使得上面的代碼可以更加方便的達到效果。關鍵字:圖像分割;支持向量機;LIBSVM包;MATLAB GUIAbstractThis dissertation mainly presents a simple method for developing an image-segmentation application based on SVM by MATLAB programme. In this paper,

5、 the prominent algorithm is achieved by the application of LIBSVM package in the image segmentation part. And the User Interface is accomplished with MATLAB GUI for the goal of cutting randomly inputted images. My main work in this project is using SVM (Support Vector Machine) to segment an image, g

6、eneral process of which is to input a piece of true color image, then train the sample points selected from it, finally build a SVM to do image segmentation.Also, I make a user interface using the GUI function of MATLAB, in this way its more convenient for me to achieve the outcome of the above code

7、.Keywords: Image segmentation; Support Vector Machine; LIBSVM package; MATLAB GUI. 第一章 背景資料1.1研究的動機和目的視覺作為人們認識、了解、體會大自然和社會的基本且重要的途徑之一,圖像又是視覺的物理基礎。自近現(xiàn)代以來,隨著第二次工業(yè)革命,電視機、相機發(fā)明以來,數(shù)字圖像就開始進入人類的生活,隨著第三次科技革命,顯示屏、攝像頭、計算機的問世與應用普及,數(shù)字圖像成為了經(jīng)濟、產(chǎn)業(yè)、生活等諸多領域的感知手段。當今大數(shù)據(jù)、人工智能等領域的持續(xù)火爆又推動對它的研究和應用。因此,數(shù)字圖像處理成為了一項重要的科學技術,在科研

8、和工業(yè)領域的需求越來越大。對于一個圖像,我們通常只對它的某一部分感興趣,需要將它從整個圖像中提取出來,這種過程叫做圖像分割或圖像切割。作為計算機視覺和圖像處理中的熱點問題,無數(shù)種不同的圖像分割方法已經(jīng)被提出,許多經(jīng)典算法比如基于各種算子以及小波變換的邊緣檢測法,直線提取與邊界跟蹤法,各種閾值分割法,區(qū)域生長與合并法,區(qū)域處理法。5傳統(tǒng)的方法都在解決某些特定的圖像分割問題中有良好的價值,但是它們又都有局限性,所以目前還沒有一種可以廣泛適用于各種圖像的優(yōu)秀切割方法。由于圖像的復雜性,要想使分割出來的圖像看起來完美,有令人滿意的研究價值,經(jīng)常需要操作人員在圖像特征提取的階段作大量的工作確保圖像的不同

9、特征被發(fā)掘出來。根據(jù)數(shù)理統(tǒng)計學中的漸近理論,樣本越大得到的結果越與真實的情況接近。傳統(tǒng)的圖像切割方法正是基于此理論。但是它們難以在特征維度高、樣本容量小的問題中取得理想的效果。2支持向量機的提出有望解決這一問題。支持向量機是基于萬尼普克(Vapnik)提出的統(tǒng)計學習理論,有別于一般統(tǒng)計學理論,該理論能夠在有限樣本的條件下對事物進行非原理分析。該方法很有可能通過小樣本就得到不錯的分類結果,從而得到良好的分割,所以它不失為圖像分割一個很好的選擇。本文就是要著重探討支持向量機以及如何利用它編程實現(xiàn)簡單的真彩色圖像切割。91.2研究的背景和現(xiàn)狀1.2.1支持向量機在機器學習中,支持向量機是一種有關聯(lián)學

10、習算法的監(jiān)督學習模型,用來分析被用于分類和回歸分析的數(shù)據(jù)。給定一組訓練的例子,每個都被標記為屬于兩個類別中的一個或另一個,一個支持向量機訓練算法建立一個模型,分配新例子到其中一或另一個類別中,使得該模型成為一個非概率二進制線性分類器(雖然存在使用概率分類設置狀態(tài)下的支持向量機的方法,比如普拉特擴展)。一個支持向量機模型是將例子作為空間中的點的映射的展示,這樣不同類別的例子被一個清晰的分界線盡可能明顯地分開。然后新的例子被映射到相同的空間中并根據(jù)它落到分界線的哪一側預測其所屬的類別。除了執(zhí)行線性分類,支持向量機能夠使用核技巧有效地執(zhí)行非線性分類,核技巧隱性地把輸入的數(shù)據(jù)映射到高維特征空間中去。當

11、數(shù)據(jù)沒有被標類時,監(jiān)督學習就沒有成效了,這時我們需要非監(jiān)督學習方法,該方法嘗試著尋找原始聚類,把它們劃分到組中,然后把新的數(shù)據(jù)映射到這些組中。支持向量簇類算法應用支持向量的統(tǒng)計方法來分類非標簽數(shù)據(jù),是目前業(yè)界最廣泛應用的簇類算法。最初的支持向量機算法是由弗拉基米爾N.萬普尼克(Vladimir N. Vapnik )和阿利克謝.雅(Alexey Ya. Chervonenkis)于1963年發(fā)明。Bernhard E. Boser,Isabelle M. Guyon和Vladimir N. Vapnik于1992年提出了通過把核函數(shù)運用到最大間隔超平面來創(chuàng)建非線性分類器的方法。當前的

12、標準的典型(軟間隔)是由Corinna Cortes和Vapnik在1993年提出并于1995年公布的。91.2.2支持向量機的應用1.SVM在文本和超文本分類中很有幫助因為他們的應用可以在標準歸納和轉(zhuǎn)換設置中顯著減少對標簽訓練例子的需求。92.圖像的分類也可以使用SVM實施。試驗表明實驗結果表明,在經(jīng)過3 - 4輪相關反饋后,支持向量機的搜索精度明顯高于傳統(tǒng)的查詢細化方案。對圖像分割系統(tǒng)這個結論也同樣適合,包括那些使用修改版的由萬普尼克提出的優(yōu)先方法的支持向量機。93.使用支持向量機識別出手寫字體的特征。94.SVM算法已經(jīng)被廣泛應用于生物和其它科學領域。它們已經(jīng)被用來對蛋白質(zhì)進行分類,其中

13、高達90%的化合物分類正確。91.3研究內(nèi)容1) MATLAB編程實現(xiàn)基于SVM的真彩色圖像切割2) MATLAB GUI制作交互界面第二章 系統(tǒng)理論2.1支持向量機2.1.1定義更常見的是,一個支持向量機在一個高維或無限維的空間建立一個或一系列超平面,這些超平面可以被用于分類、回歸或其它任務比如異常值檢驗。直觀地來說,一個好的分離是通過一個合格的超平面得到的,該超平面必須是對任何類中的最近的訓練點集有著最大的距離(這就是所謂的函數(shù)間隔),因為通常來說間隔越大,分類器的泛化誤差越小。雖然原始的問題可以在有限維空間中被表述,但是經(jīng)常會出現(xiàn)要區(qū)分的數(shù)據(jù)集在有限維空間不是線性可分的情況。正是這個原因

14、,有人提出了將原始的有限維空間映射成一個維度更高的空間,認為這樣可以使得劃分更加容易。為了使運算量保持在合理的范圍內(nèi),這種使用支持向量機方案的映射,通過定義適用于此問題的核函數(shù),被設計成能保證原始空間中的變量的點積很容易被算出來。在更高維空間的超平面被定義為與該空間某向量的點積是常數(shù)的點的集合。這些定義超平面的向量可以被選為出現(xiàn)在數(shù)據(jù)基中的特征向量的圖像參數(shù)。通過這種超平面的選擇,特征向量中被映射到超平面的點由以下關系式定義:。注意,如果隨著遠離增長,變小,和式中的每一個項度量了測試點離相應的數(shù)據(jù)基的點的相近程度。在這種情況下,上面內(nèi)核的和式可以用來度量每一個測試點離另一個來自待區(qū)分集合的數(shù)據(jù)

15、點的相對接近程度。注意到一個事實,就是被映射到任何超平面的點的集合最終會慢慢變復雜,使得在初始空間一點也不復雜的的集合的劃分會變得很復雜。92.1.2線性支持向量機我們給定如下n個點的訓練集,的值是1或-1,每一個都表明了點所屬的類,每個是一個p維實矩陣。我們想找到“最大間隔超平面”,該平面將標簽為1和-1的點分成兩組。它被如此定義因為超平面與每個組中的點的最近距離得最大。每個超平面可以寫成滿足的點的集合,這里(不一定規(guī)范化)是超平面的法向量。這個式子非常像黑塞標準形,除了不一定是一個單位向量。參數(shù)決定了超平面沿著法向量相對原點的偏移。9硬間隔如果訓練數(shù)據(jù)是線性可分的,我們可以選擇兩個能夠分開

16、兩類數(shù)據(jù)的平行的超平面,這樣它們之間的距離會盡可能大了。被兩個超平面圍成的區(qū)域被稱為“間隔”,那么最大間隔超平面就位于它們正中間與它們平行。通過正確的數(shù)據(jù)集重新調(diào)節(jié),這些超平面可以被描述為下面的式子: (任何在該邊界或其上方的點是一類,用標簽1表示) (任何在該邊界或其下方的點是一類,用標簽-1表示)從幾何角度出發(fā),兩個超平面之間的距離是,為了最大化距離我們想要最小化。這個距離是用點到平面的距離方程算出來的。我們也必須防止數(shù)據(jù)點掉到間隔中,我們增加了如下約束:對于每個如果滿足時,如果,兩個式子中的任一個。這些約束闡明每個數(shù)據(jù)點必須在間隔正確的一邊。上面兩項也可以寫成,其中。我們可以把這些東西結

17、合起來得到優(yōu)化問題: 在的條件下,解決該問題的和決定了我們的分類器:一個顯而易見但是非常重要的幾何描述的結論:最大間隔超平面完全被那些離它最近的點 決定。這些被稱為支持向量。9軟間隔為了把SVM擴展到非線性可分的情況,我們引入鉸鏈損失函數(shù),如果滿足(1)的約束條件,換句話說,如果在間隔正確的一邊,這個函數(shù)就為0。對于在錯誤的一邊的數(shù)據(jù),該函數(shù)的值與離間隔的距離成正比。接下來我們希望最小化式子,參數(shù)在這里權衡了增加間隔尺寸和確保落在正確的一邊。因此,對于值顯著小的情況,如果輸入的數(shù)據(jù)是線性可分的,此SVM的分類效果等同于硬間隔SVM。但不管分類規(guī)則可行與否,分類器都會學習。92.1.3非線性分類

18、最初的最大間隔分類器算法是建立線性分類器。1992年科學家提出了把核技巧運用到最大超平面構建的非線性分類器方法。由此產(chǎn)生的算法形式上相似,除了所有點積被一個非線性核函數(shù)取代。這就使得該算法能在轉(zhuǎn)換后的特征空間擬合最大超平面。該轉(zhuǎn)換可能是非線性的并且轉(zhuǎn)換后的空間是高維的。盡管分類器在轉(zhuǎn)換后的特征空間是一個超平面,它在最初輸入數(shù)據(jù)的空間可能是非線性的。值得注意的是盡管給定足夠多樣本算法任然執(zhí)行得很好,在一個更高維的特征空間工作增加了支持向量機的推廣誤差。一些常見的核函數(shù)包括:多項式(均勻):多項式(非均勻):高斯徑向基底函數(shù):對雙曲正切:,部分并且內(nèi)核與式子的轉(zhuǎn)換相關。值也在轉(zhuǎn)換后的空間中,用表示

19、。用進行分類的點積可以再用核技巧來計算。92.1.4計算支持向量機分類器計算(軟間隔)支持向量機等同于把下面形式的表達式最小化 (2) 我們重點關注軟間隔支持向量機,因為上面提過,如果顯著小,那么就可以看做處理線性可分數(shù)據(jù)的硬間隔支持向量機。下面將先介紹一些經(jīng)典的解決方法,這些方法是把(2)式降為一個二次規(guī)劃問題,詳細如下:原始方法最小化(2)式可以被寫成下面一個可微目標函數(shù)的約束優(yōu)化問題對每個,我們引入一個變量。注意是滿足的最小非負數(shù)。因此我們可以把優(yōu)化問題寫成如下形式:其中并且對,這就是原始問題。對偶法通過解決上面問題的拉格朗日對偶型,我們得到了簡化的問題滿足 并且對所有這被稱作對偶問題。

20、因為對偶最大化問題是一個具有線性約束的的二次函數(shù),它可以通過二次規(guī)劃算法高效地求解。這里,僅當在正確的一邊時,并且當落在間隔邊界上時。接下來可以寫成支持向量的線性組合。偏移可以通過在間隔邊界找到一個并且求解 得到。核方法假設現(xiàn)在我們想學習一個非線性分類規(guī)則,它對應于一個轉(zhuǎn)換后的數(shù)據(jù)點的線性分類規(guī)則。此外,我們給出一個滿足的核函數(shù)。我們知道在轉(zhuǎn)換空間的分類向量滿足,可以通過解如下優(yōu)化問題得到:在且對所有,的條件下, 系數(shù)可以使用二次規(guī)劃求解,就像之前那樣。接下來,我們可以找到這樣序號,滿足,這樣在轉(zhuǎn)換空間的間隔邊界上,接下來解決 最后,新的點可以通過計算來分類。9現(xiàn)代方法最近的尋找SVM分類器的

21、算法有次梯度下降法和坐標下降法。但處理大型稀疏數(shù)據(jù)集時這兩種技術都被證明比傳統(tǒng)方法更有優(yōu)勢。其中次梯度方法在當訓練例子很多時尤其有效,而坐標下降法在當特征空間的維數(shù)高的時候非常有用。次梯度下降算法SVM的次梯度下降算法由如下表達式為形式運行的:注意到是一個和凸函數(shù)。因此,可以采用傳統(tǒng)的梯度下降法,而不是在函數(shù)梯度的方向上采取步驟,可以從函數(shù)的次梯度選擇的一個向量的方向采取步驟。這種方法對于特定的實施有優(yōu)勢,就是迭代的次數(shù)并不是以為規(guī)模的,是數(shù)據(jù)點的個數(shù)。9坐標下降法SVM的坐標下降算法是從對偶問題中得來的:在并且對所有的條件下,對于每個,系數(shù)迭代地沿著的方向調(diào)整。然后,生成的系數(shù)向量被投射到滿

22、足給定約束的最近的系數(shù)向量上。(通常用歐式距離。)該過程會一直重復直到得到一個系數(shù)最近優(yōu)化向量。生成的算法在實踐中非???,盡管證明有很少的性能保證。92.1.5經(jīng)驗風險最小化支持向量機屬于為統(tǒng)計推斷的一個自然類算法,它的許多獨特特征是由于鉸鏈損失的行為。上述軟間隔支持向量機就是一個鉸鏈損失的經(jīng)驗風險最小化的例子。這個觀點可以為我們進一步了解支持向量機如何并且怎樣工作提供更好的解釋,并使我們更好地分析他們的統(tǒng)計學性質(zhì)。9風險最小化在監(jiān)督學習中,我們給定一組標簽為的訓練例子,并且希望用給定的來預測。為了這樣做我們形成一個假設,是的一個好的擬合。一個好的擬合通常在損失函數(shù)的幫助下定義,該函數(shù)說明了作

23、為的一個擬合,它的擬合有多差。我們希望選擇一個使期望風險最小化的假設:在大多是的情況下,我們不知道的聯(lián)合分布。在這些案例里,一個常見的策略是選擇能使經(jīng)驗風險最小化的假設:。在隨機變量的序列的特定假設下,如果考慮的假設集足夠小,隨著n增大,經(jīng)驗風險的最小化與期望風險的最小化更接近。這種方法就叫做經(jīng)驗風險最小化。正規(guī)化和穩(wěn)定性:為了使最小化問題有一個明確定義的方案,我們必須給考慮的假設集合約束。如果是一個賦范空間,一個特別有效的技術是考慮僅僅的那些假設。這等同于加了一個正規(guī)懲罰,并且解決了新的優(yōu)化問題。這種方法叫做吉洪諾夫正則化。更普遍的是,可以成為假設的復雜性的測度,所以偏好更簡化的假設。2.1

24、.6分類模型的VC維與可學習性VC維在 VapnikChervonenkis的理論中,VC維是一個可以被統(tǒng)計學習算法學習的函數(shù)空間能力的測度,該能力包含復雜性,表現(xiàn)力、豐富性、靈活性。它定義為算法可以打散的最大點集的基數(shù)。如果對于所有這些點的標簽的任意分配,存在一個使得模型對點集的評估沒有出錯,那么我們說一個參數(shù)向量為的分類模型可以用來打散一個點集,一個模型的VC維是該模型可以打散的最大樣本數(shù)。更正式的說,它是最大的基數(shù),基數(shù)為的點集可以被打散。8所謂打散我們可以這樣理解,假設一個二維空間有3個點,現(xiàn)在要用正負標簽給這3個點標號,然后用一條直線把這三個點正確分類。那么如果這三個點共線,并且同一

25、直線上中間的點和兩邊的點的標簽不一樣,那么就無法用一條直線來把它們正確分類,那么這二維空間的三個點是不可打散的。依次類推,二維空間中的點大于3的情況也顯然是不可打散的,那么二維空間的VC維就是2。可學習性對VC維概念的理解使得我們研究可學習性成為了可能,而可學習性決定了我們訓練的樣本數(shù)的大小。一般情況下,學習所需的訓練樣本數(shù)隨著VC維的增加而增加,這也是我們避免使用高階多項式作為分類器的原因。72.2 libsvm工具箱LIBSVM是一個受歡迎的開源機器學習庫,是由國立臺灣大學開發(fā)的,通過C語言的應用程序編程接口用C+寫的。LIBSVM實現(xiàn)了面向內(nèi)核支持向量機的SMO算法,它能支持分類和回歸。

26、它的庫中的支持向量機學習代碼經(jīng)常在其它開源的機器學習工具箱被應用。對于許多語言比如JAVA,MATLAB,R都與LIBSVM綁定。5在該設計中,我們通過調(diào)用它里面的訓練和預測函數(shù)完成核心功能。2.3 圖像分割的定義所謂圖像分割,是將某圖像的某一或某幾個部分分割出來,并且分割出來的部分之間互相不重疊,與未分割出來的部分也不重疊。這個分割不是隨意的,它必須根據(jù)圖像的特點或特征集來分割。一個圖像中同一區(qū)域的特征(比如灰度、色彩、形狀、紋理、密集度)具有某種共性,而不同的區(qū)域的這些特征具有個性,區(qū)域和區(qū)域之間的特點會產(chǎn)生突變。從集合的角度來說,對于一個理想的分割我們有如下一些結論:2假設把一個圖像E分

27、割成n小塊,區(qū)域的一致程度用表示,的取值范圍設為對于不同的下標i,j,。這個很好理解。對于不同的下標i,j,。這個說明了分割后的原圖像不同的部位互不相交。對于不同的下標i,j,。表明不同區(qū)域的一致程度很低,理想的情況下應該是0,實際上難以做到精度100%,所以現(xiàn)實中一個比較成功的分割兩個不同分割區(qū)域的并的一致性應該是很低的,無限趨于0。同一區(qū)域的一致程度是非常高的,所以它的值無限趨于1。2.3 MATLAB用戶圖形界面(GUI)2.3.1人機交互界面用戶界面是人和機器或程序交互的物理工具或方法。鍵盤、鼠標、操作桿、按鈕等都可以成為交互的接口。常見的用戶操作界面有直接操作界面,比如windows

28、系統(tǒng),用戶可以很容易理解桌面上的應用程序是干什么的,根據(jù)固有常識去操作計算機。圖形用戶界面,這是當今社會應用最廣泛的交互方式,比如大量的便攜式電子產(chǎn)品(手機、平板、MP4),依賴視覺和手動控制參與操作。目前比較新興的還有虛擬現(xiàn)實技術,讓人有深入其境的感覺,人能夠在虛擬現(xiàn)實環(huán)境里依靠自己更加自然的、本能的反應操作機器,隨著科技的進步,這項技術的應用會越來越廣泛。在該設計中,我使用的是圖形用戶界面來實現(xiàn)人對程序的控制與操作。2.3.2 MATLAB GUI圖形用戶界面(GUI)提供了對應用軟件或程序指向和點擊控制,這種指向和點擊控制減少了學習一門語言或者為了運行應用程序而打字輸入指令的需要。MAT

29、LAB應用軟件自動包含了具有GUI前端的MATLAB程序,這些程序能夠用自動化一個任務或計算。這個GUI通常含有控制元件比如菜單、工具條、按鈕和滑動條。許多MATLAB產(chǎn)品比如曲線擬合工具包,信號處理工具包、和控制系統(tǒng)工具包有具有自定義用戶界面的應用程序。你也可以創(chuàng)建你自己的自定義應用程序以及它們相對應的用戶界面給別人使用。52.3.3 MATLAB GUIDEGUIDE是MathWorks開發(fā)的數(shù)學軟件MATLAB GUI開發(fā)環(huán)境,它為人提供自定義app設計用戶界面的工具。通過使用GUIDE版面編輯器,你可以形象地設計你的用戶界面。然后GUIDE會自動產(chǎn)生MATLAB代碼來建立這個用戶界面,

30、你可以這些被生成的代碼對你的應用程序的行為來編程。52.3.4 函數(shù)句柄一個函數(shù)句柄是一個將關聯(lián)存儲到函數(shù)中的一個數(shù)據(jù)容器。你可以使用一個函數(shù)句柄來建立匿名函數(shù)或者指定回調(diào)函數(shù)。你也可以使用一個函數(shù)句柄來把一個函數(shù)傳遞到另一個函數(shù)中去,或者從主函數(shù)外面調(diào)用一個本地函數(shù)。62.3.4 回調(diào)函數(shù)當一個圖形對象要發(fā)生特定的事件時,GUI傳遞要執(zhí)行的子函數(shù)名到M文件中,該子函數(shù)稱為回調(diào)函數(shù)。用戶只需要對一些控制元件操作,比如點擊某個按鈕,控制元件會自動對此操作響應,然后啟動其所對應的回調(diào)函數(shù)。該函數(shù)不會主動運行,只有被觸發(fā)才會執(zhí)行。6第3章 需求分析3.1需求分析的任務通過對軟件(程序)操作者的要求分

31、析,從而了解到軟件需要具備的功能,然后將這些需求或功能抽象化,將它們細化為系統(tǒng)功能模塊。103.2程序功能分析1) 用戶讀入jpg或rgb格式的圖像2) 用戶使用鼠標操作在讀入的圖像上選取前景和背景樣本點確定訓練集3) 建立支持向量機進行圖像分割4) 友好的用戶界面3.4程序功能模塊設計 根據(jù)系統(tǒng)功能的要求,可將系統(tǒng)分解成以下幾個功能模塊來分別設計:1) 讀圖模塊2) 選取樣本模塊3) 建立支持向量機進行圖像分割模塊4) 用戶界面模塊選擇圖片文件按鈕模塊(包含讀取圖像、選取樣本功能) 輸出圖形模塊(包含建立支持向量機切割以及輸出切割后的圖像)3.5程序功能調(diào)用圖3.6程序功能設計說明我在設計時

32、先是把前三個模塊做出來,形成一個獨立的基于支持向量機的能進行真彩色圖形圖像切割的程序。然后再單獨設計用戶界面模塊,將前三段程序進行部分的修改后,嵌入到GUI對象的函數(shù)中,實現(xiàn)其功能。第四章 詳細設計與軟件展示及課題展望4.1詳細設計與軟件展示4.1.1讀圖模塊結構流程圖:具體實現(xiàn):將位于某路徑下的文件littleduck.jpg用image.read函數(shù)讀取。用矩陣pic來存放讀入的圖片,查看矩陣pic的大小和類型,顯示結果如下:Name Size Bytes Class Attributes pic 439x600x3 790200 uint8 結果說明:讀入的圖像數(shù)據(jù)pic是一個439行、

33、600列、3頁的三維矩陣,數(shù)據(jù)類型為8位無符號整形。接下來規(guī)定圖像顯示的窗口的屬性,然后將讀入的圖形在窗口中顯示出來。 4.1.2選取樣本模塊實現(xiàn)目標:本模塊要實現(xiàn)合理選取背景和前景樣本點確定訓練集,選取樣本階段是關鍵的一個環(huán)節(jié),因為樣本的好壞決定了你分類的效果。結構流程圖:具體實現(xiàn):使用MATLAB中的ginput函數(shù)來提取前景和背景樣本點作為訓練的樣本,實現(xiàn)過程如下:用zeros函數(shù)生成兩個20*3零矩陣TrainData_background和TrainData_foreground分別表示背景圖像樣本集和前景圖像樣本集。這兩個矩陣存放的數(shù)值類型是double型。接下來實施背景采樣,先用

34、msgbox函數(shù)創(chuàng)建一個對話框,執(zhí)行到該步驟時該對話框會自動彈出,告訴你在背景區(qū)域采集20個背景樣本點,點擊OK后按任意鍵繼續(xù)。對話框結束后,用pause語句來實現(xiàn)一個暫停功能,按任意鍵后執(zhí)行下面的程序。%使用ginput函數(shù),這樣可以用光標在屏幕上輸入,構建循環(huán)輸入。for run = 1:20 x,y = ginput(1); hold on;plot(x,y,'r*');%將鼠標輸入的點的坐標轉(zhuǎn)換成uint8格式 x = uint8(x);y = uint8(y);%存放圖像信息的矩陣是三維的,三個維度分別表示分辨率紅、黃、藍三原色的數(shù)值大小 TrainData_back

35、ground(run,1) = pic(x,y,1); TrainData_background(run,2) = pic(x,y,2); TrainData_background(run,3) = pic(x,y,3);End 1需要說明的是,選取訓練點時有一個需要注意的地方,應該選取有代表性的點作為訓練點,拿此列來說,比如選取鴨子眼睛或鴨子邊緣部位的點作為樣本點。最初選取的訓練點可能導致圖片分割不是很完美,例如鴨子后面濺起的水花被分割成鴨子區(qū)域,這時候可以對錯分的水花區(qū)域添加一兩個典型到湖面區(qū)域,一般嘗試幾次后就可以將鴨子圖像從整個圖像中分割出來了。前景采樣階段也遵循上面的步驟。運行結果:

36、 前景采樣開始階段背景和前景的樣本點都選取完畢后的圖像圖片說明:由于我是將程序按段執(zhí)行的,目的是為了展示每一段程序運行后的效果,所以前后圖片上的樣本點取點不一致。4.1.3建立支持向量機并進行圖像分割模塊實現(xiàn)目標:利用上面選取的樣本點作為訓練樣本,將背景的標簽設為0,前景的標簽設為1,進行訓練和預測。這里采用了一次多項式核函數(shù)(LIBSVM參數(shù)-t 1 -d 1)結構流程圖:具體實現(xiàn):建立向量機模型階段:建立一個標簽組,存放訓練數(shù)據(jù)的背景標簽矩陣和前景標簽矩陣,屬于背景的點記為0,屬于前景的點記為1。用length函數(shù)算出背景和前景樣本的長度(個數(shù)),然后用zeros函數(shù)將背景樣本組初始化為2

37、0*1的零矩陣,用ones函數(shù)將前景樣本組初始化為20*1的單位矩陣。代碼如下:TrainLabel=zeros(length(TrainData_background),1);.ones(length(TrainData_foreground),1);建立一個訓練數(shù)據(jù)組,它由背景和前景樣本構成,代碼如下:TrainData = TrainData_background;TrainData_foreground;使用LIBSVM中的svmtrain函數(shù)建立預測模型,參數(shù)設置為-t 1 -d 1表示核函數(shù)是依次多項式。代碼如下:model = svmtrain(TrainLabel,double

38、(TrainData),'-t 1 -d 1');將標簽組,訓練數(shù)據(jù)組、建立的模型用svmpredict函數(shù)預測,其中訓練數(shù)據(jù)得轉(zhuǎn)換成double型,代碼如下:preTrainLabel = svmpredict(TrainLabel,double(TrainData),model);預測結果如下:optimization finished, #iter = 23536nu = 0.873432obj = -34.914147, rho = -3.345745nSV = 37, nBSV = 33Total nSV = 37Accuracy = 57.5% (23/40) (c

39、lassification)預測精度不高。求三維矩陣pic的行數(shù)m,列數(shù)n,頁數(shù)k。用reshape函數(shù)將三維矩陣pic轉(zhuǎn)成行,k列的雙精度二維矩陣,用TestData矩陣來表示轉(zhuǎn)換后的pic。查看矩陣TestData的大小和類型,預測前景和背景標簽 TestLabal = svmpredict(zeros(length(TestData),1),TestData,model);預測結果如下: Name Size Bytes Class Attributes TestData 263400x3 6321600 double Accuracy = 88.6393% (233476/263400)

40、 (classification)下面進入展示分割后的圖像階段:首先根據(jù)預測得到的前景和背景標簽轉(zhuǎn)換成三維矩陣形式從而對整個圖像的像素點進行分類,進而達到圖像分割的目的。用變量ind來表示:將變量ind的數(shù)值型數(shù)據(jù)轉(zhuǎn)換成邏輯型數(shù)據(jù),我們引入一個新變量pic_seg來存儲圖像矩陣pic,將pic_seg矩陣邏輯值為0的點都賦值為0,就達到分割的要求了,代碼如下:ind = logical(ind);pic_seg = pic;pic_seg(ind) = 0;然后設置窗口屬性,展示分割后的圖像 1結果顯示: 分割后的圖像用sublot函數(shù)在圖形窗口輸出分割前后的圖像,達到對比的目的。結果展示:

41、分割前后對比圖結果說明:前景鴨子圖像已經(jīng)分割出來了,雖然不是十分完美,但是效果已經(jīng)比較令人滿意了。當然,對特征點的選取是影響支持向量機分割效果的關鍵因素。我如果取點的時候更加注意一點可能會獲得更完美的圖像。4.1.4用戶界面模塊設計目標:前面三個模塊已經(jīng)是該設計的核心了,但是為了更好地操作該程序,需要一個用戶界面。該模塊就是為了能夠使用按鈕操作,自由地選擇圖片然后在圖片上取點,執(zhí)行切割功能,展示切割后的圖片。理想的目標是讀入任何真彩色圖片都能達到令人滿意的切割效果。程序功能調(diào)用圖:具體實現(xiàn):我使用MATLAB的GUIDE建立GUI。我需要使用GUIDE完成兩項工作,第一是進行圖形頁面布局,第二

42、是進行GUI編程。實際上,只需要把之前寫的代碼略加修改嵌入到兩個按鈕對應的回調(diào)函數(shù)中就可以實現(xiàn)了。在命令行窗口輸入guide,啟動GUIDE。選擇Blank GUI(default)。進入GUI編輯界面,GUI編輯界面主要包括GUI對象選擇區(qū)、GUI工具欄、GUI布局區(qū)。選擇一個Edit Text對象,兩個Axes對象、兩個Push Button對象。在.fig文件中對GUI對象屬性進行設置和布局。結果展示:編寫回調(diào)函數(shù)階段:編寫“選擇圖片”按鈕的回調(diào)函數(shù):設置全局變量 TrainData_background,TrainData_foreground,imgdata用下面的代碼實現(xiàn)讀入任何選

43、擇的路徑的功能:imgfilename imgpathname=uigetfile('*.jpg;*.png','選擇圖片');if imgfilenameimgdata=imread(imgpathname '' imgfilename);將讀入的圖片用imgdata來保存。在第一個坐標軸方框中顯示出來,將文件名變量保存到handles結構體中handles.imgfilename中。將imgdata保存到handles結構體中,這樣imgdata就成了全局變量,可以在回調(diào)函數(shù)間被傳遞。下面的步驟就是選取樣本階段的代碼,只需要將pic替換為im

44、gdata。用guidata(hObject,handles)更新handles結構體,該階段結束。16結果展示:編寫轉(zhuǎn)換按鈕的回調(diào)函數(shù):將 TrainData_background TrainData_foreground imgdata設置全局為變量對文件名變量進行判斷是否非空,以確保文件已經(jīng)讀入。if isempty(handles.imgfilename)接下來參照建立支持向量機進行圖像分割模塊的思路過程,用imgoutput矩陣變量來存儲分割后的圖像的值,并放入句柄函數(shù),在左邊的坐標軸方框顯示出來。代碼如下:imgoutput = imgdata;imgoutput(ind) = 0

45、;handles.imgoutput = imgoutput;axes(handles.axes2);imshow(imgoutput);End 16結果展示:樣本點個數(shù)為20的效果結果說明:該結果大致把前景圖像從原圖像中分離出來,但是有許多瑕疵,很多細節(jié)部分沒有展現(xiàn)地很好。原因是取樣本的圖片小了很多,分辨率自然就低很多,同時取樣本點很多細節(jié)處容易被忽略,所以難以得到之前的分割效果。改進措施:把坐標軸擴大,將背景和前景取樣的個數(shù)增加到30個,這樣能夠更多地照顧到細節(jié)部分。結果展示: 樣本點個數(shù)為30的效果結果說明:經(jīng)過上面的改進,切割效果明顯變好了,甚至比初始的程序做出來的效果都好,事實證明,

46、增加樣本量是有利于提高分類的準確率,提高切割圖像的效果的。為了測試該模塊自由讀取圖片并切割的功能,我又進行了下面的測試。選取一個真彩色花朵的圖片,把它的圖像從周邊的環(huán)境的圖像分割出來。如下是原圖:把它放入untitled.m文件操作。結果說明:選取的圖像復雜性比鴨子圖片的要高很多,所以相同樣本數(shù)效果要相對差一點,但是大體上還是可以的,花朵的那一部分已經(jīng)分割出來了。由圖中可以看出,樣本數(shù)越密集的區(qū)域,分割得越完整。4.2設計缺陷與課題展望:對于本次設計由于前景和背景圖像的色彩單一且對比度大,可以達到好的效果,但是如果換一張更復雜的圖片,它的效果就會非常差,甚至會出現(xiàn)一片黑色,究其原因還是模型太簡

47、單了,一元多項式核函數(shù)不能適用于復雜的圖像。并且在本次設計中,即便是那兩張比較簡單的圖片,樣本點選取不夠多的情況下切割效果還有很多瑕疵,而增加樣本點數(shù)后的效果就相當完美了,說明更多的樣本數(shù)使得我們盡可能多地選擇有代表性的圖像特征,這也驗證了機器學習中一條簡單的經(jīng)驗法則,即訓練樣本數(shù)越多,學習分類器的效果越好。圖像切割,在大數(shù)據(jù)、人工智能前景非常廣闊的今天有著越來越熱門和廣泛的應用,與它相關的很多領域比如模式識別需要它發(fā)揮作用。一種優(yōu)秀的算法,不僅僅能在解析圖像階段大大減少計算復雜度,還能得出很好的分割效果。2對圖像切割的研究也已經(jīng)不是一天兩天的事情了,目前已經(jīng)有成熟的理論方法。這些方法在不同的情況下有著不可或缺的作用,但是也都有局限?;诮y(tǒng)計學習的支持向量機方法可以說是比較創(chuàng)新的技術。它能夠應對快速地對圖像特征進行分析,從而達到分割的目的。其最為可貴的是在圖像切割的諸多算法中通用性相對比較強,但是,支持向量機的圖像分割方法不是很容易理解的,對于不同的圖像,它的核技巧是需要變化的,才能適應生活中千奇萬變的問題。隨著數(shù)學工具的引入,一種種

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論