趙 方,石 晟,閆 民
1.北京林業(yè)大學 信息學院,北京 100083
2.北京林業(yè)大學 工學院,北京 100083
農(nóng)林業(yè)隨著現(xiàn)代信息技術的發(fā)展已經(jīng)進入信息化時代,隨著精準農(nóng)業(yè),精準林業(yè)的概念提出,針對傳統(tǒng)林業(yè)作業(yè)的改造也在不斷深入。傳統(tǒng)林業(yè)外業(yè)進行標本采集費時費事,采集數(shù)字信息將成為趨勢。對比于傳統(tǒng)的粗放式管理模式,基于圖像識別、機器視覺的新型葉片識別技術將大大提高作業(yè)的精細度、準確度,在使得資料更加完備和細致的同時,減少林業(yè)外業(yè)人員的工作負荷和知識要求,同時降低人為失誤率。
真實拍攝的葉片即使采用純色背景做墊襯,也會因為光照不均勻,擺放不平整等因素產(chǎn)生很多陰影干擾。此外,由于墊襯物的紋理以及細小痕跡也會對實際采集的葉片圖像造成干擾,因此要切實進行實用的葉片識別系統(tǒng)開發(fā),必須要能夠處理掉這些光影和雜色干擾。文章中將先針對如何去除陰影及雜色干擾進行成果的介紹。
此外,對于同類樹木的多個葉片,存在著具體形狀及紋理上的偏差,因此不適用于確定形狀的識別算法。且葉片本身所含有的信息量比較復雜,大體包括葉形、葉脈、葉邊緣等信息,通常的識別算法只要抓住其中一組信息即可達到一定的識別率,但若要區(qū)分得更精細,需要提取盡可能多的葉片形態(tài)學特征,本文將就如何進行全面的葉片形態(tài)學特征抽取進行研究,并介紹其成果。
國外自1986年開始研究如何利用圖像特征對葉片進行分類,1986年Ingrouille和Laird利用27種葉形特征對橡樹進行了分類[1],Guye等人則通過拓撲不變量如伸長度、緊密度和中心慣性矩生長初期的植物進行了有效分類[2],之后越來越多的研究人員對此課題進行了研究,用于辨別葉片所使用到的葉片圖像特征包括形態(tài)學特征(包括緊密度、圓度、伸長度、葉狀度等簡單形狀因子,葉片輪廓的曲率尺度空間計算而來的輪廓凹凸性等復雜統(tǒng)計特性,偏心率、圓形性、彎曲能量等拓撲不變量特性),色彩特征,植物學局部特征(葉脈走向,葉邊緣的葉齒)以及通過對葉片圖像進行小波變化后在頻域檢測其紋理特征等。采用的分類方法包含有k-NN(k-Nearest Neighbor)k近鄰算法,ANN(Artificial Neuron Network)人工神經(jīng)網(wǎng)絡分類算法以及SVM(Support Vector Machine)支持向量機分類算法,這些分類算法普遍可以達到70%以上的識別正確率,在某些有特定分類的葉片識別方面,準確度可以更高。
國內(nèi)的研究相對開展較晚,最早的研究開始于1994年,傅星等人對利用計算機進行植物分類開展了初步研究,達到了使用計算機對植物性狀進行自動提取和分類的結果[3]。之后多名專家學者對這一問題從各種方面進行了研究,目前比較好的研究中記錄的識別率可以達到80%以上。
基于葉片形態(tài)學進行的實驗研究也在最近幾年進展迅速,比較典型的如,國外Jyotismita Chaki和Ranjan Parekh從圖像的矩不變特征(M-I)和中心半徑(C-R)模型對葉片圖像進行建模識別,得到了90%以上的識別率[4],國內(nèi)的侯銅,姚立紅,闞江明等人利用葉片輪廓計算得到葉片的矩形度,圓形度,偏心率等幾何特征和多個圖像不變矩作為特征值,利用神經(jīng)網(wǎng)絡進行分類識別,也獲得了92%的高識別率[5]。
目前的大部分葉片識別研究專注于無背景干擾的單一葉片識別,并未考慮光線復雜的情況下各類陰影及背景雜色的干擾,也只有少數(shù)研究考慮過在復雜背景中如何辨別并分隔出葉片。湯曉東等人的《復雜背景下的大豆葉片識別》[6]在研究葉片識別的時候考慮了在復雜背景下使用分水嶺的迭代算法來提取葉片,使得辨識問題更加實用,但提取的葉片種類單一,無法做到任意葉片的提取。
文章將就在真實的光照條件下拍攝的,有輕微雜色干擾的任意葉片圖像的識別算法進行研究。
本次實驗中處理的圖像,顏色存儲方式為ARGB色彩,每個通道的色彩占據(jù)8位,圖片格式為JPG。圖片上的像素點采用通用的直角坐標系描述,以左上角點為原點,向下為Y正方向,向右為X正方向。
如圖1,其中橢圓形的節(jié)點表示數(shù)據(jù),方形的節(jié)點表示處理的流程,算法針對圖片數(shù)據(jù)進行,最終得到圖像特征數(shù)據(jù)。其中灰色加重部分為本次實驗未完成的一個流程。
圖1 葉片信息提取算法總體流程
整體葉片數(shù)據(jù)抽取的算法實現(xiàn)如圖1,整套算法分為:圖像預處理、圖像分割、葉形特征值計算、葉脈特征值計算、可信度計算以上五部分流程組成,下面將就每一部分功能和相關算法進行詳細介紹。
3.1.1 圖像預處理
圖像預處理的工作主要是為了兩個方面:(1)去除雜色干擾;(2)評估圖像的精細度。
由于葉片圖像通常以綠色為主,故針對此信息,將原始圖像的彩色數(shù)值按照綠色和非綠色進行區(qū)分,強化綠色分量,弱化其他分量,從而使得對比更加強烈,具體做法:
(1)記a為圖像上坐標為(x,y)的像素點的色彩值。
(2)記r=(a&0x00FF0000)>>16,g=(a&0x0000FF00)>>8,b=a&0x000000FF,其中>>為按位右移運算符,&為按位與運算
(3)變換后圖像對應(x,y)點上色彩值為a0=g<<16+b<<7+r<<3,其中<<為按位左移運算符。
可以由算法看出,經(jīng)過這樣處理后,得到的顏色數(shù)值,綠色分量得到了增強,原來包含綠色分量的色彩點的數(shù)值會變得很大,而不包含綠色分量的色彩,則由于藍色和紅色分量色彩均右移比左移多一位,故數(shù)值會變得更小。經(jīng)過這樣的處理后,可以確保圖像有更大的區(qū)分度。
圖像的精細度則用圖像的長度w,圖像的寬度h和空白像素數(shù)目e決定,圖像精細度是為了確保圖像中某些精細結構計算可以有意義,因為當圖像過小的時候,圖像的角點信息,以及葉脈細節(jié)信息會抽取出異常值。圖像精細度r定義為0到1的小數(shù),其值越小,精細度越差,其計算公式如下:
公式中w為圖像長度,h為圖像寬度(默認w≥h)。e為空白像素數(shù)目,空白像素數(shù)目在后續(xù)計算中可以得到,圖像面積s減去葉片面積即為空白像素數(shù)目。
預處理過程中,也會計算圖像的各種相關參數(shù),以便于后續(xù)使用。
3.1.2 圖像分割
圖像分割的目的也有兩個:(1)分割開葉片區(qū)域,剔除掉不是葉片的雜色干擾區(qū)域;(2)確認葉片的邊界以及葉脈。圖像分割的結果對于后續(xù)的特征抽取算法至關重要,圖像分割詳細算法詳見3.2節(jié)。
3.1.3 葉形特征計算
選取特征值方面前人已經(jīng)有過很多成熟的研究,如祁亨年,壽韜,金水虎的《基于葉片特征的計算機輔助植物識別模型》[7]一文中定義的圓形度,王曉峰,黃德雙,杜吉祥的《葉片圖像特征提取與識別技術的研究》[8]中的面積凹凸比和周長凹凸比實際效果很好,本文中的殘缺度和緊致度等指標借鑒了這幾個特征的設計。
本課題采用的葉片葉形特征包含:
(1)凸包虧格Ei
葉片的凸包定義為包圍葉片邊緣的最小凸多邊形,虧格是拓撲學中表示連通,可定向曲面代表沿閉簡單曲線切開但不切斷曲面的最大曲線條數(shù)。葉片凸包的虧格即為此特征值。針對葉片圖像,虧格可以表示葉片被凸包包圍后,凸包和葉片邊緣組成的多邊形有多少個孔洞。
(2)殘缺度Sx
葉片凸包面積與實際面積的比值定義為葉片的殘缺度。
(3)緊致度C
葉片葉邊緣的周長的平方與葉片面積的比值定義為葉片的緊致度。
(4)長短軸比值Li
葉片的長軸及短軸表征了葉片的粗細程度,針對簡單的橢圓形,長條形葉片和復雜的五角星形葉片,長短軸定義不同,具體的定義及算法見3.3.6節(jié)。長短軸比值即為長軸除以短軸所得的數(shù)值。
(5)角點數(shù)目K
葉邊緣上的角點的個數(shù)為角點數(shù)目特征值。
以上五組特征值區(qū)分度較大,其詳細算法見3.3節(jié)。
3.1.4 葉脈特征計算
本課題采用的葉脈特征包含:
(1)主脈條數(shù)Lx
在識別算法中,葉脈長度超過葉片長軸70%的被認為是主脈,側脈通常不會超過這個閾值,細脈無法準確識別,因此會在圖像分割時被去除掉。
(2)葉脈類型T
根據(jù)主脈的交匯情況可以判斷葉片的葉脈類型,文章主要進行網(wǎng)狀脈和平行脈的判別,其他細分類型暫時無法區(qū)分。
(3)最長最短主葉脈比值Lv
當主脈不止一條的時候,最長的主脈與最短的主脈的值定位為此特征值,主脈只有一條時,此特征值為1。
以上三種特征是可以由圖像普遍得出的葉脈特征值,其詳細算法見3.4節(jié)。
3.1.5 可信度判定
可信度判定,主要用來判斷圖像信息抽取得到的特征值當中易受到圖像精細度影響的特征的可靠程度。易受圖像精細度影響的特征包括角點數(shù)目K,主脈條數(shù)Lx和最長最短主葉脈比值Lu三個特征。
可信度根據(jù)圖像精細度計算,實驗中若圖像精細度r不超過0.75,則認為無法抽取到葉脈特征和葉邊緣的角點特征,從而避免因為圖像的原因,部分特征值計算出錯誤的結果,造成抽取的向量中出現(xiàn)異常值。
本次實驗的區(qū)域分割算法分為四個步驟。
步驟1利用Canny算法抽取圖像的邊緣。
若將圖像視為一個二維函數(shù)a=f(x,y),a為x,y坐標上的色彩數(shù)值,則可以知道,在顏色變化的地方,該函數(shù)的導數(shù)將很大,而對于周圍點,導數(shù)則很小,針對這一特性對圖像進行拉普拉斯變換,既可以得到邊界曲線。Canny對此算法做了改進[9],增加了一個濾波過程,使得算法更加可靠。
圖2為未經(jīng)過任何處理的原始葉片圖像。
圖2 葉片原始圖像
可以看到光線并不均勻,并且右側有部分顆粒狀的紋理干擾。
經(jīng)過圖片預處理和Canny算法后,可以得到其邊界如圖3。
圖3 經(jīng)過Canny邊緣檢測處理后圖像
得到的邊界存儲于本文設計的數(shù)據(jù)結構中,由于有雜色干擾,故本文的數(shù)據(jù)結構中也包含這些干擾點。
步驟2連通曲線抽取。
在此步驟中需要針對上一步驟所得到的邊界點集,計算所有連通曲線Ai的集合,由于一張圖片除了包含葉片邊緣的連通曲線,還可能包含葉脈連通線,以及其他的各種雜色及干擾組成的小連通曲線,故i>1。
對于圖3的葉片,其邊界點集合為C0(包括部分干擾點),則可以采用連通曲線掃描算法進行連通曲線的確定。
算法1連通曲線掃描算法
(1)針對C0中的每個點進行遍歷,遍歷順序先沿X正方向,再沿Y正方向,對于C0中點A。
①若A左上方連續(xù)2×2區(qū)域中的點均未在C0內(nèi),則表明點A為一個新的連通曲線中的一個點,則連通曲線總數(shù)n加1,并創(chuàng)建記錄連通曲線點集的數(shù)組Ai(其中i為持續(xù)遞增的序號),并將點A加入該連通曲線數(shù)組Ai中。
②否則,表明A與其左上2×2區(qū)域中的點在同一個連通曲線Ax內(nèi),則將A及和A同在一個連通曲線中的所有點,均加入到那個已記錄的連通曲線數(shù)組Ax中。
③如果A未加入Ax前已經(jīng)有所在的連通曲線,則銷毀那個曲線數(shù)組的記錄,并將連通曲線總數(shù)n減1。
(2)繼續(xù)掃描,直到掃描完C0中所有點。
(3)至此,將得到n個包含邊界點的連通曲線的數(shù)組Ai,其中 0<i≤n。
進行完上一步驟后,可以得到若干個包含著連接曲線的點的數(shù)組集合:{A0,A1,…,An}, 這些連通曲線有的尺寸很小,屬于雜色干擾,也可能是不清晰的葉脈細脈圖像,這些圖像隨機性較大,會干擾后續(xù)計算,因此需要針對集合中每一個數(shù)組Ai進行過濾干擾曲線的算法。
算法2過濾干擾曲線算法
(1)計算整個圖片像素點的數(shù)目:s=w×h,其中w和h分別為圖片的長和寬,記閾值T=s×0.000 2,M=s×0.000 5(可以針對參數(shù)進行調(diào)整,公式中參數(shù)為實驗中采用值)。
(2)若Ai中元素個數(shù)不超過閾值T,則認為該連通曲線為雜色斑點的邊緣曲線或與主脈斷開的側脈及細脈曲線,刪除Ai。
(3)針對沒有被篩除的連通曲線,記曲線中所有點的x坐標的最大值Xmax,最小值Xmin,y值的最大值Ymax,最小值Ymin,計算L=max{(Xmax-Xmin),(Ymax-Ymin)},S0=L2,若S0小于閾值M,則認為該連通曲線為若干雜色點組成的色塊,則刪除Ai。
上述算法本質是刪除點數(shù)過少或面積過小的連通曲線,減少后續(xù)運算的運算量。
由最后實驗結果驗證,完成此步驟后,基本大部分的干擾曲線均被去除。剩余的部分為葉脈和葉片,以及一些較大的背景形狀,多數(shù)情況下背景形狀與葉片的輪廓并不連通,個別情況下連接可以通過后續(xù)算法區(qū)分。
步驟3連通域抽取。
上一步驟所獲取到的連通曲線集合,包含了不閉合的葉脈和大塊的雜色塊邊緣以及葉片的輪廓,這一步驟中將利用連通域抽取算法抽取出閉合的葉邊緣曲線所構成的連通域。
算法3連通域抽取算法
(1)對于剩余的每段連通曲線Ai,記Ai中元素個數(shù)為N,記閾值T=N/10,取算法2中得到的L,記閾值N=L/50,建立一個棧S,一個分支點集合數(shù)組Ps(后續(xù)計算會使用)。
(2)取Ai中的第一個點P0(X0,Y0)開始,對P0執(zhí)行步驟(3)。
(3)對Ai中的某個點Px,將Px進棧,尋找以其為中心周圍4×4區(qū)域內(nèi)的相鄰點。
①若存在多個鄰接點,則先取Y最小的,若Y相同,則先取X最小的,并將Px存入Ps中,記取到的點為Px+1,若僅存在一個相鄰點,則取此點為Px+1,對于Px+1,若Px+1不在棧內(nèi),則對Px+1執(zhí)行步驟(3)。否則,創(chuàng)建一個存儲連通域點集的數(shù)組Bj,復制從棧頂?shù)絇x+1元素的所有元素進入Bj,若Bj中元素個數(shù)大于T,則保留Bj,并將該連通曲線Ai內(nèi)包含的連通域變量n加1,否則銷毀Bj。
重復此步驟直到所有Px的相鄰點均已處理,Px從棧頂退棧,繼續(xù)計算。
②若Px不存在鄰接點,若棧內(nèi)元素數(shù)目超過閾值T,且Px距離棧底元素的距離小于閾值N,則創(chuàng)建一個存儲連通域點集的數(shù)組Bj,復制棧頂?shù)綏5椎乃性剡MBj,并將該曲線內(nèi)包含的連通域變量n加1。
Px從棧頂退棧,繼續(xù)計算。
(4)若棧內(nèi)元素總數(shù)超過閾值T,則計算棧頂和棧底元素的距離,若距離小于閾值N,則創(chuàng)建一個存儲連通域點集的數(shù)組Bj,復制棧頂?shù)綏5椎乃性剡MBj,并將該曲線內(nèi)包含的連通域變量n加1。
(5)進行上述步驟直到???。此時由算法可知,所有的連通域曲線均記錄在Bi數(shù)組中,取所有數(shù)組中包含最多點數(shù)的數(shù)組作為葉片的外邊緣連通域E,算法結束。
經(jīng)過以上步驟算法后的圖像如圖4。
圖4 連通域抽取算算法得到的葉片外邊緣
步驟4去除圖片上的葉柄和雜色塊干擾。
在算法3中找到的連通域E,依然存在以下問題而無法用于直接計算:
由于受到葉柄的擺放方向以及葉柄陰影等因素的影響,葉片形狀在葉柄部分隨機性較大。葉柄部分對識別并無貢獻,還會造成葉形判斷上的干擾。
一些背景上的干擾會和葉片連在一起(少數(shù)情況),造成葉片的小尖角等不良干擾。
因此需要對所得的連通域點集E進行去除雜色塊和葉柄的干擾的算法。
去除葉柄和粘連在葉邊緣上的雜色塊,采用算法思想為讓曲線上每個點向該點的法線方向收縮,則最終葉片和葉柄以及雜色干擾會分解成不相連的部分,但由于法向量計算時計算量較大,故采用了近似的向量相加的算法,也可以達到向內(nèi)收縮的效果,且效率較高。
算法4連通域變形算法
(1)建立記錄點的數(shù)組Bs。
(2)針對E當中的每一個元素P(x,y)。
(3)若P不在算法3中記錄的Ps集合內(nèi),取其相鄰的左右兩個點P1,P2,記向量PP1,PP2,分別取和PP1,PP2相 等 長 度 且 分 別 垂 直 于PP1,PP2的 向 量p0,p1, 記Px=P0+P1,設px的坐標為 (x0,y0), 則點P向內(nèi)收縮得到的新點為p0(x+x0,y+y0), 將p0存入數(shù)組Bs,并記錄p0所對應的原始點P。
(4)否則,繼續(xù)其他點的計算。
(5)對Bs數(shù)組中的點重復步驟(2),重復次數(shù)為T(實驗中T為10),對得到的點集再次算法3,將得到新的邊緣數(shù)組,這次的邊緣數(shù)組將不包含葉柄和雜色塊。如圖5。
圖5 進行連通域變形后得到的葉邊緣
可以看出縮小后的雜色塊和葉柄均消失了,且邊緣變粗,因為點更密集了,針對變形得到的結果,結合算法3中得到的連通域E,可以利用以下算法得到無雜色塊和葉柄干擾的葉邊緣圖像。
算法5連通域去干擾算法
(1)找出Bs中每個點在E中對應的原點P0,將P0加入到數(shù)組B0中。
(2)檢查分支點集合Ps中每個點Px的鄰接點是否在B0中,若在將Px加入B0中。
(3)由于雜色塊被消除,葉片邊緣連接雜色快的部分會有一段缺口,這段缺口可以用直線進行修補。對所有被加入到B0中的Ps中的點Px:
①建立一個數(shù)組A,將Px在B0中的鄰接點加入數(shù)組A。
②將Px加入數(shù)組A,尋找Px在E中而不在A中的鄰接點Px+1,若Px+1在B0中,執(zhí)行③,否則對Px+1進行②。
③將A中第一個元素和最后一個元素取出,記為a1,a2,將線段a1a2之間的所有點加入B0。
(4)所得到的B0即為后續(xù)計算所要使用的葉邊緣點集。
經(jīng)過上述過程后,原圖像圖2所得到的最終葉片邊緣圖如圖6。
圖6 最終得到的葉邊緣圖
此時,葉邊緣的信息記錄在B0中,利用葉邊緣包含葉脈這樣的關系,可以對之前得到連通曲線進行過濾,去除掉不包含在B0中曲線(邊界也不包含在B0內(nèi)),剩下的連通曲線集合即認為是葉脈曲線集合V。
葉片特征值計算需要考慮葉片旋轉和縮放的問題,再由于葉片形狀存在細節(jié)上的變動,抽取有一定區(qū)分度的特征向量有一定難度。
在葉片的識別實驗中,多采用拓撲不變量或者可以抵消掉大小和角度因素的比值作為特征量。
本次課題中采用的葉片葉形特征包含凸包虧格Ei,凸包面積與實際面積的比值Sx,緊致度C,長短軸比值Li,角點數(shù)目K等5組特征值,這五組特征值當中,虧格和角點數(shù)目為拓撲不變量,其余三組為比值,由等比例縮放的原則可以知道,這三組數(shù)也不受角度和大小的影響。
計算以上五組特征值需要計算一些其他的變量,具體算法描述如下。
3.3.1 質心 M0(xm0,ym0)的計算
計算該連通域B0內(nèi)所有點x,y坐標的算數(shù)平均值,即為質心的坐標。
3.3.2 葉邊緣長度L的計算
葉邊緣的長度等于葉片邊緣數(shù)組中點的數(shù)目,即B0中點的數(shù)目。
3.3.3 葉片面積s的計算
利用機器視覺的理論,可以得到葉片圖像和葉片實際面積存在特定的比例關系[10],而此處的葉片的面積可定義為連通域B0包含的點的數(shù)目。
算法6葉片面積算法
(1)記葉邊緣數(shù)組B0中x,y的最小,最大值分別為xa,ya,xb,yb,記面積S, 初始值為0。
(2)對線段YaYb上每一點Y0,記掃描線為直線Y=Y0,沿掃描線向右掃描,記錄掃描線上的點和B0中的點重合的次數(shù),當重合次數(shù)為奇數(shù)次時,每掃描一個點,S加1。
(3)直到掃描完區(qū)域內(nèi)的點,所得的S即為葉片的面積。
此種掃描算法較標準的向量叉積求和算法效率高一些。此算法利用了拓撲學的定理:區(qū)域內(nèi)部點引一條射線,交區(qū)域邊界奇數(shù)次,而區(qū)域外引一條射線,交區(qū)域邊界偶數(shù)次。
算法如圖7所示。
圖7 面積算法圖示
3.3.4 葉片凸包面積ss的計算
葉片凸包為包含葉片全部像素的一個最小凸多邊形,圖8展示了一個復雜葉片的凸包示意圖,黑色實線為凸包。
圖8 葉片凸包示意圖
針對點集合計算凸包的算法已經(jīng)有很成熟的Graham掃描法[11],此處不再多描述。由于凸包是標準的凸多邊形,且邊數(shù)不多,可以采用標準的叉積相加的求面積算法,此種情形下算法效率較高。
算法7凸包面積算法
(1)首先利用Graham掃描法[11]針對連通域計算凸包邊界點數(shù)組bt,掃描時按順時針進行,故bt數(shù)組中元素也按順時針順序排列。
(2)記坐標原點為O,記所求面積為S,對bt中的每個點Pi,若不是數(shù)組的最后一個點,則記Pi的下一個點為Pi+1,記向量Xi=OPi,向量Xi+1=OPi+1。
①計算x=Xi×Xi+1,令S的值等于S+X(×表示向量做叉積)。
②重復此過程直到每個點計算過。
(3)S即為所求的凸包面積。
凸包的計算是穩(wěn)定的,因為包圍平面上任意多點的最小多邊形總是存在,無論鋸齒邊,或者圓滑的邊,都可以用若干折線進行擬合,擬合的曲線即可計算面積。即使存在鋸齒邊的葉片,由于鋸齒部分雖然很不規(guī)則,但所占面積極小,也不會對凸包面積造成巨大的決定性影響,只會使得凸包面積在小范圍內(nèi)波動而已。
3.3.5 凸包虧格Ei的計算
凸包虧格為凸包與葉片邊界組成的圖形中孔洞的數(shù)目,圖8的凸包虧格為5。凸包虧格算法結果將影響后續(xù)的長短軸計算。凸包虧格的計算應排除因為毛邊葉片造成的影響。
算法8凸包虧格算法
(1)記錄算法7中所得的凸包邊界點數(shù)組bt,建立存儲虧格存在的凸包邊界數(shù)組Ed,記閾值R=w/70,w為圖片的長度,及凸包虧格為Ei,初始值為0。
(2)針對葉片邊緣數(shù)組B0中的每個點P(x,y),連接質心M0和點P,延長此線段直到與凸包邊界相交,設相交的邊界為EiEi+1,記交點為P1(x0,y0), 若
①P1與P的距離小于閾值R,則繼續(xù)掃描。
②否則,查看數(shù)組Ed中是否存在此邊界EiEi+1,若存在則繼續(xù)掃描,否則凸包虧格Ei加一,并且將凸包的此段邊界加入Ed。
(3)直到所有邊界點均掃描完畢,Ei即為所求的凸包虧格。
凸包虧格對于特定形狀為拓撲不變量,但是對于同一類葉片,其形狀可能存在微妙的差異,使得凸包虧格會在一定范圍內(nèi)波動,但由于葉片的相似性,一般葉片的波動范圍不會超過±1。
對于鋸齒邊造成的對虧格計算的影響,可以通過設置閾值R(參見算法描述)進行消除,若發(fā)現(xiàn)同類葉片的虧格差距過大,可以增大閾值R進行再次計算。
3.3.6 長短軸長度Lmax,Lmin的計算
對于凸包虧格為0的葉片,認為葉片形狀為標準的凸多邊形,其長軸定義為距離質心M0最遠的葉邊緣上的點與質心組成的線段,該線段的長度為長軸長度Lmax。短軸定義為距離質心M0最近的葉邊緣上的點與質心組成的線段,該線段的長度為短軸長Lmin。此情況下的長短軸示意圖如圖9,圖中藍色線段代表葉片的短軸,紅色線段代表葉片的長軸。
圖9 凸包虧格為0時的長短軸示意圖
對于凸包虧格大于0的葉片,由于其葉形狀較復雜,故定義長軸為距離質心M0距離為周圍其他點的極大值的點與質心組成的線段,相應的短軸為距離質心M0距離為周圍點的極小值的點與質心組成的線段,針對此種情況,長軸和短軸可能有多個。如圖10示意了凸包虧格為5的葉片的長短軸情況,此葉片藍色線段代表短軸,紅色線段代表長軸。
圖10 凸包虧格不為0時的長短軸示意圖
由凸包性質可以知道,凸包的每個頂點都是距離質心距離的極大值點,且產(chǎn)生虧格的凸包線段內(nèi),必有距離質心距離的極小值點。
算法9凸包虧格不為0的葉片的長短軸算法
(1)建立記錄長軸長度的數(shù)組L1,建立一個與算法8中Ed中包含邊數(shù)相等的數(shù)組L0,L0中的每個元素對應Ed的一個邊界。
(2)對每個邊界點P(x,y)
①若此點為凸包頂點,計算該點到質心的距離,記錄到長軸數(shù)組L1當中。
②否則,若此點與質心連線延長后經(jīng)過凸包邊界EiEi+1,若算法8中的Ed包含EiEi+1,則記算此點距離質心的距離Lx,若Lx小于L0中記錄的對應EiEi+1的值,則將L0中的該值替換為Lx。
③其他情況繼續(xù)掃描。
(3)針對所有的L1記錄下來的長度,計算其均值為長軸長度Lmax,針對所有L0記錄下的長度,計算短其均值為短軸長度Lmin。
長短軸計算的穩(wěn)定性類似凸包虧格的穩(wěn)定性,易受到鋸齒邊的影響,但在凸包虧格計算中,通過設定合理閾值,可以規(guī)避這種形象。由于此步驟采用了上一步的邊界計算結果Ed,故算法穩(wěn)定。
3.3.7 葉片邊緣曲線角點數(shù)目K的計算
對葉邊緣圖形利用Harris角點檢測的改進算法。算法由Krystian.Mikolajczyk,Cordelia.Schmid兩人提出,在基本的Harris角點檢測算法基礎上,加入了數(shù)學處理,使得檢測可以在經(jīng)過仿射變換的圖像也得到較為準確的值[12]。針對葉片這種特殊的邊緣類型,文章參數(shù)選取參考了王玉珠,楊丹,張小紅的《基于B樣條的改進Harris角點檢測算法》[13]一文。課題的算法由OpenCV實現(xiàn),可以獲得葉片邊界上角度劇烈變化的點,記錄在一個數(shù)組內(nèi)。角點計算的效果圖如圖11,紅色圈為計算得到的角點。
圖11 葉邊緣角點計算結果
OpenCV中的Harris檢測需要設置兩個參數(shù):
BlockSize:設置算法檢測角點的圖像塊大小,實驗中默認使用的2。
KSize:用于進行圖像過濾的參數(shù),影響點的數(shù)目,實驗中設置為3。
角點數(shù)目K可以由算法的結果經(jīng)過算法過濾得到。
角點數(shù)目在計算中存在不穩(wěn)定的情況,但在去除掉相鄰過緊的點之后,會發(fā)現(xiàn)特定葉片的角點數(shù)目總是處在一個比較穩(wěn)定的范圍當中,這是因為葉片的形狀大體相似。
為了進一步提高葉片的區(qū)分度,本次實驗還嘗試提取了葉脈所包含的特征,目前可以計算的葉脈特征值包括:主葉脈條數(shù),葉脈類型以及最長主葉脈與最短主葉脈的比值。主脈的定義參考《一種改進的葉脈建模方法》[14]中的描述。
葉脈類型大體分為三類:分叉葉脈,網(wǎng)狀脈,平行脈。葉脈中最顯著可辨別的是葉脈的主脈,本次實驗中主要通過區(qū)分葉片中包含的較長的連接曲線與長短軸的比值來判斷曲線是否主脈,再根據(jù)主脈的條數(shù),交匯點等信息來判斷葉脈的類型。
圖2所示葉片去掉葉片葉邊緣的葉脈圖像如圖12。
圖12 抽取的葉脈圖像
抽取主葉脈長度和葉脈類型特征的具體算法需要三個步驟,描述如下:
步驟1利用Hough變換,找出葉脈圖片中的所有長直線。
Hough變換是利用極坐標下直線的表示特性,通過對圖像中的點進行掃描,計算極坐標下兩點或多點間是否構成直線,從而找出圖中直線的算法[15]。
Opencv的Hough變換有以下幾個參數(shù)需要設置:
Rho:距離解析度,采用默認的1 px。
Theta:角度解析度,為了檢查到所有可能的直線,實驗中采用了?/(180×60)的解析度。
Threadhold:閾值,只有當直線的投票超過該閾值時,才會進入結果集,實驗中采用了2作為閾值,為了找到所有可能的直線。
minLineLength:最短長度,只有當直線的長度超過該值才可進入結果集,實驗中采用了葉片長軸長度Lmax的70%。
maxLineGap:最大間斷距離,直線如果中間間斷距離小于此值,會被認為是同一直線,實驗中采用了圖像長度的1/40。
變換后的葉脈圖像如圖13,紅色線條為利用Hough變換找出的長直線結果。
圖13 Hough變換后獲得的圖像結果
可以看出主要的葉脈均被查找出來。Hough變換所得的結果記錄在數(shù)組Hi當中。
步驟2合并斜率相近,有距離較近端點的線段。
算法10葉脈長直線合并算法
(1)建立存儲合并后葉脈線段的數(shù)組V。
(2)對Hi中的每條線段Li,對比該直線斜率與其他Hi中所有直線Lx的斜率,若兩者之差的絕對值不超過過閾值K(K實驗中取0.05),則查找兩條直線的四個端點,若直線的Li的某個端點與Lx的某個端點之間的距離小于閾值D(D取圖像長度w的0.005),則認為Li和Lx是同一葉脈,合并兩條直線為L,記錄L到V。若無直線可與Li合并,則記錄Li進數(shù)組V。
(3)繼續(xù)查找,直到每兩條直線都被比較過。
(4)可知V中記錄的是葉脈的線段集合。
步驟3計算葉脈類型和葉脈長度。
利用算法10中的結果,可以知道結果中的每條直線,都是葉片的主脈,故主脈條數(shù)可以由V中直線的條數(shù)表示。計算V中所有直線的長度,記最長的為Vmax,最短的為Vmin。
利用算法10中的結果,計算V中每兩條直線的交點,若所有交點相互間距離不超過閾值D(D取圖片長度的0.005),則證明所有葉脈均交于一點,證明葉脈形狀是網(wǎng)狀脈,否則認為是平行脈。
由算法可以看出,在抽取出葉脈的主脈中所有可能的長直線時,算法利用長度限制過濾了所有過短的側脈及細脈,由于參數(shù)可調(diào)整,若結果不理想,則可以通過適當調(diào)整葉脈長度的閾值來使得結果更加合理。計算出來的葉脈也會按照斜率和是否相接來進一步合并,從而使得所得的直線盡可能擬合葉脈的真實情況。從結果來看,特定葉片的葉脈特征基本符合常理,也穩(wěn)定在一定范圍內(nèi)。
最終利用上述結果,便可以計算出表征葉片的8個特征值:
由于這個葉片形狀特征是一個歸一化的二階矩不變特征(參考文獻[4]中的結論),因此在圖像旋轉,縮放等變化的情況下,具有特征的魯棒性。
同緊致度,此特征值為葉片形狀特征中的歸一化一節(jié)矩不變特征。Lmax和Lmin的計算穩(wěn)定性請參考3.3.6節(jié)。
此特征值為歸一化二階矩不變量,其中凸包面積ss的穩(wěn)定性可參見3.3.4節(jié)的說明。
(4)凸包虧格Ei在3.3.5節(jié)中求出。
此特征為拓撲不變量,不受縮放和旋轉的影響,其穩(wěn)定性請參見3.3.5節(jié)。
(5)角點數(shù)K在3.3.7節(jié)中求出。
此特征為拓撲不變量,穩(wěn)定性參見3.3.7節(jié)描述。
(6)主脈條數(shù)Lx在3.4.3節(jié)中求出。
此特征為拓撲不變量,穩(wěn)定性參見3.4.4節(jié)描述。
(7)葉脈類型T在3.4.3節(jié)中求出。
此特征為拓撲不變量,穩(wěn)定性參見3.4.4節(jié)描述。
此特征為歸一化一階矩不變量,不受旋轉和縮放的影響。穩(wěn)定性參見3.4.4節(jié)描述。
經(jīng)過實驗證明,這八組特征值很適合區(qū)分葉片的形狀,其中凸包虧格e和面積比凸包面積S,這兩組特征對于區(qū)分簡單形狀葉片(長條形,橢圓形)和復雜形狀葉片(五角星形等)幫助很大,角點數(shù)對于區(qū)分毛邊葉片和平滑邊葉片的幫助很大,長短軸比和緊致度則區(qū)分了長條形葉片和比較圓的葉片,也可以區(qū)分復雜形狀葉片的細長程度。主葉脈條數(shù)及主葉脈最長最短比也在比較某些形狀類似的葉片發(fā)揮了作用。
實驗的測試數(shù)據(jù)來源于在自然光照條件下,使用普通素描紙墊襯而拍攝的213枚10個種類的葉片。其中每個種類有18~22枚葉片,葉片的種類包括爬山虎,銀杏,柳葉,梧桐葉等多種類型。圖14~17為若干葉片樣本圖片樣例。
圖14 圖片樣例1
圖15 圖片樣例2
圖16 圖片樣例3
圖17 圖片樣例4
利用第3章中描述的算法,獲取到葉片的八個特征值信息后,利用LibSVM開源軟件項目的支持,以SVM(Support Vector Machine,支持向量機)分類算法,進行了分類測試。
SVM為二分類算法,本次實驗使用時,采用了將一個葉片和其他所有葉片區(qū)分開的策略,故針對每種葉片都進行了訓練和測試。
其中由于銀杏葉無法抽取葉脈,故銀杏葉與其他樹葉區(qū)分的實驗中沒有采用葉脈數(shù)據(jù)進行訓練,而其他樹葉的訓練中,銀杏葉的葉脈數(shù)據(jù)和被測試樹葉相同,即無法通過葉脈特征將被測試樹葉和銀杏葉區(qū)分開。
測試時,先用一半的數(shù)據(jù)進行訓練,取得分類平面后測試另一半數(shù)據(jù)是否分類準確。
若測試結果中某些特征值明顯不符合常理,則可以查看算法中特定參數(shù)是否合適,并進行適當?shù)恼{(diào)整,調(diào)整后再次進行實驗。
若測試結果符合預期,則將訓練數(shù)據(jù)集和測試集互換,再次測試分類是否準確,以防止出現(xiàn)參數(shù)的過擬合現(xiàn)象,確保分類器的可推廣性良好。
測試表明,利用這8個特征向量對葉片種類進行識別,識別的正確率高達91.5%,且分類器具有良好的可推廣特性,在調(diào)換了測試數(shù)據(jù)集和訓練數(shù)據(jù)集之后,仍能達到相當?shù)淖R別正確率。
抽取葉片的特征值數(shù)據(jù)結果如表1。
實驗中測試215個葉片的數(shù)據(jù)抽取,僅耗時61 s,平均每個葉片的數(shù)據(jù)計算在300 ms內(nèi)即可處理完成。
本實驗針對實際光照條件下,在實際的墊襯背景下拍攝的圖像進行圖像分割和特征值抽取,通過多種算法的綜合使用,使得葉片圖像可以較精確地轉換為可靠的,顯著的特征值,且經(jīng)過實際編碼實驗,算法可以正常運行,計算出的結果也有意義,區(qū)分度比較大。
在一個小的數(shù)據(jù)集上測試,利用SVM分類算法可以達到91.5%的準確率,且執(zhí)行效率較高,平均每個葉片的抽取分析耗時也不超過300 ms,算法具有實際應用的可能。
目前這套算法中還存在以下不足,考慮未來改進:
(1)圖像分割過程中,采用的canny算法的濾波參數(shù)在各種明暗不同圖片中均采取了統(tǒng)一值,使得有些圖像的分割細節(jié)缺失很大,有些圖片的分割出了很多的雜色色塊,考慮后期研究如何從圖片中得到濾波參數(shù),從而使得邊緣檢測出的結果更加優(yōu)化。
(2)葉片的葉邊緣抽取過程中,僅考慮了葉片為單連通域的情況,結果發(fā)現(xiàn)一些葉片上會有孔洞,而這類葉片的孔洞會被當作葉脈處理,雖然現(xiàn)階段無法處理曲線葉脈故不會對算法造成不良影響,但對于葉片識別來說,重要的信息沒有被抽取到,考慮后期改進邊緣抽取算法,以使得可以抽取到葉片當中的孔洞信息。
(3)葉脈檢測算法目前只能支持直線的葉脈,對于某些曲線型葉脈(例如弧形平行脈)則無法進行計算,實驗原計劃利用曲線的hough變換算法來抽取曲線葉脈,但效果不理想,后期會考慮優(yōu)化參數(shù)或者自行設計曲線葉脈的抽取算法,以使得葉脈的抽取覆蓋更加廣泛的葉片類型。
此外在算法效率上區(qū)域分割算法中的聯(lián)通曲線和連通域抽取是效率的瓶頸,考慮后期進行算法的優(yōu)化,從而使系統(tǒng)執(zhí)行效率更高。
表1 實驗結果匯總表
[1]Ingrouille M J,Laird S M.A quantitative approach to oak variability in some north London woodlands[J].London Naturalist,1986,65:34-46.
[2]Guyer D E,Miles G E,Schreiber M M,et al.Machine vision and image processing for plant identification[J].Transactions of ASAE,1986,29(6):1500-1507.
[3]傅星,盧漢清.應用計算機進行植物自動分類的初步研究[J].生態(tài)學雜志,1994,13(2):69-71.
[4]ChakiJ,Parekh R.Plantleafrecognition using shape based features and neural network classifiers[J].International Journal of Advanced Computer Science and Applications,2011,10(2):41-47.
[5]侯銅,姚立紅,闡江明.基于葉片外形特征的植物識別研究[J].湖南農(nóng)業(yè)科學,2009(4):123-125.
[6]湯曉東,劉滿華,趙輝,等.復雜背景下的大豆葉片識[J].電子測量與儀器學報,2010,24(4):385-390.
[7]祁亨年,壽韜,金水虎.基于葉片特征的計算機輔助植物識別模型[J].浙江林學院學報,2003(3):281-283.
[8]王曉峰,黃德雙,杜吉祥.葉片圖像特征提取與識別技術的研究[J].計算機工程與應用,2006,42(3):190-193.
[9]Canny J.A computational approach to edge detection[J].Pattern Analysis and Machine Intelligence,1986,8(6):679-698.
[10]陳鼎才,王定成,查金水.基于機器視覺的現(xiàn)實葉片面積測量方法的研究[J].計算機應用,2006,26(5):1226-1228.
[11]Graham R L.An efficient algorithm for determining the convex hull of a finite planar set[J].Information Processing Letters,1972,1:132-133.
[12]Mikolajczyk K,Schmid C.Scale and affine invariant interest point detectors[J].International Journal of Computer Vision,2004,60(1):63-86.
[13]王玉珠,楊丹,張小紅.基于B樣條的改進Harris角點檢測算法[J].計算機應用研究,2007(2):192-205.
[14]谷文哲,金文標,張智豐.一種改進的葉脈建模方法[J].計算機工程與應用,2010,46(21):242-245.
[15]Duda R O,Hart P E.Use of the Hough transformation to detect lines and curves in pictures[J].Artificial Intelligence Center,1971.