目錄
1 前言. 1
1.1 植物的發展史. 1
1.1.1 植物界的類羣及多樣性. 1
1.1.2 植物的分類等級. 2
1.2植物的識別方法. 3
1.2.1 花與種子的特性. 3
1.2.2 葉子的特徵. 3
1.3 什麼是數字圖像處理. 5
1.3.1 數字圖像處理概念及其意義. 5
1.3.2 數字圖像處理中的基本圖像類型. 6
1.3.3 圖像格式分析. 7
1.4 什麼是模式識別. 8
1.4.1 模式識別的概念. 8
1.4.2 模式識別研究方向. 9
1.4.3 模式識別在實際中的應用. 10
2 預處理與算法研究. 10
2.1 圖像的預處理. 10
2.2 數字圖像處理方法. 11
2.2.1 二值處理. 11
2.2.2 模糊模式識別算法. 12
2.2.3 邊緣檢測與輪廓提取. 12
3.2.4 信息存儲. 14
3 算法實現. 14
3.1 分析實際工做過程. 14
3.2 算法實現過程. 15
3.2.1 掏空內部點算法的基本思想. 15
3.2.2 邊界跟蹤算法的基本思想. 15
3.2.3 部分實現代碼. 18
4 小結分析. 25
5 參考文獻. 26
6 致謝. 27
1 前言
1.1 植物的發展史
1.1.1 植物界的類羣及多樣性
植物界的發生和發展經歷了漫長的歷史,隨着地球歷史的發展,由原始生物不斷演化,其間大約經歷了30億年,有的種族由興盛到衰亡,新的種類又在進化中產生,造成地球上現存的已知的約50多萬種植物。植物種類的繁多,數量浩瀚,是生物圈的重要組成部分[4]。
植物對人類生活已經濟生活有極其重要的做用,衣、食、住、行、醫藥及工業品等都與植物的生產利用密不可分,所以植物是最重要的生產對象,也是重要的研究對象。
植物的分佈極爲普遍,幾乎能夠說天然界到處都有着植物。並且在形態結構上表現出多種多樣,有肉眼看不見的單細胞的原始低等植物,也有分化程度很高、由多細胞組成的、結構複雜的樹木花草。根據不一樣植物的特徵以及它們的進化關係
其中種子植物是現今地球上種類最多、形態構造最複雜、和人類經濟活動最密切的一類植物。所有樹木、農做物和絕大多數的經濟植物都是種子植物。種子植物從形態構造到生活習性等各方面一樣表現了極其不一樣的多樣性。
爲了能更好的運用植物與識別植物,對植物的分類與識別,愈來愈體現出其重要性。所以產生了植物分類學的說法,植物分類學是研究植物類羣的分類、探索植物間的親緣關係和闡明植物界天然系統得科學。植物分類對於區分植物種類,探索植物間親緣關係,闡明植物系統得進化規律具備很重要的意義。
1.1.2 植物的分類等級
前面講了植物分類的基本單位是種,根據親緣關係把共同性比較多的一些種概括成屬(Genus),再把共同性較多的一些屬概括成科(Familia),如此類推而成目(order)、綱(C1assis)和門(Division)。所以植物界(Plantae)從上到下的分類等級順序爲門、綱、目、科、屬、種。在各分類等級之下根據須要創建亞級分類等級,如亞門(Subdivision)、亞綱(Subclassis)、亞目(Suborder)、亞科(Subfamilia)和亞屬(Subgenus)。
種如下的分類等級則根據該類羣與原種性狀的差別程度分爲亞種(Subspecies)、變種(Varietas)和變型(Forma)。亞種比變種包括的範圍更普遍一些,除了在形態上有顯著的區別外,並且在地理分佈上也有必定的區域性。變種又比變型在形態上的差別要大一些。實際分類工做中要根據野外調查的資料和標本的特徵通過綜合研究分析方能肯定。
各分類等級的具體名稱(如種子植物門、被子植物亞門、雙子葉植物綱等)的拉丁文名稱常有固定的詞尾,可供識別,如種子植物門(Spermatophyta)的詞尾爲-ta,亞門爲-ae,綱爲-eae,目爲-ales,科爲-aceae;科名的拉丁名詞尾通常是-aceae,可是也有少數例外,如脣形科Labatae,菊科Compositae,禾本科Graminae。
所以對植物進行有效的識別,是目前植物界很重要的問題。
1.2植物的識別方法
1.2.1 花與種子的特性
一朵徹底的花由花柄、花托、花萼、花冠、雄蕊和雌蕊六部分組成。花萼由萼片組成,花冠由花瓣組成。花萼和花冠合稱花被,是花的外層部分,有保護雄蕊和雌蕊的做用。雌蕊和雄蕊合稱花蕊,是花的主要部分。一個雄蕊由花絲和花葯組成。花絲着生在花托上。花絲頂端着生花葯。花葯中有花粉囊,裏面包有花粉。一個雌蕊由子房、花柱和柱頭組成。
種子是由種皮、胚和胚乳三部分組成。種皮爲種子的最外層,具備保護做用。種皮上有臍和種孔。
咱們能夠根據花和種子的形態,以及內部的不一樣組成來區分植物,可是因爲這次主要運用的是圖像識別的方法。所以,不考慮經過花和種子來識別植物
1.3 什麼是數字圖像處理
1.3.1 數字圖像處理概念及其意義
所謂數字圖像處理[7]就是利用計算機對圖像信息進行加工以知足人的視覺心理或者應用需求的行爲。實質上是一段可以被計算機還原顯示和輸出爲一幅圖像的數字碼。
21世紀是一個充滿信息的時代,圖像做爲人類感知世界的視覺基礎,是人類獲取信息、表達信息和傳遞信息的重要手段。
數字圖像處理[9],即用計算機對圖像進行處理,其發展歷史並不長。數字圖像處理技術源於20世紀20年代,當時經過海底電纜從英國倫敦到美國紐約傳輸了一幅照片,採用了數字壓縮技術。首先數字圖像處理技術能夠幫助人們更客觀、準確地認識世界,人的視覺系統能夠幫助人類從外界獲取3/4以上的信息,而圖像、圖形又是全部視覺信息的載體,儘管人眼的鑑別力很高,能夠識別上千種顏色,但不少狀況下,圖像對於人眼來講是模糊的甚至是不可見的,經過圖象加強技術,可使模糊甚至不可見的圖像變得清晰明亮。另外一方面,經過數字圖像處理中的模式識別技術,能夠將人眼沒法識別的圖像進行分類處理。經過計算機模式識別技術能夠快速準確的檢索、匹配和識別出各類東西。
數字圖像處理技術已經普遍深刻地應用於國計民生休慼相關的各個領域。
1.3.2 數字圖像處理中的基本圖像類型
在計算機中,按照顏色和灰度的多少能夠將圖像爭爲二值圖像、灰度圖像、索引圖像和真彩色RGB圖像四種基本類型。目前,大多數圖像處理軟件都支持這四種類型的圖像。
(1) 二值圖像:
一幅二值圖像的二維矩陣僅由0、1兩個值構成,「0」表明黑色,「1」代白色。因爲每一像素(矩陣中每一元素)取值僅有0、1兩種可能,因此計算機中二值圖像的數據類型一般爲1個二進制位。二值圖像一般用於文字、線條圖的掃描識別(OCR)和掩膜圖像的存儲。
(2) 灰度圖像:
灰度圖像矩陣元素的取值範圍一般爲[0,255]。所以其數據類型通常爲8位無符號整數的(int8),這就是人們常常提到的256灰度圖像。「0」表示純黑色,「255」表示純白色,中間的數字從小到大表示由黑到白的過渡色。在某些軟件中,灰度圖像也能夠用雙精度數據類型(double)表示,像素的值域爲[0,1],0表明黑色,1表明白色,0到1之間的小數表示不一樣的灰度等級。二值圖像能夠當作是灰度圖像的一個特例。
(3) 索引圖像:
索引圖像的文件結構比較複雜,除了存放圖像的二維矩陣外,還包括一個稱之爲顏色索引矩陣MAP的二維數組。MAP的大小由存放圖像的矩陣元素值域決定,如矩陣元素值域爲[0,255],則MAP矩陣的大小爲256ⅹ3,用MAP=[RGB]表示。MAP中每一行的三個元素分別指定該行對應顏色的紅、綠、藍單色值,MAP中每一行對應圖像矩陣像素的一個灰度值,如某一像素的灰度值爲64,則該像素就與MAP中的第64行創建了映射關係,該像素在屏幕上的實際顏色由第64行的[RGB]組合決定。也就是說,圖像在屏幕上顯示時,每一像素的顏色由存放在矩陣中該像素的灰度值做爲索引經過檢索顏色索引矩陣MAP獲得。索引圖像的數據類型通常爲8位無符號整形(int8),相應索引矩陣MAP的大小爲256ⅹ3,所以通常索引圖像只能同時顯示256種顏色,但經過改變索引矩陣,顏色的類型能夠調整。索引圖像的數據類型也可採用雙精度浮點型(double)。索引圖像通常用於存放色彩要求比較簡單的圖像,如Windows中色彩構成比較簡單的壁紙多采用索引圖像存放,若是圖像的色彩比較複雜,就要用到RGB真彩色圖像。
(4) RGB彩色圖像:
RGB圖像與索引圖像同樣均可以用來表示彩色圖像。與索引圖像同樣,它分別用紅(R)、綠(G)、藍(B)三原色的組合來表示每一個像素的顏色。但與索引圖像不一樣的是,RGB圖像每個像素的顏色值(由RGB三原色表示)直接存放在圖像矩陣中,因爲每一像素的顏色需由R、G、B三個份量來表示,M、N分別表示圖像的行列數,三個M x N的二維矩陣分別表示各個像素的R、G、B三個顏色份量。RGB圖像的數據類型通常爲8位無符號整形,一般用於表示和存放真彩色圖像,固然也能夠存放灰度圖像。
1.3.3 圖像格式分析
數字化圖像數據有兩種存儲方式[6]:位圖存儲(Bitmap)和矢量存儲(Vector)
咱們日常是以圖像分辨率(即象素點)和顏色數來描述數字圖象的。例如一張分辨率爲640*480,16位色的數字圖片,就由2^16=65536種顏色的307200(=640*480)個素點組成。
位圖圖像:位圖方式是將圖像的每個象素點轉換爲一個數據,當圖像是單色(只有黑白二色)時,8個象素點的數據就佔據一個字節(一個字節就是8個二進制數,1個二進制數存放象素點);16色的圖像每兩個象素點用一個字節存儲;256色圖像每個象素點用一個字節存儲。這樣就可以精確地描述各類不一樣顏色模式的圖像圖面。位圖圖像彌補了矢量式圖像的缺陷,它可以製做出色彩和色調變化豐富的圖像,能夠逼真地表現天然界的景象,同時也能夠很容易地在不一樣軟件之間交換文件,這就是位圖圖像的優勢;而其缺點則是它沒法制做真正的3D圖像,而且圖像縮放和旋轉時會產生失真的現象,同時文件較大,對內存和硬盤空間容量的需求也較高。位圖方式就是將圖像的每一像素點轉換爲一個數據。若是用1位數據來記錄,那麼它只能表明2種顏色(21=2);若是以8位來記錄,即可以表現出256種顏色或色調(28=256),所以使用的位元素越多所能表現的色彩也越多。一般咱們使用的顏色有16色、256色、加強16位和真彩色24位。通常所說的真彩色是指24位(28×28×28)的位圖存儲模式適合於內容複雜的圖像和真實照片。但隨着分辨率以及顏色數的提升,圖像所佔用的磁盤空間也就至關大;另外因爲在放大圖像的過程當中,其圖像勢必要變得模糊而失真,放大後的圖像像素點實際上變成了像素「方格」。 用數碼相機和掃描儀獲取的圖像都屬於位圖。
矢量圖像:矢量圖像存儲的是圖像信息的輪廓部分,而不是圖像的每個象素點。例如,一個圓形圖案只要存儲圓心的座標位置和半徑長度,以及圓的邊線和半徑長度,以及圓的邊線和內部的顏色便可。該存儲方式的缺點是常常耗費大量的時間作一些複雜的分析演算工做,圖像的顯示速度較慢;但圖像縮放不會失真;圖像的存儲空間也要小得多。因此,矢量圖比較適合存儲各類圖表和工程設計圖。
1.4 什麼是模式識別
1.4.1 模式識別的概念
模式識別[8]是一種從大量信息和數據出發,在專家經驗和已有認識的基礎上,利用計算機和數學推理的方法對形狀、模式、曲線、數字、字符格式和圖形自動完成識別的過程。模式識別包括相互關聯的兩個階段,即學習階段和實現階段,前者是對樣本進行特徵選擇,尋找分類的規律,後者是根據分類規律對未知樣本集進行分類和識別。廣義的模式識別屬計算機科學中智能模擬的研究範疇,內容很是普遍,包括聲音和語言識別、文字識別、指紋識別、聲納信號和地震信號分析、照片圖片分析、化學模式識別等等。計算機模式識別實現了部分腦力勞動自動化。
模式識別--對錶徵事物或現象的各類形式的(數值的,文字的和邏輯關係的)信息進行處理和分析,以對事物或現象進行描述、辨認、分類和解釋的過程,是信息科學和人工智能的重要組成部分。
模式還可分紅抽象的和具體的兩種形式。前者如意識、思想、議論等,屬於概念識別研究的範疇,是人工智能的另外一研究分支。咱們所指的模式識別主要是對語音波形、地震波、心電圖、腦電圖、圖片、文字、符號、三位物體和景物以及各類能夠用物理的、化學的、生物的傳感器對對象進行測量的具體模式進行分類和辨識。
模式識別問題指的是對一系列過程或事件的分類與描述,具備某些相相似的性質的過程或事件就分爲一類。模式識別問題通常能夠應用如下4種方法進行分析處理。
統計模式識別方法:統計模式識別方法是受數學中的決策理論的啓發而產生的一種識別方法,它通常假定被識別的對象或通過特徵提取向量是符合必定分佈規律的隨機變量。其基本思想是將特徵提取階段獲得的特徵向量定義在一個特徵空間中,這個空間包含了全部的特徵向量,不一樣的特徵向量,或者說不一樣類別的對象都對應於空間中的一點。在分類階段,則利用統計決策的原理對特徵空間進行劃分,從而達到識別不一樣特徵的對象的目的。統計模式識別中個應用的統計決策分類理論相對比較成熟,研究的重點是特徵提取。
人工神經網絡模式識別:人工神經網絡的研究起源於對生物神經系統的研究。人工神經網絡區別於其餘識別方法的最大特色是它對待識別的對象不要求有太多的分析與瞭解,具備必定的智能化處理的特色。
句法結構模式識別:句法結構模式識別着眼於對待識別對象的結構特徵的描述。
在上述4種算法中,統計模式識別是最經典的分類識別方法,在圖像模式識別中有着很是普遍的應用。
1.4.2 模式識別研究方向
模式識別研究主要集中在兩方面,即研究生物體(包括人)是如何感知對象的,屬於認知科學的範疇,以及在給定的任務下,如何用計算機實現模式識別的理論和方法。前者是生理學家、心理學家、生物學家和神經生理學家的研究內容,後者經過數學家、信息學專家和計算機科學工做着近幾十年來的努力,已經取得了系統的研究成果。
一個計算機模式識別系統基本上事有三部分組成的[11],即數據採集、數據處理和分類決策或模型匹配。任何一種模式識別方法都首先要經過各類傳感器把被研究對象的各類物理變量轉換爲計算機能夠接受的數值或符號(串)集合。習慣上,稱這種數值或符號(串)所組成的空間爲模式空間。爲了從這些數字或符號(串)中抽取出對識別有效的信息,必須對它進行處理,其中包括消除噪聲,排除不相干的信號以及與對象的性質和採用的識別方法密切相關的特徵的計算(如表徵物體的形狀、周長、面積等等)以及必要的變換(如爲獲得信號功率譜所進行的快速傅里葉變換)等。而後經過特徵選擇和提取或基元選擇造成模式的特徵空間。之後的模式分類或模型匹配就在特徵空間的基礎上進行。系統的輸出或者是對象所屬的類型或者是模型數據庫中與對象最類似的模型編號。針對不一樣應用目的,這三部分的內容能夠有很大的差異,特別是在數據處理和識別這兩部分,爲了提升識別結果的可靠性每每須要加入知識庫(規則)以對可能產生的錯誤進行修正,或經過引入限制條件大大縮小待識別模式在模型庫中的搜索空間,以減小匹配計算量。在某些具體應用中,如機器視覺,除了要給出被識別對象是什麼物體外,還要求出該物體所處的位置和姿態以引導機器人的工做。
1.4.3 模式識別在實際中的應用
模式識別[5]已經在天氣預報、衛星航空圖片解釋、工業產品檢測、字符識別、語音識別、指紋識別、醫學圖像分析等許多方面獲得了成功的應用。全部這些應用都是和問題的性質密切不可分的,至今尚未發展成統一的、有效的可應用於全部的模式識別的理論。當前的一種廣泛見解是不存在對全部的模式識別問題都使用的單一模型和解決識別問題的單一技術,咱們如今擁有的是一個工具袋,咱們所要作的是結合具體問題把統計的和句法(結構)的識別方法結合起來,把統計模式識別或句法模式識別與人工智能中的啓發式搜索結合起來,把人工神經元網絡與各類以有技術以及人工智能中的專家系統,不肯定方法結合起來,深刻掌握各類工具的效能和應用的可能性,互相取長補短,開創模式識別應用的新局面。
2 預處理與算法研究
2.1 圖像的預處理
首先多找幾種形態萬千的葉子,經過數碼相機獲取到某個葉子的平面圖形,爲了不一些外界干擾信息,在作這些預處理時,把葉子平鋪在白色背景的紙上。使獲得的圖片儘可能保持葉子的完整形狀。圖像的預處理工做有不少,除噪聲,抗干擾等等,所以首先咱們得對圖像進行一些必要的預處理,以避免爲後面的工做帶來沒必要要的麻煩,預處理的好壞直接影響到圖像處理工做,固然最好的預處理就是沒有預處理。
2.2 數字圖像處理方法
2.2.1 二值處理
二值化[7]是預處理中最關鍵的步驟,由於它直接產生可以被分合算法使用的二值化圖像。能夠說,二值化結果的好壞決定了分合算法結果的好壞,從而決定了葉子輪廓定位可否成功。
二值化的方法舉不勝舉[10],但均可以分爲取全局閾值的二值化和取局部閾值的二值化兩大類。
取全局閾值的二值化方法中,有一種叫作「組內方差最小化方法」,由Otsu於1979年提出。它的思路是,最好的閾值應該使得被閾值分開的兩組的方差的加權和達到最小,其中某組的加權係數就是該組的機率(其實就是該組像素數目佔總像素數目的比例)。
設全部像素被閾值t分爲兩組,灰度≤t的稱做組1,灰度>t的稱做組2;σ12(t),σ22(t)是1組和2組各自的方差;q1(t),q2(t)是1組和2組各自的機率;μ1(t),μ2(t)是1組和2組各自的灰度平均值。定義組內方差σW2(t)爲這兩個組的方差的加權和:
全部像素的平均灰度和方差記作μ和σ2。有下面的關係式成立:
這個全局取閾值方法經常能夠獲得不錯的效果。很是適合葉子定位的應用。可是這樣對輪廓的提取仍是有點不大好作,因此我以組內方差最小化方法爲基礎,構造了一種局域取閾值的方法。其思路是:首先對整幅圖像用組內方差最小化方法求出閾值,並記錄下組間方差。而後把整幅圖像劃分爲m×n個正方形,每一個正方形邊長都爲十幾個像素量級。對每一個正方形的子圖像按組內方差最小化方法求出一個閾值和一個組間方差。最後某一個正方形子圖像二值化所使用的閾值是由全局閾值和局域閾值,以全局組間方差和局域組間方差做爲權重,再加上事先指定的加大全局閾值權重的因子,綜合計算出來。顯然全局閾值應該佔到絕大部分的比重,由於正方形子圖內的像素分部可能與全局分佈極不相同,甚至出現全是單一灰度的極端情形。若是僅僅用子圖的像素分佈來決定子圖使用的閾值,那麼各個子圖取的閾值就會各自相差很大,致使結果圖像零亂破碎,沒法使用。
該局域取閾值二值化方法有邊界效應的缺陷。所謂邊界效應,是指因爲相鄰兩個正方形子圖所取閾值不一樣,形成邊界兩邊原本灰度變化緩慢的像素有可能一邊被二值化成黑色,一邊被二值化成白色,造成突變。
2.2.2 模糊模式識別算法
模糊模式識別:模糊識別的理論基礎是模糊數學。從識別模式的識別過程來說, 模糊模式識別的方法能夠分爲兩種: 直接方法和間接方法. 直接方法按最大隸屬原則歸類, 間接方法按擇近原則歸類。
模糊模式識別[12]的直接方法:
設U 爲全體被識別對象的集合, A~1 , A~2 ,⋯, A~n 是論域U 的n 個模糊子集(模糊模式) .如今要對一個肯定的對象u0 ∈ U 進行識別.此時模式A~1 ⋯A~n 是模糊的, 可是具體的對象u0 是清楚的, 這時要用「 最大隸屬原則」歸類.最大隸屬原則:設A~1 , A~2 , ⋯, A~n 是論域U 上的n 個模糊子集, u0 是U 的固定元素,若μA~i( u0) = max (A~1( u0) ,μA~2( u0) ⋯μA~n( u0) ) 則認爲u0 相對隸屬於模糊子集A~i這種直接由計算元素的隸屬函數來判斷具體對象歸屬的方法即爲模糊模式識別的直接方法, 其效果顯然依賴於創建模式隸屬函數的技巧.創建隸屬函數,模糊模式識別的直接方法的首要問題是肯定隸屬函數。合理地肯定出隸屬函數常採用模糊統計、模糊分析, 經驗評分等方法, 隸屬函數要通過檢驗, 並在檢驗中加以調整, 以提升識別的有效性.
2.2.3 邊緣檢測與輪廓提取
邊緣檢測是圖像處理中的重要內容,邊緣是圖像的最基本特徵.所謂邊緣就是指周圍像素灰度有階躍變化或屋頂變化的那些像素的集合.Poggoi等在論文中說:「邊緣或許對應着圖像中物體(的邊界)或許並沒用對應着圖像中物體(的邊界),可是邊緣具備十分使人滿意的性質,它能大大地減小所要處理的信息可是又保留了圖像中物體的形狀信息。」並定義邊緣檢測爲「主要是(圖像的)灰度變化的度量、檢測和定位」。邊緣與圖像中物體的邊界有關但又是不一樣的[3]。邊緣反映的是圖像灰度的不連續性[13]。
緣是指周圍像素灰度有階躍變化或屋頂變化的那些像素的集合。Poggio等在[42]中說:「邊緣或許對應着圖像中物體(的邊界)或許並沒用對應着圖像中物體(的邊界),可是邊緣具備十分使人滿意的性質,它能大大減小索要處理的信息可是又保留了圖像中物體的形狀信息」。
常見的邊緣點有3種。第一種是階梯形邊緣(Step-edge),即從一個灰度到比它高好多的另外一個灰度。第二種是屋頂型邊緣(Roof-edge)它的灰度是慢慢增長到必定程度而後慢慢減小。還有一種是線性邊緣(Line-edge),它的灰度從一個級別跳到另外一個灰度級別以後而後回來。
邊緣在邊界檢測、圖像分割、模式識別、機器視覺等中有很重要的做用。
邊緣是邊界檢測的重要基礎,也是外形檢測的基礎。邊緣普遍存在於物體與背景之間、物體與物體之間,基元與基元之間,所以它也是圖像分割所依賴的重要特徵。
邊緣檢測對於物體的識別也是很重要的。主要有如下幾個理由:首先人眼經過追蹤未知物體的輪廓(輪廓是由一段段的邊緣片斷組成的)而掃視一個未知的物體。第二,經驗告訴咱們:若是咱們可以成功地獲得圖像的輪廓,那麼圖像分析就會大大簡化,圖像識別就會容易不少。第三,不少圖像並無具備的物體,對這些圖像的理解取決於它們的紋理性質,而提取這些紋理性質與邊緣檢測有極其密切的關係。
計算機視覺處理能夠看做是爲了實現某一個任務從包含有大量的不相關的變量中抽取不變量,總之就是簡化信息。這就意味着要扔掉一些沒必要要的信息而儘量理由物體的不變性質。而邊緣就是最重要的不變性質:光線的變化顯著地影響了一個區域的外觀,可是不會改變它的邊緣。更重要的是人的視覺系統也是對邊緣很敏感的。
邊緣檢測的方法主要有如下幾種:
第一種檢測梯度的最大值。因爲邊緣發生在圖像灰度變化比較大的地方,對應連續情形就是說函數梯度較大的地方,因此研究比較好的求導算子就成爲一種思路。Roberts算子、Prewitt算子和Soble算子等就是比較簡單而經常使用的例子。還有一種比較直觀的方法就是利用當前像素領域中的一些像素值擬合一個曲面,而後求這個連續曲面在當前像素處梯度。從統計角度來講,咱們能夠經過迴歸分析獲得一個曲面,而後也能夠作相似的處理
第二種是檢測二階導數的零交叉點。這是由於緣處的梯度取得最大值(正的或者負的),也就是灰度圖像的拐點是邊緣。從分析學上咱們知道,拐點處函數的二階導數是0。
第三種,統計型方法。好比說利用假設檢驗來檢測邊緣。
第四種,小波多尺度邊緣檢測。
一些經典的邊緣檢測的算法包括:梯度算子、Sobel算子、Kirsh算子、Laplacian算子、Marr算子。
3.2.4 信息存儲
在把圖像信息提取出來之後,爲了之後能很好的比較爲做爲一個模版信息庫,就得把圖像信息存儲起來,因爲圖片的格式各不一樣,所以在選擇圖像格式時也有必定的要求,由上面的圖片格式分析得出,BMP位圖是最適合爲圖像處理時應用的圖形格式工程應用中常常要處理256級的灰度BMP圖像,如經過黑白採集卡採集獲得的圖像。BMP灰度圖像做爲Windows環境下主要的圖像格式之一,以其格式簡單,適應性強而倍受歡迎。
3 算法實現
3.1 分析實際工做過程
首先,咱們要作的是將葉子進行灰度處理,灰度處理要用到它的極端形式,也就是咱們說的二值化處理了,接着就是對通過處理的二值圖進行邊緣檢測,提取它的輪廓,而後將其信息存儲到信息庫裏保存起來。在比較時,也就是對剛纔的過程進行反操做。
3.2 算法實現過程
3.2.1 掏空內部點算法的基本思想
掏空內部點的算法很簡單,首先獲得圖像的黑白二值圖,獲得的圖像設黑色爲0,白色爲1。而後咱們首先按從上往下,從左往右如今找到其第一個黑點,也就是0點,而後找其點的8個方位的點,每一個點都與0點相比較,若是全部值都相等,那麼這個點就爲此圖的內部點,就去掉此點信息,將此點的值設爲1,而後從新尋找新的內部點,若是不是全部的都相等,那麼直接尋找下一個點信息。
3.2.2 邊界跟蹤算法的基本思想
一個邊界上的像素能夠用一個通路來遍歷,而且總能夠爲這一遍歷選擇一條封閉的通路。本文采用的邊緣提取算法是一種特定對邊界進行自動跟蹤的遍歷形式1。用N-近鄰的概念,對N的數值運算都假定爲模8運算。N近鄰有兩種類型,一是直接近鄰,即兩個像素的相應單元共有一條邊。一是非直接近鄰,即兩個像素相應單元僅在一個角上相接觸。
算法描述:
設定:F是邊界點集合R的初始點,N是其近鄰被檢查的當前點。S是用圖6中編碼所表示的。
搜索方向START是一個標誌,當跟蹤開始時爲真,FOUND也是一個標誌,當找到邊界上的下一點時爲真。
1)選邊界上一點F,
2)將當前點N置爲F,搜索方向S置爲6,標誌START置爲TRUE。
3)當N與F不一樣或標誌START爲TRUE時,作4)~11)步。
4)Begin置標誌FOUND爲FALSE。
5)While FOUND爲FALSE時,作6)~10)步。
Begin 搜索(S-1)
6)If N的(S-1)-近鄰B是在R內,then
Begin
7)置N爲B,S爲S–2。置FOUND爲TRUE。
End
8)Else
Begin
IF N的S-近鄰B是在R內,then
置N爲B,同時置FOUND爲TRUE。
9)ELSE
Begin
IF N的(S+1)-近鄰是在R內,then
置N爲B,並置FOUND爲TRUE。
10)Else將S增長2。
End
End
11)置START爲FALSE。
End
12)算法結束。
本算法以封閉的通路來遍歷。若是不是封閉的通路,該算法也老是按封閉的通路來遍歷。好比一條線段AB,該算法實現的時候,是從A遍歷到B,在B點又回到A,也造成一個封閉的通路,這時起點和終點相同,算法結束。現以圖6爲例說明本算法。
1)選定邊界上具備表明性的8個點組成邊界集合R={A, B, C, D, E, F, G, H},如圖7a假定它是圖像的邊界線,圖中箭頭指向爲下一邊界點的方向(按圖6 的編碼方向)。設定A爲遍歷邊界的起始點。
2)當前點A,搜索S = 6 方向,標誌START = TRUE。
3)A有8個方向,根據本算法,首先判斷A 的(S - 1) = 5這個方向的點是否爲邊界點, 其結果爲否; 再判斷A 的S = 6 方向的點, 它也不是邊界點再判斷( S + 1) = 7 方向的點,它正是邊界點B ,那麼置FOUND = TRUE ,代表找到邊界點。 而後再沿着這一點繼續找下一邊界點,開始下一輪循環
4)對B點,先判斷B 的(S - 1) = 5 這個方向的點是否爲邊界點,其結果爲否; 再判斷B 的S = 6 方向的點,它是邊界點C。 這時置FOUND = TRUE ,結束本次循環,再也不判斷其它方向,開始找C 的下一邊界點。 如圖7b ;
5)在C 點,第一次判斷(S - 1) = 5 這個方向的點就是邊界點D ,此時需置S = S - 2 = 6 - 2 =4 ,搜索方向改變了。 一樣置FOUND = TURE。 如圖7c ;
6)對於D 點,一樣先判斷(S - 1) 這個方向,但此時方向已經改變了,(S - 1) = 4 - 1 = 3 ,此方向上的點不是邊界點,再檢查S = 4 方向,此方向的E 點是邊界,FOUND = TRUE如圖7d ;
7) E 點第一次判斷(S - 1) = 3 這個方向,就找到邊界點F ,又置S = S - 2 = 4 - 2 = 2 ,搜索方向再一次改變,FOUND = TRUE。 如圖7e ;
8) 在F 點,判斷(S - 1) = 1 方向的點,不是邊界點,再判斷S = 2 方向,G正是邊界點,置FOUND = TRUE1 如圖7f ;
9) 在G點,判斷(S - 1) = 1 方向的點,H 是邊界點,置S = S - 2 = 0 ,FOUND = TRUE1 如圖7g ;
10) 在H 點,判斷(S - 1) = - 1 ,本算法對N - 近鄰規定爲模8 運算,所以- 1 模8運算後爲7 ,這個方向的點非邊界點,再判斷S = 0 的點,A 點正是這個方向的邊界點,終點和起點相同,算法結束
3.2.3 部分實現代碼
首先讀取葉子圖像信息[1]
if(this.openFileDialog.ShowDialog()==DialogResult.OK)
{
bmp=new Bitmap(this.openFileDialog.FileName);
bmp2=new Bitmap(this.openFileDialog.FileName);
bmp3=new Bitmap(this.openFileDialog.FileName);
bmp4=new Bitmap(this.openFileDialog.FileName);
bmp5=new Bitmap(this.openFileDialog.FileName);
this.pictureBox1.Image=bmp;
pictureBox1.Visible=true;
}
接着對葉子進行灰度處理,咱們先不對其進行二值處理能夠看到如下結果
for(int i=0;i
{
for(int j=0;j
{
Color Color1=bmp.GetPixel(i,j);
int red=Convert.ToInt32((30*Color1.R+59*Color1.G+11*Color1.B)/3);
bmp2.SetPixel(i,j,Color.FromArgb(red,red,red));
}
}
this.pictureBox2.Image=bmp2;
由此咱們能夠看出,只進行通常的灰度處理並沒能達到咱們下一步進行輪廓提取的要求[2],由於,圖片的信息還很朦朧,圖像像素之間的色差還不明顯,所以,在此基礎上,咱們改進下,直接對其進行了二值化處理,其算法改進以下:
for(int i=0;i
{
for(int j=0;j
{
Color Color1=bmp.GetPixel(i,j);
int red=Convert.ToInt32((Color1.R+Color1.G+Color1.B)/3);
if(red>128) //若是大於128將其設爲白色255
//精確灰度處理算法 0.3*R+0.59*G+0.11*B
//優化算法(30*R+59*G+11*B)/100
red=255;
else
red=0;
bmp2.SetPixel(i,j,Color.FromArgb(red,red,red));
將圖片信息暫時填充到內存中
}
}
此時,咱們獲得了一個像素色差很是大的圖,爲下一步進行輪廓的提取提供了頗有利的條件,在輪廓提取方面,根據模式識別書上提供的一些算法。
掏空內部點的算法:
for(int i=1;i
{
for(int j=1;j
{
Color Color0=bmp2.GetPixel(i,j);
Color Color1=bmp2.GetPixel(i,j-1);
Color Color2=bmp2.GetPixel(i-1,j);
Color Color3=bmp2.GetPixel(i+1,j);
Color Color4=bmp2.GetPixel(i,j+1);
int red;
if(Color0.B==0)
{
if(Math.Abs(Color1.R-Color0.R)==0&&
Math.Abs(Color2.R-Color0.R)==0&&
Math.Abs(Co lor3.R-Color0.R)==0&&
Math.Abs(Color4.R-Color0.R)==0)
red=255;
else
red=0;
CountBmp+=1;
}
else
red=255;
bmp3.SetPixel(i,j,Color.FromArgb(red,red,red));
圖10 掏空算法結果
其中if語句就是判斷某個點的周圍4個點是否是都是黑點,原思路用了比較8個點。
4 小結分析
1) 對於使用第一種掏空內部點的算法,其好處是算法比較簡單,容易實現,可是因爲處理時的for循環比較多,常常要重複使用,所以耽擱了處理時間,只適合處理比較小的圖片,這一部分還得進一步的增強改進。另外因爲這個算法的侷限性,它只是掏空所在圖形中全部與其他8點相同的點,因此沒有考慮到圖形的完整邊緣,所以,若是取二值圖時,葉子圖形內部出現白色空點時,仍是被處理爲一個新的輪廓,這樣提取出來的輪廓就不只僅是葉子的輪廓,還有一點白色空點被讀取進來了。
2) 對於使用第二種邊界跟蹤的算法,是對邊界上某一點的8個方向進行搜索,必能在一個方向上找到邊界上與之相鄰的下一點,一旦找到,設一標誌,並記錄搜索到的本邊界點的方向,以便沿此方向搜索下一點1本算法以3個方向爲一組來對邊界上某一點的8個方向進行檢測的,如圖6,8個方向分四組{5,6,7},{3,4,5},{1,2,3},{7,0,1}1先搜索6方向。
(1).若在6方向上找到邊界點,那麼繼續沿着此方向找;
(2).若在5方向找到邊界點,下次改變方向,在第二組{3,4,5}方向找其它的點1 同理,每組中在第一個方向上5,3,1,7找到邊界點,都改變方向,以提升下一邊界點的搜索速度。
(3).若5,6,7方向都沒找到,那麼邊界的走向是向上的,本算法就沿着(7,0,1),(1,2,3),(3,4,5),(5,6,7)方向搜索。
與第一種算法比較起來本算法執行速度快,效率高,對邊界點的提取能按着邊界的走向及時調整方向自動搜索,並且不會出現向邊界相反的方向查找的可能,也就不會出現圖像二值處理不完美時,帶來圖片內部的空點被識別進去,極大的減小了偏差的出現。
隨着國家信息化進程的加速,圖像識別的應用需求將愈來愈普遍,所以應當增強這方面的研究工做。應用系統的性能的關鍵與瓶頸仍然在圖像識別核心算法性能上,最終目標是研究零誤識率和低拒識率的高速識別算法
5 參考文獻
[1] 劉洪成編著.C# 高級編程學習捷徑.北京:清華大學出版社,2003年.
[2] Karli Watso, Marco Bellinaso 等著.康博譯.C#入門經典:第16章 GDI+簡介.北京:清華大學出版社,2002年4月.
[3] H.M.Deitel, P.J.Deitel, J.Listfield, T.R.Nieto, C.Yaeger, M.Zlatkina著.葛昊晗,湯涌濤,李強等譯.C#大學教程:第16章 圖形和多媒體.北京:清華大學出版社,2003年11月.
[4] 曹慧娟主編.植物學.北京:中國林業出版社,1992年4月.
[5] 王士同主編.人工智能教程.北京:電子工業出版社,2001年10月.
[6] 林福宗主編.圖像文件格式大全.北京:清華大學出版社,1998年.
[7] 霍宏濤主編.數字圖像處理.北京:北京理工大學出版社,2002年9月.
[8] 邊肇祺,張學工等編著. 模式識別(第二版). 北京:清華大學出版社,2000.
[9] 張宏林,蔡銳編著.Visual C++數字圖像模式識別技術及工程實踐.人民郵電出版社發行,2003年1月.
[10] 陳輝編著.二值圖並序交互細化方法.山東工業大學學報,1997年7月.