黃沛昱 黃 嶺 袁素真
(重慶郵電大學(xué)光電工程學(xué)院 重慶 400065)
近年來,計(jì)算機(jī)技術(shù)的發(fā)展日新月異,新一代的人機(jī)交互(Human-Computer Interface,HCI)與虛擬現(xiàn)實(shí)系統(tǒng)出現(xiàn)在了人們的日常生活中。手勢(shì)作為一種自然直觀、無需中間媒介的交互方式,對(duì)其跟蹤與識(shí)別越來越成為國內(nèi)外計(jì)算機(jī)視覺領(lǐng)域的研究熱點(diǎn)[1]。
手勢(shì)分割是手勢(shì)識(shí)別的前提和基礎(chǔ),其分割效果的好壞直接影響下一步手勢(shì)識(shí)別的結(jié)果[2]。因此,手勢(shì)分割是手勢(shì)識(shí)別系統(tǒng)中極為關(guān)鍵的處理步驟。手勢(shì)分割就是將手勢(shì)作為前景與背景進(jìn)行分離,從手勢(shì)分割技術(shù)的實(shí)現(xiàn)上來看,手勢(shì)分割方法主要為:模板檢測(cè)、AdaBoost分類器檢測(cè)、膚色檢測(cè)等[3-4]。由于膚色不隨手的姿勢(shì)、大小、方向的改變而改變,且膚色檢測(cè)運(yùn)算量小,適用于快速手勢(shì)分割,同時(shí)也便于與其他算法相結(jié)合提高分割效果。因此,膚色檢測(cè)在手勢(shì)分割中有很大的通用性。
目前常用于膚色模型的色彩空間包括RGB空間、YUV空間、YIQ空間及YCbCr空間等[5],但一些事實(shí)證明,以上方法在檢測(cè)準(zhǔn)確率和魯棒性上難以達(dá)到要求[6]。為解決上述問題,文獻(xiàn)[7]中利用深度圖像設(shè)備進(jìn)行手勢(shì)分割,分析深度圖像的不同閾值,從而計(jì)算手勢(shì)在圖像中的位置,但深度圖像設(shè)備價(jià)格成本高昂無法普及。文獻(xiàn)[8]中利用兩個(gè)CNN網(wǎng)絡(luò)進(jìn)行分割訓(xùn)練,再通過網(wǎng)絡(luò)得到手勢(shì)分割結(jié)果,但多個(gè)CNN網(wǎng)絡(luò)對(duì)硬件設(shè)備要求較高,易對(duì)后續(xù)識(shí)別工作造成運(yùn)算負(fù)擔(dān)。文獻(xiàn)[9]中利用AdaBoost算法對(duì)人臉區(qū)域進(jìn)行檢測(cè),然后利用人臉區(qū)域的膚色自適應(yīng)獲得整幅圖的膚色范圍,但對(duì)于與膚色一致的背景無法很好地分割。文獻(xiàn)[10]中利用膚色與運(yùn)動(dòng)相結(jié)合分割出手勢(shì),但該算法對(duì)于靜態(tài)手勢(shì)分割效果較差,適用面較低。文獻(xiàn)[11]中利用膚色得到手勢(shì)區(qū)域及質(zhì)心位置,再利用分水嶺算法分割出手勢(shì),但算法復(fù)雜度較高,處理時(shí)間較長。
針對(duì)傳統(tǒng)分割方法設(shè)備相對(duì)昂貴,易受到復(fù)雜類膚色背景干擾,分割速度不足等問題,本文提出一種使用單目視覺圖像且具有較高準(zhǔn)確度和分割速度的基于膚色質(zhì)心與邊緣自生長的手勢(shì)分割算法。
基于膚色質(zhì)心與邊緣自生長的手勢(shì)分割算法主要步驟為手勢(shì)區(qū)域提取、區(qū)域內(nèi)邊緣檢測(cè)及邊緣自生長補(bǔ)全、手勢(shì)分割,算法流程如圖1所示。
圖1 算法流程
1) 在單目視覺條件下采集圖像數(shù)據(jù)并檢測(cè)膚色區(qū)域。
2) 利用連通域去除其他較小的膚色塊并完成手勢(shì)區(qū)域定位。
3) 檢測(cè)手勢(shì)區(qū)域內(nèi)邊緣并利用自生長算法對(duì)邊緣進(jìn)行補(bǔ)全。
4) 將2)、3)中結(jié)果差分運(yùn)算并去除類膚色背景完成分割。
膚色檢測(cè)模型對(duì)亮度敏感度高,YCbCr空間中圖像亮度與其他信息相互分離,減少亮度對(duì)其他顏色分量的影響,因此YCbCr空間是最適合膚色圖像區(qū)域分割的顏色空間[12]。RGB空間與YCbCr空間的轉(zhuǎn)換公式如式(1)所示。
(1)
在YCbCr空間中,人體膚色會(huì)有一個(gè)明顯的類聚現(xiàn)象,通過文獻(xiàn)查詢以及實(shí)驗(yàn)驗(yàn)證,人體膚色在YCbCr空間中最合適的分割閾值為:133 圖2 原圖 圖3 膚色區(qū)域圖像 膚色模型從原圖片中篩選出的膚色區(qū)域并不能準(zhǔn)確代表手勢(shì)區(qū)域,還需要將一些類膚色的干擾區(qū)域去除。膚色檢測(cè)的過程中,人手所占的區(qū)域最大,所以,將膚色分割后的圖片中最大區(qū)域塊提取出來,就是手勢(shì)識(shí)別中人手所在的區(qū)域。且膚色處理后的圖像為二值圖像,因此使用連通域標(biāo)記的方式進(jìn)行篩選。 對(duì)于可識(shí)別的人手,其經(jīng)過膚色檢測(cè)后還是一個(gè)完整的圖形,都是由多像素聚集形成,不存在小區(qū)域連接,所以此時(shí)選擇四連通域標(biāo)記完成對(duì)手勢(shì)區(qū)域的粗分割,分割效果如圖4所示。 圖4 經(jīng)連通域處理后的手勢(shì) 對(duì)初步分割后的二值圖進(jìn)行Hu矩[14]計(jì)算,再由Hu矩特征值計(jì)算前景圖像的質(zhì)心坐標(biāo),圖像函數(shù)f(x,y)的幾何矩計(jì)算公式如式(2)和式(3)所示。 (2) (3) 手勢(shì)分割算法的最終目的是分割出手勢(shì)部分,所以對(duì)于邊緣的尋找只需要在人手所在區(qū)域進(jìn)行就能達(dá)到目的,同時(shí)這種方式將去除大量冗余計(jì)算,大大降低后續(xù)處理的時(shí)間。 圖5 手勢(shì)區(qū)域邊界計(jì)算 判定條件: (4) (5) (6) (7) 為去除可能存在于手勢(shì)后方的類膚色背景,還需要對(duì)劃定區(qū)域內(nèi)圖像進(jìn)行邊緣檢測(cè),找出人手邊緣并去除非人手部分,且在邊緣檢測(cè)前先對(duì)劃定區(qū)域內(nèi)圖像進(jìn)行濾波以降低噪聲對(duì)邊緣定位的影響。 傳統(tǒng)中值濾波的濾波窗口每次滑動(dòng)都會(huì)保留部分舊數(shù)據(jù)[15],并重復(fù)對(duì)舊數(shù)據(jù)進(jìn)行比較,增加了算法的運(yùn)算量,而改進(jìn)的中值濾波算法就是將上次窗口的比較結(jié)果保留并運(yùn)用到本次濾波窗口中,從而降低算法運(yùn)算量,提高單次濾波速度。 設(shè)窗口內(nèi)像素組成的矩陣為: (8) 對(duì)窗口內(nèi)的每一列都分別進(jìn)行排序,找到每一列像素的中值,即a11~an1的中間值m1,a12~an2的中間值m2,…,a1n~ann的中間值mn,并將這些新的中值存入一個(gè)數(shù)列Xm,即Xm=[m1,m2,…,mn],再求得數(shù)列Xm的中值m,則m就是整個(gè)矩陣的近似中值。 濾波窗口每次向右滑動(dòng)時(shí)均會(huì)丟棄左邊一列像素并在右邊加入新的一列像素,在每次移動(dòng)窗口的同時(shí)將數(shù)列Xm的值同時(shí)左移一位,最右邊補(bǔ)充新一列像素的中值。假如對(duì)分辨率為m×n的圖像使用N×N的濾波窗口進(jìn)行濾波,傳統(tǒng)中值算法最壞需要[(N2-1)N2/2]×m×n次比較,而改進(jìn)后的算法最壞僅需要[(N-1)N/2]×(2n+2)×m次比較,約為傳統(tǒng)運(yùn)算量的2/(N+1)N,若窗口為3×3,則約為傳統(tǒng)運(yùn)算量的17%。 傳統(tǒng)差分算子計(jì)算梯度只計(jì)算水平x軸方向和垂直y軸方向[16-17],即四鄰域梯度,為進(jìn)一步改善邊緣檢測(cè)效果,在Sobel算子的基礎(chǔ)上增加45°、135°方向的算子,各方向算子模板如圖6所示。 圖6 邊緣檢測(cè)模板 以圖6中的模板為窗口分別對(duì)關(guān)鍵位置的灰度值進(jìn)行卷積操作,分別計(jì)算各個(gè)方向的梯度值,其計(jì)算公式如式(9)-式(12)所示。 Gx(i,j)={[I(i+1,j-1)+2I(i+1,j)+I(i+1,j+1)]- [I(i-1,j-1)+2I(i-1,j)+I(i-1,j+1)]} (9) Gy(i,j)={[I(i-1,j+1)+2I(i,j+1)+I(i+1,j+1)]- [I(i-1,j-1)+2I(i,j-1)+I(i+1,j-1)]} (10) G45(i,j)={[I(i,j+1)+2I(i+1,j+1)+I(i+1,j)]- [I(i-1,j)+2I(i-1,j-1)+I(i,j-1)]} (11) G135(i,j)={[I(i-1,j)+2I(i-1,j+1)+I(i,j+1)]- [I(i,j-1)+2I(i+1,j-1)+I(i+1,j)]} (12) 式中:I表示該點(diǎn)的像素值。 當(dāng)?shù)玫?個(gè)方向的梯度值后,利用坐標(biāo)投影原理將梯度合成在水平垂直兩個(gè)方向上,其計(jì)算方式如式(13)、式(14)所示。 GX(i,j)=Gx(i,j)+G45(i,j)cos45°+G135(i,j)cos135°= (13) GY(i,j)=Gy(i,j)+G45(i,j)sin45°+G135(i,j)sin135°= (14) 將上述計(jì)算結(jié)果代入式(15)、式(16)計(jì)算出當(dāng)前像素點(diǎn)灰度值的梯度幅值G(i,j)和梯度角度θ(i,j)。 (15) (16) 以上述方法改進(jìn)后的梯度計(jì)算方式充分考慮了各個(gè)方向的梯度,使得梯度計(jì)算更加準(zhǔn)確,同時(shí)進(jìn)行非極大值抑制時(shí)也可以直接利用梯度計(jì)算,而不需要進(jìn)行內(nèi)插值計(jì)算。 計(jì)算出梯度幅度和角度后,直接使用傳統(tǒng)canny邊緣檢測(cè)中的非極大值抑制,利用梯度角度確定邊緣方向,只保留該方向上的極大值,將邊緣由粗變細(xì)便于后續(xù)處理。閾值化時(shí)利用OTSU法確定,canny高閾值使用最大類間方差,低閾值取高閾值的二分之一[18]。 邊緣檢測(cè)算法檢測(cè)出來的邊緣會(huì)因?yàn)楣饩€照射不均勻、閾值選擇不恰當(dāng)?shù)仍驅(qū)е缕洚a(chǎn)生斷裂[19],若斷裂部位剛好在需要分割掉的類膚色區(qū)域處,會(huì)導(dǎo)致邊緣檢測(cè)算法不起作用。針對(duì)邊緣斷裂的情況,本文提出一種邊緣自生長算法,算法在區(qū)域內(nèi)搜索邊緣斷裂點(diǎn),若在一定半徑的范圍內(nèi)存在距離最短的兩個(gè)斷裂點(diǎn),則對(duì)其進(jìn)行直連,即填充兩點(diǎn)間的部分像素,完成對(duì)斷裂邊緣的生長。算法的實(shí)現(xiàn)步驟如下: 步驟1全局掃描判定斷裂點(diǎn)。 對(duì)二值化邊緣圖像T整個(gè)圖像使用3×3大小的窗口進(jìn)行遍歷取值: (17) 遍歷方式為從左到右、從上到下,步進(jìn)為1,經(jīng)非極大值抑制后的邊緣可能存在的邊緣斷裂點(diǎn)像素分布如圖7所示,由圖可知,當(dāng)w(i,j)=1時(shí),開始判定該點(diǎn)是否為斷裂點(diǎn)。 圖7 可能存在的斷裂點(diǎn)處像素分布 當(dāng)矩陣w的和S(w)=2時(shí),直接判定為斷裂點(diǎn); 當(dāng)S(w)=3時(shí),判定條件為: (18) 式中:S(w2n)為矩陣w的第2行和,S(wn1)、S(wn3)分別為矩陣w的第1列和及第3列和,S(wn2)為矩陣w的第2列和,S(w1n)、S(w3n)分別為矩陣w的第1行和及第3行和。 當(dāng)w矩陣滿足上述斷裂點(diǎn)判斷條件時(shí),即存在斷裂點(diǎn)a(xa,ya)=w(i,j),進(jìn)入步驟2;否則移動(dòng)窗口,w重新取值,在步驟1中繼續(xù)判定,直至完成整個(gè)窗口的遍歷,進(jìn)入步驟4。 步驟2設(shè)定半徑R內(nèi)搜尋另一斷裂點(diǎn)。 因?yàn)榇翱趙遍歷順序?yàn)閺纳系较拢仕阉鲾嗔腰c(diǎn)周圍另一斷裂點(diǎn)時(shí)可以不用搜索該點(diǎn)的上方。以r=(xb+yb)為半徑的圓形依次向外進(jìn)行搜索,b點(diǎn)坐標(biāo)表示為: (19) 以b點(diǎn)為中心得到3×3矩陣w′,搜索半徑為r時(shí),當(dāng)半徑為r的類圓弧上存在滿足步驟1中判定條件的w′時(shí),即存在另一斷裂點(diǎn),且它為最小距離點(diǎn)b(xb,yb)=w(i′,j′),進(jìn)入步驟3;否則不存在另一斷裂點(diǎn),返回步驟1并移動(dòng)窗口。 步驟3邊緣自生長。 對(duì)斷裂處的兩端,即a(xa,ya)、b(xb,yb)兩點(diǎn)進(jìn)行最短距離連接。首先計(jì)算a、b兩點(diǎn)行列值的差值xab、yab: (20) 由遍歷方式可知xab≥0,當(dāng)yab≥0時(shí),b點(diǎn)位于a點(diǎn)右方,然后比較xab、yab的值,若xab≥yab,令: (21) 式中:T為二值圖像像素點(diǎn)的值。 若xab (22) 當(dāng)yab<0時(shí),b點(diǎn)位于a點(diǎn)左方,比較xab、yab的值,若xab≥|yab|,令: (23) 若xab<|yab|,令: (24) 按式(21)-式(24)完成邊緣生長后,返回步驟1并移動(dòng)窗口。 步驟4完成生長并輸出。 進(jìn)入該步驟表明斷裂邊緣已完成自生長修復(fù),此時(shí)的二值矩陣T即是最終的邊緣圖像,當(dāng)生長半徑R=10時(shí)修復(fù)效果如圖8所示。 圖8 邊緣生長局部效果 本文的實(shí)驗(yàn)平臺(tái)為個(gè)人計(jì)算機(jī),使用MATLAB2016b進(jìn)行仿真,采用三幅分辨率均為640×480的實(shí)拍圖像進(jìn)行驗(yàn)證,其拍攝場(chǎng)景分別為白天室內(nèi)環(huán)境、白天室外環(huán)境和夜晚燈照環(huán)境如圖9(a)所示。為增加干擾,各場(chǎng)景中均存在類膚色背景,且均有部分類膚色背景位于人手后方,場(chǎng)景3中在人手后方設(shè)置了大塊類膚色背景,面積超過人手面積。本文首先利用傳統(tǒng)膚色檢測(cè)實(shí)現(xiàn)了對(duì)手勢(shì)的分割,其分割結(jié)果如圖9(b)所示,然后使用了膚色直接結(jié)合邊緣檢測(cè)的方式實(shí)現(xiàn)對(duì)手勢(shì)的分割,其分割結(jié)果如圖9(c)所示,還使用了文獻(xiàn)[11]的質(zhì)心分水嶺算法(ICWA),分割結(jié)果如圖9(d)所示,最后是本文算法,其分割結(jié)果如圖9(e所示),通過對(duì)不同場(chǎng)景下分割結(jié)果的對(duì)比可以看出,本文算法在最終分割效果上相較其他算法均有一定優(yōu)勢(shì),且能較為完整地分割出手勢(shì)圖像。 圖9 不同背景下各算法處理結(jié)果對(duì)比 對(duì)于膚色檢測(cè)算法而言,當(dāng)背景中存在一定的類膚色背景時(shí),其并不能準(zhǔn)確地分割出手勢(shì)區(qū)域。而膚色檢測(cè)結(jié)合了邊緣檢測(cè)算法之后雖然能分割掉其他類膚色背景,但對(duì)于手勢(shì)正后方的類膚色區(qū)域卻無法有效分割。對(duì)于文獻(xiàn)[11]的ICWA,其有時(shí)存在過分割現(xiàn)象。而本文算法可以較為準(zhǔn)確地分割出手勢(shì),其原因在于使用了邊緣自生長算法對(duì)邊緣信息進(jìn)行補(bǔ)全,同時(shí)采用了OTSU和雙閾值,有效地減少了靜態(tài)手勢(shì)分割算法中存在的過分割或者無法完全分割的問題。 算法運(yùn)行時(shí)間與硬件的優(yōu)劣和實(shí)現(xiàn)的環(huán)境關(guān)聯(lián)很大,而膚色檢測(cè)算法是最基礎(chǔ)的算法,其運(yùn)行時(shí)間具有參考性,本文為排除軟硬件影響,以膚色檢測(cè)算法運(yùn)行時(shí)間為基準(zhǔn),在相同硬件和軟件條件下,計(jì)算各算法運(yùn)行時(shí)間與基準(zhǔn)的比值如圖10所示??梢钥闯?,本文算法在保證很好分割效果的情況下,運(yùn)行時(shí)間明顯優(yōu)于其他算法,與文獻(xiàn)[9]的ICWA相比速度提高了近一倍。其中,本文算法因?yàn)楹罄m(xù)計(jì)算均在手勢(shì)區(qū)域內(nèi)進(jìn)行,所以處理時(shí)間會(huì)有波動(dòng),手勢(shì)所占面積越大,處理時(shí)間越長,反之則越短。由圖10易得,人手區(qū)域越小本文算法越有優(yōu)勢(shì),當(dāng)小于整個(gè)圖像的17%時(shí),本文算法在速度上甚至比簡單的膚色+邊緣算法更加有優(yōu)勢(shì)。 圖10 各算法運(yùn)行時(shí)間與基準(zhǔn)的比值 手勢(shì)分割算法作為手勢(shì)識(shí)別的前提,為驗(yàn)證本文算法的實(shí)用性和正確性,將本文算法處理后的圖片(像素為28×28)作為輸入數(shù)據(jù),設(shè)計(jì)了一個(gè)1+2的簡單CNN網(wǎng)絡(luò)進(jìn)行驗(yàn)證。網(wǎng)絡(luò)首先使用20個(gè)核大小為9×9、步長為1的卷積層提取圖像特征并使用ReLU函數(shù)激活,由核為2×2、步長為2的池化層壓縮圖像,再進(jìn)入一層平鋪層和兩層大小為100的全連接層,最后使用Softmax函數(shù)進(jìn)行分類輸出,具體結(jié)構(gòu)如圖11所示。 圖11 CNN網(wǎng)絡(luò)結(jié)構(gòu) 本文用于測(cè)試的手勢(shì)圖像數(shù)據(jù)包括部分sign_language數(shù)據(jù)集和個(gè)人收集的手勢(shì)圖像數(shù)據(jù),該數(shù)據(jù)集共包含26種靜態(tài)手勢(shì),但其中部分手勢(shì)相似度較高,而相似手勢(shì)識(shí)別率受CNN網(wǎng)絡(luò)性能影響很大。為排除因網(wǎng)絡(luò)性能而導(dǎo)致的分類錯(cuò)誤,本文從中選出14種相差較大的靜態(tài)手勢(shì)進(jìn)行測(cè)試,共20 585幅圖片,每次訓(xùn)練隨機(jī)從訓(xùn)練集中選擇100幅圖片,共迭代50 000次,訓(xùn)練結(jié)果如圖12所示,其中結(jié)構(gòu)為1+2網(wǎng)格結(jié)構(gòu),校驗(yàn)數(shù)據(jù)最高識(shí)別率為99.02%。 圖12 CNN網(wǎng)絡(luò)訓(xùn)練識(shí)別率 測(cè)試時(shí)分別使用傳統(tǒng)SHIT算法、ICWA+CNN、本文算法+CNN進(jìn)行測(cè)試,測(cè)試結(jié)果如表1所示。 表1 各算法識(shí)別率與誤據(jù)率對(duì)比(%) 誤據(jù)率的產(chǎn)生是因?yàn)镾IFT算法需要利用特征點(diǎn)進(jìn)行匹配,若出現(xiàn)誤據(jù)則代表匹配不成功,而CNN網(wǎng)絡(luò)是直接進(jìn)行分類輸出,所以不會(huì)有誤據(jù)產(chǎn)生。ICWA有時(shí)會(huì)出現(xiàn)過分割現(xiàn)象,分割出來的手勢(shì)特征缺失,導(dǎo)致識(shí)別率降低。從實(shí)驗(yàn)結(jié)果可以看出,本文算法相較其他算法分割效果較好,能有效提高后續(xù)手勢(shì)識(shí)別的識(shí)別率。 傳統(tǒng)手勢(shì)分割算法在復(fù)雜背景下難以準(zhǔn)確而又完整地分割出手勢(shì)圖像,本文結(jié)合了膚色與邊緣信息對(duì)手勢(shì)進(jìn)行分割提取。利用膚色模型檢測(cè)手勢(shì)所處區(qū)域,為降低后續(xù)運(yùn)算量及時(shí)間,只在該區(qū)域內(nèi)對(duì)手勢(shì)圖像進(jìn)行后續(xù)的處理。改進(jìn)邊緣檢測(cè)算法,增加斜方向算子,并以邊緣自生長的形式補(bǔ)全邊緣,進(jìn)一步加強(qiáng)分割效果。實(shí)驗(yàn)結(jié)果表明,本文算法能夠快速有效地從復(fù)雜類膚色背景中分割出手勢(shì)圖像,具有一定的實(shí)用性,為后續(xù)手勢(shì)識(shí)別工作奠定了基礎(chǔ)。2.2 連通域計(jì)算
2.3 Hu矩質(zhì)心計(jì)算
2.4 手勢(shì)區(qū)域提取
3 膚色與類膚色區(qū)域分割
3.1 改進(jìn)的中值濾波算法去除圖像噪聲
3.2 八鄰域算子邊緣檢測(cè)
3.3 邊緣自生長
4 結(jié)果分析
5 結(jié) 語