基於MATLAB的人手手指指尖的圖像採集與檢測

     

目錄

        1.凸包

 

2.膚色模型

 

3.設計過程

         1.基於YCrCb顏色空間的膚色檢測算法及實現

         2.手勢輪廓提取

         3.基於凸包的中值指尖檢測

 

4.設計步驟


     1.凸包

介紹凸包之前,首先介紹凸多邊形,如圖。如果一個多邊形的任意一邊所在的直線,能夠使該多邊形的其他各邊都在直線的一側,那我們就認爲這個圖形是凸多邊形。凸多邊形的所有內角和都小於180°,任意兩個頂點的連線段都處於多邊形的內部或邊界上,與凸多邊形對應的是凹多邊形。

                                              

在給定的二維平面上存在一個有限點的集合,能夠完全的包圍這個集合的凸多邊形有無數個,凸包就是其中面積最小的一個。圖2-3表示的凸包的示意圖,圖中的黑色圓點代表有限的木樁集合,外圍的曲線代表將木樁圍起來的繩子,當繩子包圍圈最小時就是這個集合的凸包。

                                                            

 

2.膚色模型

爲了將圖中的像素點標記爲膚色和非膚色兩類,需要選用一種決策方法來進行膚色檢測。膚色模型是在特定的顏色空間中用來描述膚色的分佈的規律的數學模型,採用函數或查表等方式表明像素顏色和膚色的相似性,並由此判斷像素是否爲膚色。本文所採用的模型是膚色閾值模型

  1. 膚色閾值模型

膚色閾值模型是一種劃定膚色範圍的簡單膚色模型,該模型首先採用RGB空間表示的彩色圖像變換到一個亮度影響較小的顏色空間,然後通過統計大量膚色樣本中的膚色像素點的分佈情況,得到一個或多個膚色範圍並由此設定膚色閾值,最後遍歷待檢測圖像的像素點,當像素點處於閾值範圍內的時候,將其標記爲膚色點,其他像素則被標記爲非膚色點,由此可以達到膚色分割的二值圖像。在YCrCb空間中,當像素點的顏色在   範圍內的像素認爲是膚色點,範圍外的像素爲非像素點。

膚色閾值模型算法簡單,實現容易,但靈活讀不夠,造成誤差較大。

 

3.設計過程

         1.基於YCrCb顏色空間的膚色檢測算法及實現

膚色閾值模型一般是根據很多膚色樣本的統計分析,得到某個顏色空間中膚色的閾值範圍,再根據閾值檢測膚色區域。

首先,通過攝像頭採集手勢圖像,將圖像轉換到YCrCb顏色空間,建立初始的膚色檢測模型,通過查找文獻可以確定模型的參數值。然後遍歷圖像的每一個像素點,若該像素點的Cb,Cr值處於式(3-1)的範圍內,即認爲式膚色點。反之,則認爲不是膚色點。

然後對圖像進行開運算,消除小物體,在纖細點出分離物體,平緩邊界的同時不改變其面積。然後進行閉運算,填充物體內的細小空洞,連接鄰近物體,平滑邊界。然後對圖像進行腐蝕,去掉物體的邊緣點,然而所有的細小的物體都會被認爲是邊緣點,因此會被整個刪去。之後進行膨脹操作,留下來的物體還會變回原來的大小,而被刪除的小物體則永遠的消失了。

 

                                                                        Cb∈[77,127 ] Cr∈[133,173]                  (3-1)

                                                                 

         2.手勢輪廓提取

在定位指尖之前,需要先根據手勢的二值圖提取手勢的輪廓。輪廓的提取可以得到目標邊緣點的位置信息,減少圖像中不被關注的部分,降低計算量,並保留手勢的重要特徵。

本文采用八鄰域捜索法來提取手勢輪廓,該方法屬於串行邊緣檢測方法,當確定某個像素點屬於邊緣輪廓後,利用該像素點就可以找到與之相鄰的下一個像素點,最終像素點連接得到一條封閉的輪廓曲線。

對於圖像中的任意一個像素點,均存在八鄰域點,即與之相鄰的八個點。如果P(x,y)被確定爲手勢的邊界點,那麼下一個邊界點必然在這個點的八鄰域點之中,圖3-2表示了八鄰域點的位置編碼和座標表示,左側爲位置編碼,右側爲座標表示。

                             

在Matlab中,通過bwboundaries函數來計算輸入的二值圖像的輪廓,函數的返回值包括計算出的輪廓和標註矩陣。輪廓提取結果如圖

                                                

         3.基於凸包的中值指尖檢測

不同手勢輪廓的凸包和缺陷都不相同,採用凸包分析的方法來檢測指尖是通過分析手勢輪廓的全局特性來實現的,因此既不需要匹配模板,也不用計算輪廊的局部特性,而且不受手勢大小、方向和位置的影響,計算穩定可靠。

得到手勢的輪廓之後,輪廓由一個有限點集構成,根據凸包算法能夠求得手勢輪廓的凸包。觀察手勢的結構特徵可以發現,指尖處於輪靡的突出位置上,即輪廓凸包的頂點,因此篩選凸包的頂點可以確定指尖位置。

                                                                    

從圖中可以看出,手勢輪廓四包上的頂點並不都是指尖點,因此需要結合其他信息去除非指尖點,通過凸包的凸缺陷特徵可以達到這個目的。如圖3-3所示,手勢的凸缺陷是圖中的區域A~H,手勢周圍的深色凸多邊形是凸包,凸包與手勢輪廊之間的部分就是凸包的缺陷。不同的手勢輪廓、凸包和凸缺陷體現了手的不同狀態,因此可用來提取特徵來區分不同的手勢。

在計算凸包與凸缺陷之前,首先必須通過檢測確定手勢輪廓是否爲凸,如果是凸的,則計算輪廓的凸包。凸包採用序列表示,序列可控制排列方向和表示方式。得到手勢的凸包序列之後,再結合手勢的輪廓可以計算手勢的凸缺陷。凸缺陷採用結構體來保存,結構體中包含四個參數,start和end分別是凸缺陷的起點和終點,depth_point是凸缺陷與相應的凸包邊距離最遠的點,定義爲缺陷的深度點,depth是深度點與相應的凸包邊的距離,定義爲缺陷的深度。

由圖可知,兩根手指之間的區域正是凸缺陷,因此凸缺陷的起點與終點是指尖的候選點。但是該指尖候選點的範圍仍然較大,需要結合凸缺陷的深度信息篩選出有效的候選點來作爲指尖點。由於兩手指之間的凸缺陷深度較大,根據這一特徵,可以設定缺陷深度閾值,當缺陷深度大於該閾值時,則認爲該凸缺陷的起點終點有效。

                                       

根據中值是五個手指中最長的那一根(一般來說),因此,中指點的凸缺陷深度也是最大的,因此,從檢測到的指尖中選出深度信息最大的一個即爲中指指尖。

                                          

 

4.設計步驟

                                                                                     

完整代碼見下列網址

發佈了4 篇原創文章 · 獲贊 3 · 訪問量 2606
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章