圖像識別初探?
??
目錄
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月.
posted on 2006-12-01 10:24
happytian 閱讀(994)
評論(0) 編輯 收藏