本發(fā)明涉及人體智能識別技術(shù)領(lǐng)域,尤其涉及一種基于圖像邊緣線彎曲度和距離特征的人手識別方法。
背景技術(shù):
目前現(xiàn)有的相關(guān)技術(shù)大致有如下幾種:
1.基于特征和分類的經(jīng)典的人手識別方法:這種方法需要步進型對整個圖片中每一小片圖片都進行特征和分類運算。這種識別方法優(yōu)點是:算法成熟、識別比較準確,但缺點也很明顯:就是運算量巨大,由于特征抽取和分類運算的運算量都很大,在整個圖片上進行這種步進型運算的運算量非常大,導致這種方法基本無法放入處于大眾消費主流的運算能力受限的低端嵌入式設(shè)備。
2.基于圖像特征+模式匹配的人手識別方法:這個方法的優(yōu)點是比經(jīng)典方法快,缺點是受制于模板的數(shù)目(模板數(shù)目不可能很多),很難匹配真實世界中人手千變?nèi)f化的形態(tài);如果模板數(shù)量太多這種方法的運算量又會超過前述第一種基于分類器的經(jīng)典人手識別方法。因此當人手實際姿態(tài)和模板庫中模板不太一致時(譬如伸縮一個手指)模式匹配的結(jié)果就會很不理想,這就是模式匹配方法在人手識別上不是主流方法的原因。
3.基于神經(jīng)網(wǎng)絡(luò)及自適應(yīng)學習的方法目前大多數(shù)還處于理論階段,運算量比前述第一種經(jīng)典算法還高出幾個數(shù)量級,更不可能將其放在處于大眾消費主流的低端嵌入式設(shè)備中運行。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種基于圖像邊緣線彎曲度和距離特征的人手識別方法,從而解決現(xiàn)有技術(shù)中存在的前述問題。由于深度圖像更容易提取圖像邊緣線,所以本方法更適用于深度圖像,當然也可以適用于能夠提取圖像邊緣線的其他彩色圖像或黑白圖像等圖像。
為了實現(xiàn)上述目的,本發(fā)明采用的技術(shù)方案如下:
一種基于圖像邊緣線彎曲度和距離特征的人手識別方法,包括以下步驟:
S1,獲取待進行人手識別的原始圖像;
S2,對所述原始圖像進行預處理,得到所述原始圖像的邊緣線圖;
S3,沿所述邊緣線圖的邊緣線路徑進行遍歷,依次得到所述邊緣線路徑上取樣點的坐標值,再計算得到所述取樣點的彎曲度值;
S4,應(yīng)用彎曲度和距離特征算法,根據(jù)所述取樣點與相關(guān)取樣點的距離特征 和/或 根據(jù)所述取樣點的彎曲度值進行計算,得出具備人手輪廓線彎曲度特征 和/或 具備人手輪廓線距離特征的邊緣線路徑片段,與得出的所述邊緣線路徑片段相對應(yīng)的邊緣線圖即為疑似人手區(qū)域邊緣線圖;與得出的所述邊緣線路徑片段相對應(yīng)的圖像即為疑似人手區(qū)域圖像;
S5,對S4中得到的全部疑似人手區(qū)域邊緣線圖 和/或 疑似人手區(qū)域圖像逐一進行精確判定,得到確定的人手區(qū)域邊緣線圖 和/或 確定的人手區(qū)域圖像,從而得到人手位置信息,完成人手識別。
優(yōu)選的,還包括以下步驟:
S6,對S5中得到的確定的人手區(qū)域邊緣線圖 和/或 確定的人手區(qū)域圖像進行精細計算識別,得到人手姿態(tài)信息。
優(yōu)選的,S1中所述的待進行人手識別的原始圖像為待進行人手識別的原始深度圖像。
優(yōu)選的,所述S3中所述的沿所述邊緣線圖的邊緣線路徑進行遍歷,依次得到所述邊緣線路徑上取樣點的坐標值,再計算得到所述取樣點的彎曲度值,包括以下步驟:
遍歷所述邊緣線圖查找邊緣線路徑,將邊緣線路徑上取樣點序列化并將其坐標值存入數(shù)組,計算得到所述邊緣線路徑上每個所述取樣點的彎曲度值并存入所述數(shù)組;所述數(shù)組的每個元素均包含信息:所述取樣點位置坐標值和所述取樣點彎曲度值。
優(yōu)選的,S3中計算得到所述邊緣線路徑上每個所述取樣點的彎曲度值的方法包括以下步驟:
以待計算取樣點為中心取一窗口,用所述窗口內(nèi)的邊緣線路徑距離減去所述窗口內(nèi)邊緣線路徑兩端點的直線距離所得之差作為所述待計算取樣點的彎曲度值;如果彎曲度值越大,則所述差值會越大,具體步驟如下:
第1步:假設(shè)當前取樣點的路徑/數(shù)組索引為i,彎曲度計算參數(shù)為cN;
第2步:累計從i-cN到i+cN點之間的邊緣線路徑上的所有相鄰兩點間距離到dSum;
第3步:計算i-cN到i+Cn點的直線距離dDir;
第4步:則得出i點的彎曲度值為dSum–dDir。
優(yōu)選的,所述S4中所述的得出具備人手輪廓線彎曲度特征 和/或 具備人手輪廓線距離特征的邊緣線路徑片段,中的人手輪廓線彎曲度特征和人手輪廓線距離特征包括以下一種或幾種:
人手手指區(qū)域取樣點彎曲度值整體上比其鄰近的手掌區(qū)域的取樣點的彎曲度值高的特征;
人手手掌區(qū)域取樣點彎曲度值低而且有一部分取樣點靠近彎曲度值高的手指區(qū)域的特征;
人手手掌區(qū)域彎曲度值低且手掌長度和寬度接近的特征。
優(yōu)選的,
S4具體包括以下步驟:
根據(jù)人手手指區(qū)域取樣點彎曲度值整體上比其鄰近的手掌區(qū)域的取樣點的彎曲度值高的特點,根據(jù)彎曲度值高度先找到疑似手指區(qū)間,然后在這個疑似手指區(qū)間附近查找疑似人手區(qū)間;具體步驟包括:
第1步:在邊緣線路徑上查找所有疑似手指區(qū)間;
第1.1步 根據(jù)手指區(qū)域取樣點的彎曲度值整體上比其鄰近手掌區(qū)域的取樣點的彎曲度值高的特點,在邊緣線路徑上查找所有疑似手指區(qū)間;
第1.2步 計算邊緣路徑線上所述疑似手指區(qū)間對應(yīng)的手指區(qū)域重心:累加路徑上手指區(qū)間所有取樣點的坐標,除以取樣點的個數(shù)得到手指區(qū)間重心的坐標;
第2步:根據(jù)第1步得到的手指區(qū)間重心的坐標計算出一個或者幾個經(jīng)驗位置,并估算人手大??;
第3步:在邊緣線上路徑上從手指區(qū)間附近根據(jù)第2步算出的經(jīng)驗位置的距離大小取得疑似人手手掌區(qū)域;
和/或 S4具體包括以下步驟:
根據(jù)人手手掌區(qū)域取樣點的彎曲度值低而且有一部分取樣點靠近彎曲度值高的手指區(qū)域的特點,先獲取到手掌區(qū)域然后再延展獲取到整個疑似人手區(qū)域;
和/或 S4具體包括以下步驟:
根據(jù)人手手掌區(qū)域取樣點彎曲度低以及手掌長度和寬度接近的特點先獲取到手掌區(qū)域然后再延展獲取到整個疑似人手區(qū)域。
優(yōu)選的,S5中精確判定的方法包括以下一種或幾種:
基于訓練好的經(jīng)典的人手識別模型,對疑似人手區(qū)域圖像進行特征抽取及分類運算,判定這個疑似人手區(qū)域圖像是否是真正的手部區(qū)域;
進一步根據(jù)人手輪廓彎曲度和距離的特征,應(yīng)用更多規(guī)則排除疑似人手區(qū)域邊緣線圖集合中的非人手區(qū)域邊緣線圖;
利用模式識別方法,排除疑似人手區(qū)域邊緣線圖集合或疑似人手區(qū)域圖像集合中的非手部區(qū)域。
優(yōu)選的,在S6前還包括對待精細化計算識別的所述人手區(qū)域圖像進行預處理的步驟。
本發(fā)明的有益效果是:
使用本發(fā)明的基于圖像邊緣線彎曲度和距離特征的人手識別方法,利用人手邊緣線彎曲度和距離特征,通過簡單的規(guī)則快速找出圖像中所有疑似人手區(qū)域,大大縮小人手識別算法的運算量;本發(fā)明中用到的彎曲度更能反映邊緣線圖一段區(qū)域內(nèi)總體彎曲情況,天然對噪音信號影響有抑制作用;而且彎曲度計算中只需進行查表(近距離兩點間距離可用查表加速而非平方和的平方根)、求和及相減等簡單快速運算,沒有曲率計算中的運算量很大的三角函數(shù)運算。使其能夠運行在處于大眾消費主流的嵌入式系統(tǒng)中,為實現(xiàn)AR/VR等設(shè)備的人手凌空輸入提供了可能。
附圖說明
圖1是本發(fā)明的方法的總體流程示意圖;
圖2是人手輪廓及輪廓位置標識;
圖3是人手手腕取樣點彎曲度特征示意圖;
圖4是人手手掌邊緣點彎曲度特征示意圖;
圖5是人手手掌邊往指尖彎曲度特征示意圖;
圖6是人手手掌邊往指尖彎曲度特征示意圖2;
圖7是人手指尖彎曲度形成高峰特征示意圖;
圖8是人手指尖彎曲度特征示意圖;
圖9是人手手指中部彎曲度特征示意圖;
圖10是人手指蹼?yún)^(qū)域形成彎曲度高峰特征示意圖;
圖11是人手指蹼?yún)^(qū)域彎曲度特征示意圖;
圖12是人手指尖往相鄰手掌邊彎曲度下滑特征示意圖;
圖13是指尖往相鄰手掌邊彎曲度特征示意圖;
圖14是岔開手指區(qū)域整體彎曲度特征示意圖;
圖15是岔開手指區(qū)域彎曲度震蕩特征示意圖;
圖16是手掌邊到手指并攏區(qū)彎曲度變化特征示意圖;
圖17是手掌邊到手指并攏區(qū)彎曲度變化特征示意圖2;
圖18是手指并攏區(qū)到手掌邊彎曲度變化特征示意圖;
圖19是手指并攏區(qū)到手掌邊彎曲度變化特征示意圖2;
圖20是手指并攏手指區(qū)域整體彎曲度特征示意圖;
圖21是手指并攏區(qū)域彎曲度低幅震蕩特征示意圖;
圖22是手掌邊到手指握拳區(qū)彎曲度變化特征示意圖;
圖23是手掌邊到手指握拳區(qū)彎曲度變化特征示意圖2;
圖24是手指握拳區(qū)到手掌邊彎曲度變化特征示意圖;
圖25是手指握拳區(qū)到手掌邊彎曲度變化特征示意圖2;
圖26是手指握拳手指區(qū)域整體彎曲度特征示意圖;
圖27是手指握拳區(qū)域彎曲度低幅震蕩特征示意圖;
圖28是人手外輪廓距離特征示意圖;
圖29是同一根手指/相鄰人手距離特征示意圖;
圖30是輪廓線中人手邊緣線距離經(jīng)驗點的距離特征示意圖;
圖31是輪廓線中手掌邊緣線特征示意圖;
圖32是輪廓線中手掌邊緣線特征示意圖2;
圖33是原始深度圖像及對應(yīng)的真實場景示意圖;
圖34是深度圖像預處理計算出輪廓線/邊緣線示意圖;
圖35是深度圖邊緣線(片段)彎曲度計算示例示意圖;
圖36是手指形態(tài)判定(手指岔開)示意圖;
圖37是手指形態(tài)判定(手指并攏)示意圖;
圖38是手指形態(tài)判定(手指握拳)示意圖;
圖39是手指重心計算(手指岔開)示意圖;
圖40是手指重心計算(手指并攏)示意圖;
圖41是手指重心計算(手指握拳)示意圖;
圖42是人手大小估算(手指岔開)示意圖;
圖43是人手大小估算(手指并攏)示意圖;
圖44是人手大小估算(手指握拳)示意圖;
圖45是手掌區(qū)域估算(手指岔開)示意圖;
圖46是手掌區(qū)域估算(手指并攏)示意圖;
圖47是手掌區(qū)域估算(手指握拳)示意圖;
圖48是計算人手區(qū)域經(jīng)驗值示意圖;
圖49是查找人手手腕點示意圖;
圖50是靠近手指的手掌邊緣點分布及權(quán)重值示意圖;
圖51是沿著邊緣線尋找手腕點示意圖;
圖52是估算手掌區(qū)間(手指岔開)示意圖;
圖53是估算手掌區(qū)間(手指并攏)示意圖;
圖54是估算手掌區(qū)間(手指握拳)示意圖;
圖55是估算手掌大小(手指岔開)示意圖;
圖56是估算手掌大小(手指并攏)示意圖;
圖57是估算手掌大小(手指握拳)示意圖;
圖58是計算手掌區(qū)間以及重心(手指岔開)示意圖;
圖59是計算手掌區(qū)間以及重心(手指并攏)示意圖;
圖60是計算手掌區(qū)間以及重心(手指握拳)示意圖;
圖61是計算手指區(qū)域重心(手指岔開)示意圖;
圖62是計算手指區(qū)域重心(手指并攏)示意圖;
圖63是計算手指區(qū)域重心(手指握拳)示意圖;
圖64是以手掌重心為中心,人手大小rfHand為半徑的圓形區(qū)域示意圖;
圖65是以手掌重心為中心,旋轉(zhuǎn)rfHand為半徑的圓形區(qū)域示意圖;
圖66是以手掌和手指重心連線中心為正方形中心,找出正方形人手圖片區(qū)域示意圖;
圖67是方法1起始點和結(jié)束點特征示意圖;
圖68是方法3平滑彎曲度示意圖;
圖69是方法3找到起始點和結(jié)束點特征示意圖;
圖70是方法1起始點和結(jié)束點特征示意圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖,對本發(fā)明進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施方式僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明公開了一種基于圖像邊緣線彎曲度和距離特征的人手識別方法,包括以下步驟:
S1,獲取待進行人手識別的原始圖像;所述的待進行人手識別的原始圖像為待進行人手識別的原始深度圖像。
S2,對所述原始圖像進行預處理,得到所述原始圖像的邊緣線圖;
S3,沿所述邊緣線圖的邊緣線路徑進行遍歷,依次得到所述邊緣線路徑上取樣點的坐標值,再計算得到所述取樣點的彎曲度值;具體步驟為:遍歷所述邊緣線圖查找邊緣線路徑,將邊緣線路徑上取樣點序列化并將其坐標值存入數(shù)組,計算得到所述邊緣線路徑上每個所述取樣點的彎曲度值并存入所述數(shù)組;所述數(shù)組的每個元素均包含信息:所述取樣點位置坐標值和所述取樣點彎曲度值。計算得到所述邊緣線路徑上每個所述取樣點的彎曲度值的方法包括以下步驟:
以待計算取樣點為中心取一窗口,用所述窗口內(nèi)的邊緣線路徑距離減去所述窗口內(nèi)邊緣線路徑兩端點的直線距離所得之差作為所述待計算取樣點的彎曲度值;如果彎曲度值越大,則所述差值會越大,具體步驟如下:
第1步:假設(shè)當前取樣點的路徑/數(shù)組索引為i,彎曲度計算參數(shù)為cN;
第2步:累計從i-cN到i+cN點之間的邊緣線路徑上的所有相鄰兩點間距離到dSum;
第3步:計算i-cN到i+Cn點的直線距離dDir;
第4步:則得出i點的彎曲度值為dSum–dDir。
S4,應(yīng)用彎曲度和距離特征算法,根據(jù)所述取樣點與相關(guān)取樣點的距離特征 和/或 根據(jù)所述取樣點的彎曲度值進行計算,得出具備人手輪廓線彎曲度特征 和/或 具備人手輪廓線距離特征的邊緣線路徑片段,與得出的所述邊緣線路徑片段相對應(yīng)的邊緣線圖即為疑似人手區(qū)域邊緣線圖;與得出的所述邊緣線路徑片段相對應(yīng)的圖像即為疑似人手區(qū)域圖像;所述人手輪廓線彎曲度特征和人手輪廓線距離特征包括以下一種或幾種:人手手指區(qū)域取樣點彎曲度值整體上比其鄰近的手掌區(qū)域的取樣點的彎曲度值高的特征;人手手掌區(qū)域取樣點彎曲度值低而且有一部分取樣點靠近彎曲度值高的手指區(qū)域的特征;人手手掌區(qū)域彎曲度值低且手掌長度和寬度接近的特征。具體包括以下步驟:
根據(jù)人手手指區(qū)域取樣點彎曲度值整體上比其鄰近的手掌區(qū)域的取樣點的彎曲度值高的特點,根據(jù)彎曲度值高度先找到疑似手指區(qū)間,然后在這個疑似手指區(qū)間附近查找疑似人手區(qū)間;具體步驟包括:
第1步:在邊緣線路徑上查找所有疑似手指區(qū)間;
第1.1步 根據(jù)手指區(qū)域取樣點的彎曲度值整體上比其鄰近手掌區(qū)域的取樣點的彎曲度值高的特點,在邊緣線路徑上查找所有疑似手指區(qū)間;
第1.2步 計算邊緣路徑線上所述疑似手指區(qū)間對應(yīng)的手指區(qū)域重心:累加路徑上手指區(qū)間所有取樣點的坐標,除以取樣點的個數(shù)得到手指區(qū)間重心的坐標;
第2步:根據(jù)第1步得到的手指區(qū)間重心的坐標計算出一個或者幾個經(jīng)驗位置,并估算人手大?。?/p>
第3步:在邊緣線上路徑上從手指區(qū)間附近根據(jù)第2步算出的經(jīng)驗位置的距離大小取得疑似人手手掌區(qū)域;
和/或 S4具體包括以下步驟:
根據(jù)人手手掌區(qū)域取樣點的彎曲度值低而且有一部分取樣點靠近彎曲度值高的手指區(qū)域的特點,先獲取到手掌區(qū)域然后再延展獲取到整個疑似人手區(qū)域;
和/或 S4具體包括以下步驟:
根據(jù)人手手掌區(qū)域取樣點彎曲度低以及手掌長度和寬度接近的特點先獲取到手掌區(qū)域然后再延展獲取到整個疑似人手區(qū)域。
S5,對S4中得到的全部疑似人手區(qū)域邊緣線圖 和/或 疑似人手區(qū)域圖像逐一進行精確判定,得到確定的人手區(qū)域邊緣線圖 和/或 確定的人手區(qū)域圖像,從而得到人手位置信息,完成人手識別。精確判定的方法包括以下一種或幾種:基于訓練好的經(jīng)典的人手識別模型,對疑似人手區(qū)域圖像進行特征抽取及分類運算,判定這個疑似人手區(qū)域圖像是否是真正的手部區(qū)域;進一步根據(jù)人手輪廓彎曲度和距離的特征,應(yīng)用更多規(guī)則排除疑似人手區(qū)域邊緣線圖集合中的非人手區(qū)域邊緣線圖;利用模式識別方法,排除疑似人手區(qū)域邊緣線圖集合或疑似人手區(qū)域圖像集合中的非手部區(qū)域。
對得到確定的人手區(qū)域邊緣線圖 和/或 確定的人手區(qū)域圖像進行精細化計算識別前的預處理,以減少精細化識別的運算步驟提高精細化識別的準確率。
S6,對S5中得到的確定的人手區(qū)域邊緣線圖 和/或 確定的人手區(qū)域圖像進行精細計算識別,得到人手姿態(tài)信息。
本發(fā)明利用深度圖像易于計算邊緣線,以及邊緣線中人手區(qū)域彎曲度和直線距離的顯著特點,快速找出一幀深度圖像中所有疑似人手區(qū)域;進一步可以用一些辦法精準判定這些區(qū)域是否真正的人手區(qū)域,以及進一步精準計算各人手部位的位置;繼而可以根據(jù)識別精度需要繼續(xù)識別人手姿態(tài)信息。但是本發(fā)明并不依賴于深度圖像,其只要是能夠提取圖像邊緣線的彩色圖像或灰度圖像等都可以應(yīng)用本發(fā)明。以下通過實例詳細說明:
一、人手各輪廓位置標號和描述:
為方便對本發(fā)明方法的詳細講解,如圖2所示定義出人手輪廓以及輪廓各位置標號圖,圖中人手各輪廓位置標識描述:
人手輪廓位置1:手指指尖
人手輪廓位置2:手指中部
人手輪廓位置3:手指指蹼
人手輪廓位置4:手指外輪廓
人手輪廓位置5:手掌邊緣
人手輪廓位置6:手腕邊緣
人手輪廓位置7:邊緣線手指區(qū)間開始點
人手輪廓位置8:邊緣線手指區(qū)間結(jié)束點
人手輪廓位置9:邊緣線手指并攏區(qū)間開始點
人手輪廓位置10:邊緣線手指并攏區(qū)間結(jié)束點
人手輪廓位置11:邊緣線手指握拳區(qū)間開始點
人手輪廓位置12:邊緣線手指握拳區(qū)間結(jié)束點
對于各輪廓位置標識描述的幾點說明:
第一,大拇指和食指間較平滑位置可以定義為一個新的位置(譬如手掌次邊緣),但由于其彎曲度和手掌邊緣相同,從算法以及描述簡潔上考慮可以將它認為是手掌邊緣(人手輪廓位置5)的一部分。
第二,小拇指中部到它附近的手掌邊緣也可以定義為一個新位置(譬如手掌第二次邊緣),但和前述相同的理由,我們可以將它認為是手掌邊緣(人手輪廓位置5)的一部分。
第三,手指區(qū)間開始位置與通常理解位置可以不同,通常意義上講應(yīng)該是虛線圈7所表示的位置,但由于算法需要根據(jù)彎曲度和距離特征進行計算定位,使用實線圈7所示的位置算法上更容易定位;同理手指區(qū)間結(jié)束位置使用實線圈8所示位置比虛線圈8所示位置更合適;還是同樣的道理:邊緣線手指并攏區(qū)間開始點使用實線圈9所示位置比虛線圈9所示位置更合適,邊緣線手指并攏區(qū)間結(jié)束點使用實線圈10所示位置比虛線圈10所示位置更合適,邊緣線手指握拳區(qū)間開始點使用實線圈11所示位置比虛線圈11所示位置更合適,邊緣線手指握拳區(qū)間結(jié)束點使用實線圈12所示位置比虛線圈12所示位置更合適。
第四,手指區(qū)間、手指并攏區(qū)間及手指握拳區(qū)間的開始位置和結(jié)束位置,根據(jù)路徑方向不同是可以交換的。意思是說如果邊緣線路徑查找的方向相反,則原來的起始點會變?yōu)榻Y(jié)束點,原來的結(jié)束點會變?yōu)槠鹗键c。
二、圖像邊緣線中人手區(qū)域邊緣線的彎曲度和距離特征:
說明1:在下面彎曲度和距離特征中提到的預值,都可以根據(jù)疑似人手到攝像頭的距離進行調(diào)整:距攝像頭越遠則彎曲度預值越大,距攝像頭越遠則距離預值越小。
說明2:為了方便疑似人手區(qū)域查找計算的描述,提出人手區(qū)域計算經(jīng)驗點概念:利用人手邊緣線全部或者部分部位的坐標用一種經(jīng)驗算法運算出的位置,它位于人手的一個相對位置,譬如:
手指區(qū)間中心點:手指區(qū)間開始點和結(jié)束點連線的中點。
手指區(qū)域重心:人手邊緣線手指區(qū)域開始到結(jié)束所有點的坐標(橫坐標和縱坐標分開計算)平均值。
手掌區(qū)域重心:人手邊緣線手掌部分所有點的坐標的平均值。
注意這些經(jīng)驗位置不是嚴格物理學意義上的重心點或中心點,只是方便計算和理解而為這些點取了直觀的名字。
三、人手邊緣線彎曲度特征和距離特征總結(jié):
(一)人手邊緣線非手指區(qū)域彎曲度特點總結(jié):
手部輪廓彎曲度特征1:手腕點彎曲度小于一個彎曲度預值(預值1)。直觀涵義:就是相對于手指區(qū)域,手腕點的彎曲度較小。如圖3所示圖中圓圈所標記區(qū)域的點(人手輪廓位置6:手腕邊緣點),其彎曲度值低于一個彎曲度預值(預值1)。
手部輪廓彎曲度特征2:手掌邊緣(包括大拇指和食指之間平滑部位)點彎曲度小于一個彎曲度預值(預值2)。直觀涵義:就是相對于手指區(qū)域,手掌邊緣點的彎曲度較?。欢沂终七吘夵c的彎曲度比手腕點的彎曲度還要小。如圖4所示,圖中圓圈所標記區(qū)域的點(人手輪廓位置5:手掌邊緣點),其彎曲度值低于一個彎曲度預值(預值2);預值2可以比預值1小,意思是說手掌邊緣彎曲度比手腕彎曲度低。
(二)人手邊緣線手指叉開時手指區(qū)域彎曲度特點總結(jié):
手部輪廓彎曲度特征3:由手掌邊(包括大拇指和食指之間平滑部位)往相鄰指尖,彎曲度會上升。直觀涵義:在邊緣線上,手指區(qū)域彎曲度比手掌區(qū)域彎曲度高;這個上升過程就是手掌區(qū)域到手指區(qū)域彎曲度上升的過程。如圖5所示,圖中所示箭頭標識,由手掌邊(人手輪廓位置5)往相鄰指尖(人手輪廓位置1),彎曲度會上升。例如圖5中第一個上升過程為手掌邊到大拇指指尖,第二個上升箭頭標識手掌邊到第一個岔開的手指(食指,如食指彎曲則為中指)之間。
手部輪廓彎曲度特征4:手部輪廓彎曲度特征3由手掌邊往指尖方向,彎曲度上升過程中必定有一點彎曲度第一個大于一個彎曲度預值(預值3),這個點可認作計算上的手指區(qū)間起始點。直觀涵義:在邊緣線上由手掌區(qū)域往手指區(qū)域彎曲度上升過程中,有一個可以由彎曲度值(預值3)定位的邊界/分界點,這個邊界點可以被認為是手指區(qū)域起始點。如圖6所示,圖中所示箭頭標識,由手掌邊(人手輪廓位置5)往相鄰指尖(人手輪廓位置1),彎曲度會上升;而且必有一點第一個大于彎曲度預值3,我們可以認為這個點是手指區(qū)域起始點(人手輪廓位置7)。
手部輪廓彎曲度特征5:岔開手指指尖區(qū)域會出現(xiàn)彎曲度高峰,即沿著手指中部(或手掌邊緣)往指尖彎曲度會上升,沿著指尖往另外一側(cè)手指中部(或手掌邊緣)彎曲度會下降,在指尖區(qū)域形成彎曲度高峰。直觀涵義:岔開手指指尖部位彎曲度比相鄰手指中部(或手掌邊緣)彎曲度高。如圖7所示,圖中箭頭上下標識,靠近指尖(人手輪廓位置1)會形成彎曲度高峰,指尖彎曲度比鄰近兩邊手指中部(或手掌邊緣)彎曲度高。
手部輪廓彎曲度特征6:岔開手指指尖區(qū)域的高峰值必定大于一個彎曲度預值(預值4)。直觀涵義:岔開手指指尖部位彎曲度很高。如圖8所示,圖中岔開手指指尖彎曲度很高(高過預值4)。
手部輪廓彎曲度特征7:岔開手指位于指尖和指蹼之間的的手指中部會出現(xiàn)彎曲度低谷。即沿著指尖往指中彎曲度會降低,過了指中往指蹼彎曲度會上升,在手指中部有一個低谷;或者沿著指蹼往指中彎曲度會降低,過了指中往之間彎曲度會上升,在手指中部有一個低谷。直觀涵義:岔開手指的手指中部彎曲度比鄰近指尖和指蹼彎曲度都要低。如圖9所示,岔開手指中部(人手輪廓位置2)會形成彎曲度低谷:手指中部的彎曲度比鄰近指尖和指蹼的彎曲度都低。
手部輪廓彎曲度特征8:岔開手指時指蹼?yún)^(qū)域會出現(xiàn)彎曲度高峰,即沿著手指中部往指蹼彎曲度上升,過了指蹼往另一根手指中部彎曲度會下降,在指蹼形成彎曲度高峰。直觀涵義:岔開手指時指蹼?yún)^(qū)域彎曲度比相鄰手指中部彎曲度高。如圖10所示,岔開手指區(qū)域會在指蹼?yún)^(qū)域(人手輪廓位置3)形成高峰,與指尖部位形成彎曲度高峰類似。
手部輪廓彎曲度特征9:岔開手指時指蹼?yún)^(qū)域的高峰值必定大于一個彎曲度預值(預值5)。直觀涵義:岔開手指時指蹼部位彎曲度很高。如圖11所示,岔開手指指蹼彎曲度很高(高過預值5)。
手部輪廓彎曲度特征10:岔開手指時由與手掌邊(包括大拇指和食指之間平滑部位)相鄰的指尖往這個手掌邊,彎曲度會下降。直觀涵義:在岔開手指的邊緣線上,手掌區(qū)域彎曲度比手指區(qū)域彎曲度低;這個下降過程就是手指區(qū)域到手掌區(qū)域彎曲度下降的過程。如圖12所示箭頭標識,由指尖(人手輪廓位置1)到相鄰手掌邊(人手輪廓位置5),彎曲度會下降;例如圖12中的下降過程為小拇指尖到鄰近手掌邊彎曲度下降過程。需要注意的是,如果邊緣線路徑是有右往左這個過程就會變成彎曲度上升過程。
手部輪廓彎曲度特征11:岔開手指時手部輪廓由指尖往手掌邊方向,彎曲度下降過程中必定有一點彎曲度第一個小于或等于一個彎曲度預值(預值6),這個點可認作計算上的手指區(qū)間結(jié)束點(和前邊所述的手部輪廓彎曲度特征4中的手指區(qū)間起始點對應(yīng))。直觀涵義:在岔開手指的邊緣線上由指尖到手掌區(qū)域彎曲度下降過程中,有一個可以由彎曲度值(預值6)定位的邊界/分界點,這個邊界點可以被認為是手指區(qū)域結(jié)束點。如圖13所示箭頭標識,由指尖(人手輪廓位置1)往相鄰手掌邊(人手輪廓位置5),彎曲度會下降;而且必有一點第一個小于彎曲度預值6,我們可以認為這個點是手指區(qū)域結(jié)束點(人手輪廓位置8)。需要注意的是,如果邊緣線路徑是由右往左則找到的這個點就是手指區(qū)間起始點(人手輪廓位置7)。
手部輪廓彎曲度特征12:岔開手指的手指區(qū)間的整體彎曲度高于一個預值。可以采用以下辦法(但不限于這幾種)中的一種計算,也可以用多種辦法組合加權(quán)判斷。直觀涵義:岔開手指區(qū)域整體彎曲度很高。
方法1:對每一個樣本點計算其前后N個樣本組成的觀察窗口內(nèi),彎曲度平均值或類似平均值(如加權(quán)平均值),這個平均值作為輪廓點整體彎曲度參考值都必定大于一個彎曲度預值(預值7)。
方法2:對每一個樣本點計算其前后N個樣本組成的觀察窗口內(nèi),彎曲度高于一個彎曲度預值(預值8)點的個數(shù),這個比例值作為輪廓點整體彎曲度參考值必定大于一個個數(shù)預值(預值9);注意計算樣點的個數(shù)時可以加權(quán)(如彎曲度越高權(quán)重越大)。
如圖14所示,在岔開手指區(qū)域樣本點彎曲度普遍高于預值7;即使在在彎曲度低于預值7的指中(人手輪廓位置2),在它的整體彎曲度觀察窗口內(nèi)所有樣本彎曲度的平均值還是大于預值7。
手部輪廓彎曲度特征13:岔開手指的手指區(qū)間的彎曲度高位震蕩,振幅大于一個彎曲度預值(預值10)。直觀涵義:岔開手指區(qū)域整體彎曲度會大幅震蕩。如圖15所示,沿著輪廓邊緣路徑,樣本點在岔開手指區(qū)域大幅震蕩,其幅度大于預值10。
(三)人手邊緣線手指并攏時手指區(qū)域彎曲度特點總結(jié):
手部輪廓彎曲度特征14:手指并攏時由手掌邊(包括大拇指和食指之間平滑部位)往手指并攏區(qū)域,彎曲度會上升。直觀涵義:手指并攏區(qū)比手掌邊彎曲度高,沿邊緣線路徑由手掌邊往手指并攏區(qū)觀察彎曲度,彎曲度有一個上升過程。如圖16所示箭頭標識,由手掌邊(人手輪廓位置5)往手指并攏區(qū)(人手輪廓位置4)鄰彎曲度會上升。
手部輪廓彎曲度特征15:由手掌邊往手指并攏區(qū)域方向,彎曲度上升過程中必定有一點彎曲度第一個大于一個彎曲度預值(預值11),這個點可認作計算上的手指并攏區(qū)間起始點。直觀涵義:在邊緣線上由手掌區(qū)域往手指并攏區(qū)域彎曲度上升過程中,有一個可以由彎曲度值(預值11)定位的邊界/分界點,這個邊界點可以被認為是手指并攏區(qū)域的起始點(人手輪廓位置9)。如圖17所示箭頭標識,由手掌邊(人手輪廓位置5)往手指并攏區(qū)(人手輪廓位置4),彎曲度會上升;而且必有一點第一個大于彎曲度預值11,我們可以認為這個點是手指并攏區(qū)域起始點(人手輪廓位置9)。
手部輪廓彎曲度特征16:由手指并攏區(qū)域往相鄰手掌邊(包括大拇指和食指之間平滑部位),彎曲度會下降。直觀涵義:手掌邊彎曲度比手指并攏區(qū)彎曲度低,沿邊緣線路徑由手指并攏區(qū)往手掌邊觀察彎曲度,彎曲度有一個下降過程。需要注意的是,如果邊緣線路徑是由右往左這個過程就會變成彎曲度上升過程。如圖18所示箭頭標識,由手指并攏區(qū)(人手輪廓位置4)鄰近手掌邊(人手輪廓位置5)彎曲度會下降。
手部輪廓彎曲度特征17:由手指并攏區(qū)域往手掌邊方向,彎曲度下降過程中必定有一點彎曲度第一個小于一個彎曲度預值(預值12),這個點可認作計算上的手指并攏區(qū)間的結(jié)束點。直觀涵義:在邊緣線上由手指并攏區(qū)域往手掌區(qū)域彎曲度下降過程中,有一個可以由彎曲度值(預值12)定位的邊界/分界點,這個邊界點可以被認為是手指并攏區(qū)域的結(jié)束點(人手輪廓位置10)。如圖19所示箭頭標識,由手指并攏區(qū)(人手輪廓位置4)往手掌邊(人手輪廓位置5),彎曲度會下降;而且必有一點第一個小于彎曲度預值12,我們可以認為這個點是手指并攏區(qū)域結(jié)束點(人手輪廓位置10)。需要注意的是,如果邊緣線路徑是由右往左則找到的這個點就是手指并攏區(qū)間起始點(人手輪廓位置9)。
手部輪廓彎曲度特征18:在邊緣線的手指并攏區(qū)域,手指區(qū)間的整體彎曲度高于一個預值??梢圆捎靡韵罗k法(但不限于這幾種)中的一種計算,也可以用多種辦法組合加權(quán)判斷。直觀涵義:手指并攏區(qū)域整體彎曲度較高,比手掌和手腕部彎曲度高,但比岔開手指區(qū)域彎曲度低一些。
方法1:對每一個樣本點計算其前后N個樣本組成的觀察窗口內(nèi),彎曲度平均值或類似平均值(如加權(quán)平均值),這個平均值作為輪廓點整體彎曲度參考值都必定大于一個彎曲度預值(預值13)。
方法2:對每一個樣本點計算其前后N個樣本組成的觀察窗口內(nèi),彎曲度高于一個彎曲度預值(預值14)點的個數(shù),這個比例值作為輪廓點整體彎曲度參考值必定大于一個個數(shù)預值(預值15);注意計算樣點的個數(shù)時可以加權(quán)(如彎曲度越高權(quán)重越大)。
如圖20所示,在手指并攏區(qū)域樣本點彎曲度普遍高于預值13:即使在在彎曲度低于預值13的樣本點,在它的整體彎曲度觀察窗口內(nèi)所有樣本彎曲度的平均值還是大于預值13。
手部輪廓彎曲度特征19:在邊緣線的手指并攏區(qū)域,彎曲度值的震蕩幅度低于一個彎曲度(預值16)。直觀涵義:手指并攏區(qū)域,邊緣線彎曲度不是很高也不是很低,在一個范圍內(nèi)低幅震蕩。如圖21所示,手指并攏區(qū)域彎曲度會低幅度震蕩。如圖21所示,沿著輪廓邊緣路徑,樣本點在手指并攏區(qū)域低幅震蕩,其幅度小于預值16。
(四)人手邊緣線手指握拳時手指區(qū)域彎曲度特點總結(jié):
手部輪廓彎曲度特征20:由手掌邊(包括大拇指和食指之間平滑部位)往手指握拳區(qū)域,彎曲度會上升。直觀涵義:手指握拳區(qū)比手掌邊彎曲度高,沿邊緣線路徑由手掌邊往手指握拳區(qū)觀察彎曲度,彎曲度有一個上升過程。如圖22所示箭頭標識,由手掌邊(人手輪廓位置5)往手指握拳區(qū)(人手輪廓位置4)鄰彎曲度會上升。
手部輪廓彎曲度特征21:由手掌邊往手指握拳區(qū)域方向,彎曲度上升過程中必定有一點彎曲度第一個大于一個彎曲度預值(預值17),這個點可認作計算上的手指握拳區(qū)間起始點。直觀涵義:在邊緣線上由手掌區(qū)域往手指握拳區(qū)域彎曲度上升過程中,有一個可以由彎曲度值(預值17)定位的邊界/分界點,這個邊界點可以被認為是手指握拳區(qū)域的起始點(人手輪廓位置11)。如圖23所示箭頭標識,由手掌邊(人手輪廓位置5)往手指握拳區(qū)(人手輪廓位置4),彎曲度會上升;而且必有一點第一個大于彎曲度預值17,我們可以認為這個點是手指握拳區(qū)域起始點(人手輪廓位置11)。
手部輪廓彎曲度特征22:由手指握拳區(qū)域往相鄰手掌邊(包括大拇指和食指之間平滑部位),彎曲度會下降。直觀涵義:手掌邊彎曲度比手指握拳區(qū)彎曲度低,沿邊緣線路徑由手指握拳區(qū)往手掌邊觀察彎曲度,彎曲度有一個下降過程。需要注意的是,如果邊緣線路徑是由右往左這個過程就會變成彎曲度上升過程。如圖24所示箭頭標識,由手指握拳區(qū)(人手輪廓位置4)鄰近手掌邊(人手輪廓位置5)彎曲度會下降。
手部輪廓彎曲度特征23:由手指握拳區(qū)域往手掌邊方向,彎曲度下降過程中必定有一點彎曲度第一個小于一個彎曲度預值(預值18),這個點可認作計算上的手指握拳區(qū)間的結(jié)束點。直觀涵義:在邊緣線上由手指握拳區(qū)域往手掌區(qū)域彎曲度下降過程中,有一個可以由彎曲度值(預值18)定位的邊界/分界點,這個邊界點可以被認為是手指握拳區(qū)域的結(jié)束點(人手輪廓位置12)。如圖25所示箭頭標識,由手指握拳區(qū)(人手輪廓位置4)往手掌邊(人手輪廓位置5),彎曲度會下降;而且必有一點第一個小于彎曲度預值18,我們可以認為這個點是手指握拳區(qū)域結(jié)束點(人手輪廓位置12)。需要注意的是,如果邊緣線路徑是由右往左則找到的這個點就是手指握拳區(qū)間起始點(人手輪廓位置11)。
手部輪廓彎曲度特征24:在邊緣線的手指握拳區(qū)域,手指區(qū)間的整體彎曲度高于一個預值??梢圆捎靡韵罗k法(但不限于這幾種)中的一種計算,也可以用多種辦法組合加權(quán)判斷。直觀涵義:手指握拳區(qū)域整體彎曲度較高,比手掌和手腕部彎曲度高,但比岔開手指區(qū)域彎曲度低一些。
方法1:對每一個樣本點計算其前后N個樣本組成的觀察窗口內(nèi),彎曲度平均值或類似平均值(如加權(quán)平均值),這個平均值作為輪廓點整體彎曲度參考值都必定大于一個彎曲度預值(預值19)。
方法2:對每一個樣本點計算其前后N個樣本組成的觀察窗口內(nèi),彎曲度高于一個彎曲度預值(預值20)點的個數(shù),這個比例值作為輪廓點整體彎曲度參考值必定大于一個個數(shù)預值(預值21);注意計算樣點的個數(shù)時可以加權(quán)(如彎曲度越高權(quán)重越大)。
如圖26所示,在手指握拳區(qū)域樣本點彎曲度普遍高于預值19;即使在在彎曲度低于預值19的樣本點,在它的整體彎曲度觀察窗口內(nèi)所有樣本彎曲度的平均值還是大于預值19。
手部輪廓彎曲度特征25:在邊緣線的手指握拳區(qū)域,彎曲度值的震蕩幅度低于一個彎曲度(預值22)。直觀涵義:手指握拳區(qū)域,邊緣線彎曲度不是很高也不是很低,在一個范圍內(nèi)低幅震蕩。如圖27所示,沿著輪廓邊緣路徑,樣本點在手指握拳區(qū)域低幅震蕩,其幅度小于預值22。
(五)人手邊緣線距離特點總結(jié):
手部輪廓線距離特征1:人手輪廓線上任意兩點距離小于一個距離預值(預值23)。直觀涵義:人手輪廓基本是一個橢圓形輪廓,人手輪廓線上任意兩點的距離不可能超過橢圓長軸的長度。如圖28所示,人手輪廓線都包含在一個橢圓/球區(qū)域內(nèi),輪廓線任意兩點距離不可能超過橢圓長軸長度。
手部輪廓線距離特征2:手指岔開時同一根或者相鄰手指上任意兩點距離小于一個距離預值(預值24)。手指岔開時同一根或者相鄰手指的范圍可以通過彎曲度特征定位:彎曲度極高(第一指尖/指蹼)->彎曲度極低(第一指中)->彎曲度極高(第一指蹼/指尖)->彎曲度極低(第二指中)->彎曲度極高(第三指尖/指蹼)。直觀涵義:同一根手指上兩點最遠距離就是一根手指的長度;相鄰兩根手指能張開的角度一般不能大于60度,兩個指尖的距離也就基本不能大于一根手指的長度,所以兩根相鄰手指上任意兩點距離還是小于一根手指的長度。這個兩點以及距離的組合可以細化:譬如彎曲度極高點(如第一指尖/指蹼)和另外一個彎曲度極高點(如第二疑似指蹼/指尖)的距離小于一個距離預值(預值25);直觀上理解這個距離就是一根手指的長度。又譬如一個彎曲度最低點(如第一指中)到另外二個彎曲度最低點(第二指中)的距離小于一個距離預值(預值26);直觀上理解就是兩根手指中部的距離不能大于半根手指長度。如圖29所示,同一根/相鄰兩根手指任意兩點的距離不能超過一根手指的長度。
手部輪廓線距離特征3:人手輪廓線任意一點和人手區(qū)域計算經(jīng)驗點的距離小于一個距離預值(預值27)。這個輪廓線上的樣本點和經(jīng)驗點及距離預值的組合可以細化:譬如手掌邊緣線上任意一點距離手指重心距離小于一個距離預值(預值28);還譬如指蹼點距離手掌重心的距離小于另一個預值(預值29),以及指中/指尖到重心距離的預值等等,如圖30所示。
手部輪廓線距離特征4:人手輪廓線手掌一邊到另外一邊的距離小于一個距離預值(預值30),同時大于另一個預值(預值31)。直觀涵義:人手的兩個手掌邊基本平行,他們的距離和一根手指的長度差不多不會太大,也不會太小。如圖31所示,人手邊緣線箭頭所示的手掌邊緣線,基本可以判斷出兩邊距離約為一根手指大小。
手部輪廓線距離特征5:人手輪廓線手掌邊的長度大于一個距離預值(預值32)。直觀涵義:人手輪廓線手掌部分不會太短。如圖32所示,人手邊緣線箭頭所示的手掌邊緣線,其長度都不會太短。
四、以下通過對深度圖像中的人手識別實例對本發(fā)明的實現(xiàn)方法加以詳細說明:
算法實現(xiàn)步驟1:采集需要進行人手識別的原始深度圖像:
通過深度攝像機攝像,或讀取視頻/圖像文件或其他辦法,采集需要進行人手識別的原始深度圖像。如圖33所示,左邊為深度圖,右側(cè)為對應(yīng)的場景描繪。
算法實現(xiàn)步驟2:對原始深度圖像進行預處理,去除噪音和提取深度圖像的邊緣線:
對原始深度圖像進行預處理:去除噪音得到除噪后深度圖像,進行邊緣檢測得到邊緣線圖像,如圖34所示。
算法實現(xiàn)步驟3:對邊緣線圖進行遍歷列出所有邊緣線路徑數(shù)組,并計算路徑上每一點的彎曲度值:
遍歷邊緣線圖查找邊緣線路徑,將邊緣線路徑上樣本點序列化將其坐標存入數(shù)組,并計算邊緣線路徑上每個樣本點的彎曲度值也存入這個數(shù)組;數(shù)組的每個元素包含信息:樣本點位置坐標、樣本點的彎曲度值。
圖35為沿邊緣線計算彎曲度過程示例圖。
彎曲度的計算可以為曲率(計算量大,易受噪音干擾,不推薦),也可以是其他反映相對彎曲度特征的快速辦法。下面算法就是其中的一種彎曲度計算快速算法:直觀涵義:以樣本點為中心取一個窗口,用窗口內(nèi)樣本路徑距離減去兩端的直線距離作為彎曲度的值;如果彎曲度越大,則它們的差值會越大。
第1步:假設(shè)當前點的路徑/數(shù)組索引為i,快速彎曲度計算參數(shù)為cN(例如8);
第2步:從i-cN開始到i+cN點,累計所有路徑上相鄰兩點間距離到dSum;
第3步:計算i-cN到i+Cn點的直線距離dDir;
第4步:i點的快速彎曲度值為dSum–dDir。
算法實現(xiàn)步驟4:利用前邊所總結(jié)的人手輪廓線彎曲度特征和距離特征,通過一部分特征總結(jié)一個/一套具體算法從邊緣線路徑數(shù)組上查找出所有疑似人手區(qū)間/區(qū)域。根據(jù)手部輪廓彎曲度特征12、手部輪廓彎曲度特征18、手部輪廓彎曲度特征24,以及手部輪廓彎曲度特征2,無論手指岔開、并攏還是握拳,人手輪廓線在手指區(qū)域的彎曲度都高于鄰近的手掌區(qū)域(包括大拇指指蹼到食指間平滑部位)。根據(jù)這個手指區(qū)域彎曲度整體上比其鄰近手掌區(qū)域高的特點,最簡單直觀的辦法是根據(jù)彎曲度高度先找到疑似手指區(qū)間,然后在這個疑似手指區(qū)間附近查找疑似人手區(qū)間,目前能想到的大多數(shù)疑似人手區(qū)域查找辦法都屬于這種,也可以稱這類辦法為疑似人手區(qū)域查找的主要辦法。
疑似人手區(qū)域查找主要辦法的第一步:
在邊緣線路徑上查找所有疑似手指區(qū)間:
第1.1步根據(jù)手指區(qū)域彎曲度整體上比其鄰近手掌區(qū)域高的特點,在邊緣線路徑上查找所有疑似手指區(qū)間。利用“在邊緣線路徑上查找整體彎曲度高于一個預值的區(qū)間辦法”中的任意一種,彎曲度高度參數(shù)預值設(shè)為手部輪廓彎曲度特征24中提到的預值19(預值19和預值13相等,都小于預值7),查找邊緣線路徑數(shù)組上所有整體彎曲度較高的區(qū)間作為疑似手指區(qū)間。
第1.2步計算邊緣線路徑上疑似手指區(qū)間對應(yīng)的手指區(qū)域重心:累加路徑上手指區(qū)間所有點的坐標(水平坐標和垂直坐標分別累積),除以樣本點的個數(shù)就得到手指區(qū)間重心的坐標。
第2步:根據(jù)手指區(qū)域的坐標計算出一個或者幾個經(jīng)驗位置,并估算人手大小(一套距離值)。具體的實現(xiàn)說明見“疑似人手區(qū)域查找主要辦法第2步:估算人手大小及經(jīng)驗位置”一節(jié)。
第3步:在邊緣線上路徑上從手指區(qū)間附近根據(jù)第2步算出的經(jīng)驗位置的距離大小搜索疑似人手手掌區(qū)域。具體的實現(xiàn)說明見“疑似人手區(qū)域查找主要辦法第3步:計算人手手掌區(qū)域及手掌重心”一節(jié)。
疑似人手區(qū)域查找主要辦法的第2步和第3步還有別的辦法實現(xiàn),例如“疑似人手區(qū)域查找主要辦法(辦法二)第2步:估算人手大小及經(jīng)驗位置”和“疑似人手區(qū)域查找主要辦法(辦法二)第3步:計算人手手掌區(qū)域及手掌重心”中提到的另一套辦法。
除了以上提到的疑似人手區(qū)域查找主要辦法,也有不是先找手指區(qū)域的辦法:例如可以根據(jù)手掌區(qū)域彎曲度低而且有一部分靠近彎曲度高的手指,總結(jié)出一個經(jīng)驗位置算法然后查找整個人手區(qū)域,具體實現(xiàn)參見“疑似人手位置查找其他辦法一”。還可以根據(jù)手掌彎曲度低以及手掌長度和寬度接近的特點先找到手掌區(qū)域然后再找到整個疑似人手區(qū)域,具體實現(xiàn)參見“疑似人手位置查找其他辦法二”。
總之,通過一部分人手輪廓線彎曲度和距離特征,可以較容易找到所有疑似人手區(qū)域。當然這樣找到的疑似人手區(qū)間不一定包含的都是人手邊緣,有可能是胳膊拐、鼠標、人耳朵甚至是充電寶等進入深度攝像頭傳感區(qū)域而且有部分類似邊緣線彎曲度和距離特征的部位/物體;所以疑似人手區(qū)域必須進行進一步人手識別:精準判定這個疑似區(qū)域是否是真正的人手區(qū)域。
算法實現(xiàn)步驟5:對算法實現(xiàn)步驟4中查找出的所有疑似人手區(qū)域的集合,進一步精準判定運算,判定疑似區(qū)域是否真為人手區(qū)域。精準判定前,可以根據(jù)疑似人手區(qū)域的大小和方向信息對疑似人手區(qū)域做旋轉(zhuǎn)和伸縮后再進行精準判定,以簡化其他算法的運算。詳細實現(xiàn)參見“疑似人手區(qū)域精準判定預處理:疑似人手圖片區(qū)的旋轉(zhuǎn)/伸縮/切出”。
精準判定運算的辦法可以為以下辦法中的一種或幾種:
1.基于訓練好的經(jīng)典的人手識別模型,對所述深度圖像中疑似人手區(qū)域進行特征抽取及分類運算(例如采用HoG特征的AdaBoost分類器),判定這個疑似區(qū)域是否是真正的手部區(qū)域。
2.進一步根據(jù)人手輪廓彎曲度和距離的特征,用更多規(guī)則排除手部候選區(qū)域集合中的非手部區(qū)域。
3.利用其它現(xiàn)有的別的辦法如模式識別,或者好幾種辦法的綜合,進一步排除疑似人手區(qū)域集合中的非手部區(qū)域。
算法實現(xiàn)步驟6:對算法實現(xiàn)步驟5中精準判定為人手區(qū)域的圖像和邊緣路徑區(qū)間,根據(jù)人手各部位彎曲度和距離特征進行精細化運算,精細計算出各人手的姿態(tài)。
疑似人手區(qū)域查找主要辦法的第二步:
估算人手大小及經(jīng)驗位置:
第2.1步判斷疑似手指的形態(tài)
根據(jù)手指岔開時手指彎曲度有高于樣本點特點,判斷手指形態(tài)。
計算人手形態(tài):在疑似手指區(qū)間中,根據(jù)彎曲度最大值和震蕩幅度特征,可以判斷這個疑似手指區(qū)間的手指形態(tài):如果疑似手指區(qū)間彎曲度最大值大于手部輪廓彎曲度特征6中提到預值4,而且震蕩幅度大于手部輪廓彎曲度特征13中提到預值10,則這個疑似手指區(qū)域為手指岔開狀態(tài),否則為并攏/握拳狀態(tài),如圖36、圖37、圖38所示。
第2.2步計算疑似人手經(jīng)驗位置
計算手指區(qū)域重心點:累加路徑上疑似手指區(qū)間所有點的坐標(水平坐標和垂直坐標分別累積),除以樣本點的個數(shù)就得到這個手指區(qū)間重心的坐標。將手指區(qū)域重心點作為疑似人手區(qū)域定位的經(jīng)驗位置,如圖39、圖40、圖41所示。
第2.3步估算人手大小經(jīng)驗值rfHand
計算出手指區(qū)間重心的坐標后,計算如下值:
1.疑似手指區(qū)間開始點到重心的距離rfB
2.疑似手指區(qū)間結(jié)束點到重心的距離rfE
3.疑似手指區(qū)間彎曲度最高點到重心的距離rfCMax
4.疑似手指區(qū)間邊緣到另一個手指區(qū)間邊緣最近距離rfP
人手大小經(jīng)驗值rfHand可以被設(shè)定:rfHand=(rfB+rfE+rfCMax)*rfFct+rfP,rfFct為一個經(jīng)驗系數(shù)。經(jīng)驗系數(shù)rfFct根據(jù)手指形態(tài)不同:手指岔開區(qū)時較小(譬如為1),手指并攏/握拳時經(jīng)驗系數(shù)較大(譬如為1.5),如圖42、圖43、圖44所示。
疑似人手區(qū)域查找主要辦法的第三步:
計算人手手掌區(qū)域及手掌重心:
第3.1步在邊緣線路徑上從手指區(qū)間起始點往前步進,跳過其他疑似手指區(qū)域的樣本點(即跳過疑似大拇指區(qū)域),直至樣本點和第2.2步中計算出的疑似手指重心距離超過第2.3步中計算出的人手大小經(jīng)驗值rfHand,記這個步進的最后一個樣本點為手腕點1。
第3.2步在邊緣線路徑上從手指區(qū)間結(jié)束點往后步進,跳過其他疑似手指區(qū)域的樣本點(即跳過疑似大拇指區(qū)域),直至樣本點和第2.2步中計算出的疑似手指重心距離超過第2.3步中計算出的人手大小經(jīng)驗值rfHand,記這個步進的最后一個樣本點為手腕點2。
第3.3步第3.1步和第3.1步中在邊緣線路徑線上掃過的所有樣本點,即手指區(qū)間起始點到手腕點1以及手指區(qū)間結(jié)束點到手腕點2區(qū)間,就是邊緣線上這個疑似人手手掌區(qū)域。累積人手手掌區(qū)域樣本點坐標值之和除以樣本點的個數(shù),就是手掌重心,如圖45、圖46、圖47所示。
疑似人手區(qū)域查找主要辦法的第二步還可以采用以下方法實現(xiàn):估算人手大小及經(jīng)驗位置:
利用第1步找到的疑似手指區(qū)間開始點A0以及疑似手指區(qū)間結(jié)束點B0,算出他們連線中點坐標C0,以及連線長度d0,并計算如下一套經(jīng)驗值,如圖48所示:
經(jīng)驗值1:手指區(qū)間開始點A0到第一個手腕點WA的距離值raHand,可設(shè)為d0。經(jīng)驗值2:手指區(qū)間結(jié)束點B0到第二個手腕點WB的距離值rbHand,可設(shè)為d0。經(jīng)驗值3:手指區(qū)間起止點連線中點C0到兩個手腕點連線中點WC的距離值rcHand,可設(shè)為d0。經(jīng)驗值4:手指區(qū)間開始點A0到第二個手腕點WA的距離值rabHand,可設(shè)為d0的1.35倍。經(jīng)驗值5:手指區(qū)間結(jié)束點B0到第二個手腕點WB的距離值rbaHand,可設(shè)為d0的1.35倍。
疑似人手區(qū)域查找主要辦法的第三步還可以采用以下方法實現(xiàn):
計算人手手掌區(qū)域及手掌重心
基本思路為:在邊緣線路徑上從手指區(qū)間起始點往前步進和從手指區(qū)間結(jié)束點往后步進,直至樣本點和手指區(qū)域經(jīng)驗位置超出人手大小范圍;這些步進過程中人手大小范圍內(nèi)的樣本點都算作手掌邊緣點。
用如下步驟找尋第一個手腕點和第二個手腕點:
第3.1步初始化第一個手腕點WA為A0,初始化第二個手腕點WB為B0。
第3.2步將第一個手腕點WA沿著邊緣線往前步進一點,同時將第二個手腕點WB往后步進一點,直到找到真正的第一和第二個邊緣線手腕點。當最新WA和WB滿足如下條件中的任意一條,則認為已經(jīng)找到真正的兩個邊緣線手腕點,終止這一步;否則認為沒達到真正的手腕點,需要重復這一步(第3.2步):
條件3.2.1:計算手指區(qū)間開始點A0到WA的距離值da,da大于raHand。直觀理解就是WA距手指區(qū)間開始點A0太遠。
條件3.2.2:計算手指區(qū)間結(jié)束點B0到WB的距離值db,db大于rbHand。直觀理解就是WB距手指區(qū)間結(jié)束點B0太遠。
條件3.2.3:計算手指區(qū)間起止點連線中點C0到WA與WB連線中點WC的距離值dc,dc大于rcHand。直觀理解就是WC據(jù)手指區(qū)間起止點連線中點C0太遠。
條件3.2.4:計算手指區(qū)間開始點A0到WB的距離值dab,dab大于rabHand。直觀理解就是WA距手指區(qū)間結(jié)束點B0太遠。
條件3.2.5:計算手指區(qū)間結(jié)束點B0到WA的距離值dba,dba大于rbaHand。直觀理解就是WB距手指區(qū)間開始點A0太遠。
第3.3步第3.1步和第3.1步中在邊緣線路徑線上掃過的所有樣本點,即手指區(qū)間起始點A0到第一個手腕點WA以及手指區(qū)間結(jié)束點B0到第二個手腕點WB區(qū)間,就是邊緣線上這個疑似人手手掌區(qū)域。累積人手手掌區(qū)域樣本點坐標值之和除以樣本點的個數(shù),就是手掌重心,如圖49所示。
疑似人手位置的查找還可以采用其他一些方法,以下詳細說明:
疑似人手位置其他查找方法一:
基本思路:第一、根據(jù)手掌區(qū)域彎曲度低(手部輪廓彎曲度特征2)而手指區(qū)域彎曲度較高(手部輪廓彎曲度特征12、手部輪廓彎曲度特征18、手部輪廓彎曲度特征24)特點,找到靠近手指區(qū)域的手掌邊緣線區(qū)間,對其進行加權(quán)重心計算,得到一個疑似人手區(qū)域的經(jīng)驗位置;第二、估算人手大??;第三、根據(jù)第一步經(jīng)驗位置和第二步的人手大小,在邊緣線路徑上確定人手區(qū)間的范圍;第四、計算疑似手指區(qū)域并計算手指區(qū)域重心;第五、計算疑似手掌區(qū)域并計算手掌區(qū)域重心。
第1步利用一個經(jīng)驗算法,找出一個疑似人手的經(jīng)驗位置。
這個手掌經(jīng)驗位置是通過大量實際數(shù)據(jù)測試和統(tǒng)計出來,它位于手掌重心偏向大拇指側(cè)一些。這個經(jīng)驗位置是一個加權(quán)計算出的重心值,設(shè)計思想是將人手掌兩邊邊緣上的點權(quán)重值設(shè)計為很大,而邊緣線上別的位置權(quán)重很小,這樣加權(quán)計算出的重心就會在兩條手掌邊緣線中間(可以理解為手掌重心);而實際上由于權(quán)值選取辦法的關(guān)系,找到的位置在手掌重心靠大拇指那邊偏一些。
在這個疑似人手位置查找辦法中,為描述方便需要約定如下幾個經(jīng)驗性概念:
1.靠近手指的手掌邊緣點:邊緣線路徑數(shù)組中靠近手指的手掌邊緣點。這些樣本點有兩個特征:第1、彎曲度很低;第2、鄰近有彎曲度較高的點(因為靠近彎曲度較高的手指)。
2.手指區(qū)域點:邊緣線路徑數(shù)組中手指區(qū)域中的樣本點,這些樣本點彎曲度很高或者整體彎曲度較高。
3.靠近手指的手掌邊緣點的手掌邊緣權(quán)重值:就是被判定為“靠近手指的手掌邊緣點”的樣本點和遠離手指靠近手掌一側(cè)的程度,權(quán)重值高說明這個樣本點靠近手掌一側(cè),反之權(quán)重值低則說明樣本點靠近手指尖一側(cè)。
4.手掌經(jīng)驗位置計算統(tǒng)計區(qū)間:就是邊緣線路徑上一段連續(xù)的樣本區(qū)間,這個區(qū)間上所有點要么是被判定為“靠近手指的手掌邊緣點”,要么是“手指區(qū)域點”。
如圖50所示為三種手掌形態(tài)對應(yīng)的“靠近手指的手掌邊緣點”及其“手掌邊緣權(quán)重值”分布圖,樣本點對應(yīng)的圓圈越大則表明其“手掌邊緣權(quán)重值”權(quán)值越大。圖50中五邊形為人手經(jīng)驗位置。
以下為疑似人手經(jīng)驗位置查找算法:
約定:為描述簡潔性,稱邊緣線路徑被查找搜尋的區(qū)間為“被查找區(qū)間”,稱從被查找區(qū)間找到的“手掌經(jīng)驗位置計算統(tǒng)計區(qū)間”為“待查找區(qū)間”。
大致思路:
輸入?yún)?shù):
參數(shù)1:被查找區(qū)間起始點序號dcRB
參數(shù)2:被查找區(qū)間結(jié)束點序號dcRE
參數(shù)3:手掌部彎曲度預值參數(shù)dcfPLM
參數(shù)4:手指部彎曲度預值參數(shù)dcfFIN
參數(shù)5:路徑觀察窗口大小參數(shù)dcfWIN
參數(shù)6:判斷是否“靠近手指的手掌邊緣點”第一個個數(shù)參數(shù)dcfFPN1
參數(shù)7:判斷是否“靠近手指的手掌邊緣點”第二個個數(shù)參數(shù)dcfFPN2
輸出結(jié)果:
結(jié)果1:待查找區(qū)間起始點序號dcfB
結(jié)果2:待查找區(qū)間結(jié)束點序號dcfE
結(jié)果3:疑似人手經(jīng)驗點位置dcfEXP
臨時變量:
臨時變量1:路徑當前觀察樣本點序號dcfC
臨時變量2:樣本個數(shù)變量dcfPN
臨時變量3:樣本個數(shù)變量dcfFN
待查找區(qū)間查找具體步驟如下:
第1.1步 初始化人手經(jīng)驗位置查找用的參數(shù)。
第1.2步 對邊緣線路徑數(shù)組上的每一個樣本點(序號為dcfC),判定它是否“靠近手指的手掌邊緣點”并且計算其“手掌邊緣權(quán)重值”。
第1.2.1步 從dcfC-dcfWIN/2點開始到dcfC+dcfWIN/2點結(jié)束觀察區(qū)間內(nèi)(即以dcfC為中心dcfWIN大小窗口區(qū)間內(nèi)),統(tǒng)計彎曲度小于手掌部彎曲度預值參數(shù)dcfPLM的樣本點個數(shù)dcfPN,還統(tǒng)計彎曲度大于手指部彎曲度預值參數(shù)dcfFIN的樣本個數(shù)dcfFN。
第1.2.2步 同時滿足以下兩個條件,則認為當前樣本點dcfC為“靠近手指的手掌邊緣點”:
條件1.2.2.1:樣本點的彎曲度比手掌部彎曲度預值參數(shù)dcfPLM小。
條件1.2.2.2:第2.1步中統(tǒng)計的樣本點個數(shù)dcfFN大于“靠近手指的手掌邊緣點”第一個個數(shù)參數(shù)dcfFPN1,而且小于“靠近手指的手掌邊緣點”第二個個數(shù)參數(shù)dcfFPN2。
第1.2.3步滿足以下兩個條件中的一個,則認為當前樣本點dcfC為“手指區(qū)域樣本點”:
條件1.2.3.1:樣本點的彎曲度大于手指部彎曲度預值參數(shù)dcfFIN。
條件1.2.3.2:第1.2.1步中統(tǒng)計的樣本點個數(shù)dcfFN大于或等于“靠近手指的手掌邊緣點”第二個個數(shù)參數(shù)dcfFPN2。
第1.3步 找到“手掌經(jīng)驗位置計算統(tǒng)計區(qū)間”
根據(jù)第1.2.2步和第1.2.3步中的判斷,找到第一個被判定為“靠近手指的手掌邊緣點”或者“手指區(qū)域樣本點”的樣本點作為區(qū)間的開始點,然后再找到第一個既不是“靠近手指的手掌邊緣點”也不是“手指區(qū)域樣本點”的樣本點作為區(qū)間的結(jié)束點,這一步中找到的起始點和結(jié)束點間的區(qū)間就是待查找的“手掌經(jīng)驗位置計算統(tǒng)計區(qū)間”。
第1.4步 計算疑似人手經(jīng)驗位置
在“手掌經(jīng)驗位置計算統(tǒng)計區(qū)間”內(nèi),將第1.2.2步中判定為“靠近手指的手掌邊緣點”的坐標乘以第1.2.1步中的dcfPN作為權(quán)值,累計所有點的權(quán)值坐標后除以其權(quán)值和,得到的坐標位置作為疑似疑似人手經(jīng)驗點位置dcfEXP。
第2步 算出人手經(jīng)驗位置后,估算人手大小。
計算出人手經(jīng)驗位置后,在“手掌經(jīng)驗位置計算統(tǒng)計區(qū)間”內(nèi),計算所有彎曲度高于手指部彎曲度預值參數(shù)dcfFIN的樣本點到人手經(jīng)驗位置的距離值,用這些距離值的最大值rgMax和方差rgVar計算人手大小的估算結(jié)果rgHand:rgHand=(rgMax–rgVar)*rgFct,rgFct為經(jīng)驗系數(shù)可以根據(jù)手指形態(tài)不同調(diào)整:如手指岔開時設(shè)置為2,手指并攏/握拳時設(shè)置為3。
第3步 查找到手腕點,在邊緣線路徑上確定人手區(qū)間的范圍。
根據(jù)第1步經(jīng)驗位置和第2步的人手大小,在邊緣線路徑上確定人手區(qū)間的范圍。
具體辦法為從“靠近手指的手掌邊緣點”開始沿著邊緣線路徑往前查找,跳過彎曲度高于預值的樣本點(即跳過拇指區(qū)間),直到樣本點和人手經(jīng)驗位置的距離超過第2步估算的人手大小rgHand,則找到第一個手腕點;用類似辦法從“靠近手指的手掌邊緣點”開始沿著邊緣線路徑往后查找,就能查找到第二個手腕點;邊緣線路徑上兩個手腕點之間的區(qū)間就是疑似人手區(qū)間,如圖51所示。
第4步計算疑似手指區(qū)域并計算手指區(qū)域重心。
在第3步找到的疑似人手區(qū)間中,根據(jù)手指區(qū)間整體彎曲度高的特點利用“在邊緣線路徑上查找整體彎曲度高于一個預值的區(qū)間辦法”找出所有疑似手指區(qū)間。
累計每一個疑似手指區(qū)間所有樣本點坐標的和,除以樣本的個數(shù)就可以得到每個手指區(qū)間重心位置。
第4步計算疑似手掌區(qū)域并計算手掌區(qū)域重心。
邊緣線上第3步找到的疑似人手區(qū)間,刨去第4步找出的疑似手指區(qū)間,剩下幾個不連貫的區(qū)間就是疑似手掌區(qū)間。
累計疑似手指區(qū)間所有樣本點坐標的和,除以樣本的個數(shù)就可以得到整個手掌區(qū)間重心位置。
疑似人手位置其他查找方法二:
基本思路:第一、根據(jù)手掌邊緣線路徑上手掌區(qū)域彎曲度低,比較長,一側(cè)靠近手指區(qū)域的特點,找到靠近手指區(qū)域兩側(cè)的手掌邊緣線區(qū)間和夾在其中的手指區(qū)域。第二、根據(jù)手掌兩邊距離和手掌大小基本一致特點,由兩條手掌邊緣線距離估算手掌大小。第三、根據(jù)第二步估算的手掌大小,在邊緣線路徑上計算手掌區(qū)間,然后在這個手掌區(qū)間上計算手掌重心點。第四、根據(jù)第一步找到的手指區(qū)域計算手指區(qū)域重心點。
在這個疑似人手位置查找方法中,為描述方便需要約定如下幾個經(jīng)驗性概念:
1.邊緣線第一手掌區(qū)間:輪廓線路徑上,在疑似手指區(qū)間之前的手掌邊緣線區(qū)間。
2.邊緣線第二手掌區(qū)間:輪廓線路徑上,在疑似手指區(qū)間之后的手掌邊緣線區(qū)間。
3.疑似手指區(qū)間:輪廓線路徑上,在“邊緣線第一手掌區(qū)間”和“邊緣線第二手掌區(qū)間”之間彎曲度較高的區(qū)間。
疑似人手位置查找具體步驟如下:
第1步找到“靠近手指第一手掌邊緣線區(qū)間”和“靠近手指第二手掌邊緣線區(qū)間”和中間的“疑似手指區(qū)間”
第1.1步 利用手掌邊緣線的兩個特點:1、整體彎曲度低;2、長度比較長。利用“在邊緣線路徑上查找整體彎曲度低于一個預值的區(qū)間辦法”中的一種,找到所有疑似的“手掌邊緣線區(qū)間”(即符合這兩個特點的路徑區(qū)間)。
第1.2步 分析找到“靠近手指第一手掌邊緣線區(qū)間”和“靠近手指第二手掌邊緣線區(qū)間”和中間的“疑似手指區(qū)間”。如圖52、圖53、圖54所示。
第2步 估算手掌大小dP
第2.1步 沿著邊緣線路徑從“邊緣線第一手掌區(qū)間”結(jié)束點(即手指一側(cè))開始往前,每W個樣本點計算一次中點(需要跳過彎曲度高于手掌區(qū)域彎曲度預值的樣本點),記這些依次得到的中點為A1、A2、A3…
第2.2步 同時邊緣線路徑從“邊緣線第二手掌區(qū)間”起始點(即手指一側(cè))開始往后,每W個樣本點計算一次中點(需要跳過彎曲度高于手掌區(qū)域彎曲度預值的樣本點),記這些依次得到的中點為B1、B2、B3…
第2.3步 計算第2.1步和第2.2步得到中線的距離,即A1到B1的距離d1、A2到B2的距離d2、A3到B3的距離d3…
第2.4步 從第2.3步得到的結(jié)果d1、d2、d3結(jié)果序列中,取第一個極大值假設(shè)為dn(即dn的下一個值比dn小),并計算d1到dn數(shù)值的方差記為dV;則可估算手掌大小dP為:dn–dV/2。如圖55、圖56、圖57所示。
第3步 計算手掌區(qū)間以及重心
第3.1步 沿著邊緣線路徑從“邊緣線第一手掌區(qū)間”結(jié)束點(即手指一側(cè))開始往前步進,步進中跳過彎曲度高于手掌區(qū)域彎曲度預值的樣本點,直到樣本點到步進起始點的路徑長度超過手掌大小dP,則記最后的樣本點為第一手腕點。
第3.2步 同時邊緣線路徑從“邊緣線第二手掌區(qū)間”起始點(即手指一側(cè))開始往后步進,步進中跳過彎曲度高于手掌區(qū)域彎曲度預值的樣本點,直到樣本點到步進起始點的路徑長度超過手掌大小dP,則記最后的樣本點為第二手腕點。
第3.3步 第3.1步和第3.2步中所有掃過的樣本點共同構(gòu)成手掌區(qū)間(應(yīng)該是兩個或兩個以上不連續(xù)的區(qū)間),累計手掌區(qū)間所有樣本點坐標的結(jié)果除以樣本點的個數(shù)即得到手掌重心點。如圖58、圖59、圖60所示。
第4步 在“疑似手指區(qū)間”根據(jù)手指區(qū)間,計算手指區(qū)域重心點
在第1步中找到的疑似手指區(qū)間,累積所有樣本點坐標和然后除以樣本個數(shù)即得到手指區(qū)域重心。如圖61、圖62、圖63所示。
在對疑似人手區(qū)域進行精準判定前,為了簡省精準判定算法的運算量,還可以對找到的疑似人手區(qū)域進行預處理:
疑似人手區(qū)域精準判定預處理:疑似人手圖片區(qū)的旋轉(zhuǎn)/伸縮/切出
將所有查找出的疑似人手區(qū)域中對應(yīng)的深度圖內(nèi)容旋轉(zhuǎn)至手指向上,伸縮至和人手識別模型訓練圖片一樣大小,然后將這一小片圖像切出,以省掉后續(xù)非必要的運算。
經(jīng)過前述步驟后,我們已獲得疑似人手區(qū)域的信息:手掌重心位置,手指重心位置,以及人手大小估算值rfHand。具體旋轉(zhuǎn)/伸縮/切出過程如下:
第一步 劃出人手外圍圓形區(qū)。以手掌重心為中心,人手大小經(jīng)驗值rfHand為半徑劃出圓形區(qū)域。如圖64所示。
第二步 圖像旋轉(zhuǎn)。以手掌重心為中心,旋轉(zhuǎn)圓形較大圖像到手指重心位于手掌重心正上(即手掌重心到手指重心連線的方位角為0)。如圖65所示,旋轉(zhuǎn)后手指已經(jīng)朝向正上。
第三步 疑似人手區(qū)域圖像定位。從旋轉(zhuǎn)后的人手外圍圖中,選取一個正方形區(qū)域:以手掌重心和手指重心連線中點為正方形中心,人手大小rfHand的3/2為正方形的邊長。這個正方形區(qū)域的圖片即是我們需要的疑似人手區(qū)域圖片。如圖66所示。
第四步圖像伸縮及切出。將疑似人手正方形圖像伸縮至人手識別模型訓練標準用圖大小,并將伸縮后的圖像保存為疑似人手區(qū)域圖像的切出圖。需注意在伸縮圖像時,如果用到插值運算,插值運算的參數(shù)不能跨過邊界線。
以下再對本發(fā)明涉及的一些算法加以詳細說明:
一、在邊緣線路徑上查找整體彎曲度高于一個預值的區(qū)間辦法
約定:為描述簡潔性,稱邊緣線路徑被查找搜尋的區(qū)間為“被查找區(qū)間”,從稱被查找區(qū)間找到的“整體彎曲度高于一個預值的區(qū)間”結(jié)果為“待查找區(qū)間”。在邊緣線上查找整體彎曲度高于一個預值的帶查找區(qū)間方法有很多,不同方法的結(jié)果可能稍微不同但大致不會影響使用,我們列出其中的三種方法。
在邊緣線路徑上查找整體彎曲度高于一個預值的區(qū)間方法1:
大致思路:
“被查找區(qū)間”的起始點具有如下特點:
規(guī)則1、和后續(xù)一個窗口內(nèi)的樣本點(這些后續(xù)樣本點位于整體彎曲度高的區(qū)間內(nèi))相比,起始點本身彎曲度低。
規(guī)則2、后續(xù)點彎曲度整體比較高,即在一個觀察窗口內(nèi)所有樣本點彎曲度平均值高于預值。
“被查找區(qū)間”的結(jié)束點具有如下特點:
規(guī)則3、和后續(xù)一個窗口內(nèi)的樣本點(這些后續(xù)樣本點位于整體彎曲度高的區(qū)間之外)相比,結(jié)束點本身彎曲度低。
規(guī)則4、后續(xù)點彎曲度整體比較低,即在一個觀察窗口內(nèi)所有樣本點彎曲度平均值低于預值。
利用被查找區(qū)間起始點的特點(規(guī)則1和規(guī)則2),沿著邊緣線路徑逐樣本點尋找起始點;然后利用被查找區(qū)間結(jié)束點的特點(規(guī)則3和規(guī)則4)尋找結(jié)束點;起始點到結(jié)束點之間的區(qū)間就是被查找的“整體彎曲度高于一個預值的區(qū)間”。
如圖67所示,利用上述方法很容易找到被查找區(qū)間的起始點和結(jié)束點,但這些點與我們通常理解(“理想”情況下的)起始點和結(jié)束點有偏差,但對后續(xù)運算影響不大。
輸入?yún)?shù):
參數(shù)1:被查找區(qū)間起始點序號dcRB
參數(shù)2:被查找區(qū)間結(jié)束點序號dcRE
參數(shù)3:整體彎曲度預值參數(shù)dcfMIN
參數(shù)4:路徑觀察窗口大小參數(shù)dcfWIN
參數(shù)5:路徑觀察窗口第一個倍數(shù)參數(shù)WFB
參數(shù)6:路徑觀察窗口第二個倍數(shù)參數(shù)WFE
輸出結(jié)果:
結(jié)果1:待查找區(qū)間起始點序號dcfB
結(jié)果2:待查找區(qū)間結(jié)束點序號dcfE
臨時變量:
臨時變量1:路徑當前觀察樣本點序號dcfC
待查找區(qū)間查找具體步驟如下:
第1步 初始化查找區(qū)間起止點算法用的參數(shù)。
第2步 初始化當前觀察樣本點序號dcfC為被查找區(qū)間起始點序號dcRB(直觀理解就是將其放在查找區(qū)間起始點的位置)。
第3步判斷當前觀察樣本點dcfC是否待查找區(qū)間起始點:如果同時滿足如下兩個條件,則認為當前觀察樣本點dcfC就是待查找區(qū)間起始點;否則不是待查找區(qū)間起始點。
條件3.1.從dcfC+1點開始到dcfC+dcfWIN*WFB點結(jié)束觀察區(qū)間內(nèi),路徑上所有樣本點彎曲度的平均值大于dcfMIN。直觀理解就是當前觀察樣本點dcfC的后面dcfWIN的WFB倍觀察窗口內(nèi),所有數(shù)樣本點的整體(平均)彎曲度大于dcfMIN。
條件3.2.從dcfC+1點開始到dcfC+dcfWIN點結(jié)束觀察區(qū)間內(nèi),路徑上所有樣本點彎曲度的值都大于dcfC點的彎曲度值。直觀理解就是當前觀察樣本點dcfC后dcfWIN觀察窗口內(nèi),所有樣本點的彎曲度都比dcfC點的彎曲度大。
第4步 如果第3步判斷dcfC是待查找區(qū)間起始點,則將帶查找區(qū)間起始點序號dcfB設(shè)置為dcfC,跳轉(zhuǎn)至下一步(第5步);否則dcfC不是待查找區(qū)間起始點,則將dcfC的值加1,跳轉(zhuǎn)至第3步。
第5步 初始化當前觀察樣本點序號dcfC為dcfB+dcfWIN(直觀理解就是dcfE最起碼在dcfB后面間隔dcfWIN的地方,后續(xù)步驟只會增加它的值)。
第6步判斷當前觀察樣本點dcfC是否待查找區(qū)間結(jié)束點:如果同時滿足如下兩個條件,則認為當前觀察樣本點dcfC就是待查找區(qū)間結(jié)束點;否則不是待查找區(qū)間結(jié)束點。
條件6.1.從dcfC+1點開始到dcfC+dcfWIN*WFE點結(jié)束觀察區(qū)間內(nèi),路徑上所有樣本點彎曲度的平均值小于dcfMIN。直觀理解就是當前觀察樣本點dcfC的后dcfWIN的WFE倍觀察窗口內(nèi),所有數(shù)樣本點的整體(平均)彎曲度小于dcfMIN。
條件6.2.從dcfC+1點開始到dcfC+dcfWIN點結(jié)束觀察區(qū)間內(nèi),路徑上所有樣本點彎曲度都大于或等于dcfC點的彎曲度值。直觀理解就是當前觀察樣本點dcfC后dcfWIN觀察窗口內(nèi),所有樣本點的彎曲度都比dcfC點的彎曲度大(或相等)。
第7步 如果第6步判斷dcfC是否待查找區(qū)間結(jié)束點,則將帶查找區(qū)間起結(jié)束點序號dcfE設(shè)置為dcfC,結(jié)束(完成)這個帶查找區(qū)間的查找步驟;否則dcfC不是待查找區(qū)間結(jié)束點,則將dcfC的值加1,跳轉(zhuǎn)至第5步。
在邊緣線路徑上查找整體彎曲度高于一個預值的區(qū)間方法2
大致思路:
這個方法(方法2)和前述方法1基本類似,區(qū)別在于彎曲度整體性計算辦法調(diào)整:參數(shù)5和參數(shù)6換為個數(shù),條件3.1以及條件6.1更換為以樣本個數(shù)統(tǒng)計整體彎曲度情況。
輸入?yún)?shù):
參數(shù)1:被查找區(qū)間起始點序號dcRB
參數(shù)2:被查找區(qū)間結(jié)束點序號dcRE
參數(shù)3:整體彎曲度預值參數(shù)dcfMIN
參數(shù)4:路徑觀察窗口大小參數(shù)dcfWIN
參數(shù)5:路徑觀察窗口第一個個數(shù)參數(shù)nFB
參數(shù)6:路徑觀察窗口第二個個數(shù)參數(shù)nFE
輸出結(jié)果:
結(jié)果1:待查找區(qū)間起始點序號dcfB
結(jié)果2:待查找區(qū)間結(jié)束點序號dcfE
臨時變量:
臨時變量1:路徑當前觀察樣本點序號dcfC
待查找區(qū)間查找具體步驟如下:
第1步 初始化查找區(qū)間起止點算法用的參數(shù)。
第2步 初始化當前觀察樣本點序號dcfC為查找區(qū)間起始點序號dcRB(直觀理解就是將其放在查找區(qū)間起始點的位置)。
第3步 判斷當前觀察樣本點dcfC是否待查找區(qū)間起始點:如果同時滿足如下兩個條件,則認為當前觀察樣本點dcfC就是待查找區(qū)間起始點;否則不是待查找區(qū)間起始點。
條件3.1.從dcfC+1點開始到dcfC+dcfWIN點結(jié)束觀察區(qū)間內(nèi),路徑上彎曲度的平均值大于dcfMIN的樣本點個數(shù)大于第一個個數(shù)參數(shù)nFB。直觀理解就是當前觀察樣本點dcfC的后面dcfWIN大小觀察窗口內(nèi),超過nFB個樣本點的彎曲度都大于dcfMIN。
條件3.2.從dcfC+1點開始到dcfC+dcfWIN點結(jié)束觀察區(qū)間內(nèi),路徑上所有樣本點彎曲度的值都大于dcfC點的彎曲度值。直觀理解就是當前觀察樣本點dcfC后dcfWIN觀察窗口內(nèi),所有樣本點的彎曲度都比dcfC點的彎曲度大。
第4步 如果第3步判斷dcfC是待查找區(qū)間起始點,則將帶查找區(qū)間起始點序號dcfB設(shè)置為dcfC,跳轉(zhuǎn)至下一步(第5步);否則dcfC不是待查找區(qū)間起始點,則將dcfC的值加1,跳轉(zhuǎn)至第3步。
第5步 初始化當前觀察樣本點序號dcfC為dcfB+dcfWIN(直觀理解就是dcfE最起碼在dcfB后面間隔dcfWIN的地方,后續(xù)步驟只會增加它的值)。
第6步 判斷當前觀察樣本點dcfC是否待查找區(qū)間結(jié)束點:如果同時滿足如下兩個條件,則認為當前觀察樣本點dcfC就是待查找區(qū)間結(jié)束點;否則不是待查找區(qū)間結(jié)束點。
條件6.1.從dcfC+1點開始到dcfC+dcfWIN*WFE點結(jié)束觀察區(qū)間內(nèi),路徑上彎曲度的平均值小于dcfMIN的樣本點個數(shù)大于第二個個數(shù)參數(shù)nFE。直觀理解就是當前觀察樣本點dcfC的后面dcfWIN大小觀察窗口內(nèi),超過nFE個數(shù)樣本點的彎曲度于dcfMIN。
條件6.2.從dcfC+1點開始到dcfC+dcfWIN點結(jié)束觀察區(qū)間內(nèi),路徑上所有樣本點彎曲度都大于或等于dcfC點的彎曲度值。直觀理解就是當前觀察樣本點dcfC后dcfWIN觀察窗口內(nèi),所有樣本點的彎曲度都比dcfC點的彎曲度大(或相等)。
第7步 如果第6步判斷dcfC是否待查找區(qū)間結(jié)束點,則將帶查找區(qū)間起結(jié)束點序號dcfE設(shè)置為dcfC,結(jié)束(完成)這個帶查找區(qū)間的查找步驟;否則dcfC不是待查找區(qū)間結(jié)束點,則將dcfC的值加1,跳轉(zhuǎn)至第5步。
在邊緣線路徑上查找整體彎曲度高于一個預值的區(qū)間方法3
大致思路:
這個方法(方法3)和前兩種方法(方法1及方法2)構(gòu)思不同,這個算法先計算被查找區(qū)間每一個樣本點在一個窗口內(nèi)的平均值(相當于平滑去除干擾),然后找出第一個平均值較高的區(qū)間作為待查找區(qū)間。
輸入?yún)?shù):
參數(shù)1:被查找區(qū)間起始點序號dcRB
參數(shù)2:被查找區(qū)間結(jié)束點序號dcRE
參數(shù)3:整體彎曲度預值參數(shù)dcfMIN
參數(shù)4:路徑觀察窗口大小參數(shù)dcfWIN
輸出結(jié)果:
結(jié)果1:待查找區(qū)間起始點序號dcfB
結(jié)果2:待查找區(qū)間結(jié)束點序號dcfE
臨時變量:
臨時變量1:路徑當前觀察樣本點序號dcfC
待查找區(qū)間查找具體步驟如下:
第1步 初始化查找區(qū)間起止點算法用的參數(shù):
第2步 計算被查找區(qū)間每一個樣本的彎曲度平均值;一個樣本點dcfC彎曲度平均值計算辦法:以樣本點dcfC為中心以dcfWIN為窗口大小的區(qū)間內(nèi),求區(qū)間內(nèi)所有樣本點彎曲度之和最后除以dcfWIN得到dcfC樣本點的彎曲度平均值。
第3步初始化當前觀察樣本點序號dcfC為查找區(qū)間起始點序號dcRB(直觀理解就是將其放在查找區(qū)間起始點的位置)。
第4步判斷當前觀察樣本點dcfC是否待查找區(qū)間起始點:如果第2步算出的dcfC點的彎曲度平均值大于預值參數(shù)dcfMIN,則認為當前觀察樣本點dcfC就是待查找區(qū)間起始點;否則不是待查找區(qū)間起始點。
第5步 如果第4步判斷dcfC是待查找區(qū)間起始點,則將帶查找區(qū)間起始點序號dcfB設(shè)置為dcfC,跳轉(zhuǎn)至下一步(第6步);否則dcfC不是待查找區(qū)間起始點,則將dcfC的值加1,跳轉(zhuǎn)至第4步。
第6步 初始化當前觀察樣本點序號dcfC為dcfB+dcfWIN/2(直觀理解就是dcfE最起碼在dcfB后面間隔dcfWIN/2的地方,后續(xù)步驟只會增加它的值)。
第7步 判斷當前觀察樣本點dcfC是否待查找區(qū)間結(jié)束點:如果第2步算出的dcfC點彎曲度平均值小于預值參數(shù)dcfMIN,則認為當前觀察樣本點dcfC就是待查找區(qū)間結(jié)束點;否則不是待查找區(qū)間結(jié)束點。
第8步如果第7步判斷dcfC是待查找區(qū)間結(jié)束點,則將帶查找區(qū)間起結(jié)束點序號dcfE設(shè)置為dcfC,結(jié)束(完成)這個帶查找區(qū)間的查找步驟;否則dcfC不是待查找區(qū)間結(jié)束點,則將dcfC的值加1,跳轉(zhuǎn)至第7步。如圖68、圖69所示。
二、在邊緣線路徑上查找整體彎曲度低于一個預值的區(qū)間方法
約定:為描述簡潔性,稱邊緣線路徑被查找搜尋的區(qū)間為“被查找區(qū)間”,從稱被查找區(qū)間找到的“整體彎曲度低于一個預值的區(qū)間”結(jié)果為“待查找區(qū)間”。在邊緣線上查找整體彎曲度低于一個預值的帶查找區(qū)間辦法有很多,不同辦法的結(jié)果可能稍微不同但大致不影響使用,我們列出其中的兩種方法。
在邊緣線路徑上查找整體彎曲度低于一個預值的區(qū)間辦法1
大致思路:
“被查找區(qū)間”的起始點具有如下特點:
規(guī)則1、起始點本身彎曲度低。
“被查找區(qū)間”的結(jié)束點具有如下特點:
規(guī)則2、結(jié)束點本身彎曲度高;或者結(jié)束點本身彎曲度不算太低,后續(xù)一個窗口內(nèi)的樣本點(這些后續(xù)樣本點位于整體彎曲度高的區(qū)間之外)彎曲度整體比較高。如圖70所示。
輸入?yún)?shù):
參數(shù)1:被查找區(qū)間起始點序號dcRB
參數(shù)2:被查找區(qū)間結(jié)束點序號dcRE
參數(shù)3:整體彎曲度第一個預值參數(shù)dcfMAX
參數(shù)4:整體彎曲度第二個預值參數(shù)dcfMAX2
參數(shù)5:路徑觀察窗口大小參數(shù)dcfWIN
輸出結(jié)果:
結(jié)果1:待查找區(qū)間起始點序號dcfB
結(jié)果2:待查找區(qū)間結(jié)束點序號dcfE
臨時變量:
臨時變量1:路徑當前觀察樣本點序號dcfC
待查找區(qū)間查找具體步驟如下:
第1步 初始化查找區(qū)間起止點算法用的參數(shù)。
第2步 初始化當前觀察樣本點序號dcfC為被查找區(qū)間起始點序號dcRB(直觀理解就是將其放在查找區(qū)間起始點的位置)。
第3步判斷當前觀察樣本點dcfC是否待查找區(qū)間起始點:如果dcfC點的彎曲度值小于整體彎曲度預值參數(shù)dcfMAX,則認為當前觀察樣本點dcfC就是待查找區(qū)間起始點;否則不是待查找區(qū)間起始點。
第4步如果第3步判斷dcfC是待查找區(qū)間起始點,則將待查找區(qū)間起始點序號dcfB設(shè)置為dcfC,跳轉(zhuǎn)至下一步(第5步);否則dcfC不是待查找區(qū)間起始點,則將dcfC的值加1,跳轉(zhuǎn)至第3步。
第5步初始化當前觀察樣本點序號dcfC為dcfB+1。
第6步判斷當前觀察樣本點dcfC是否待查找區(qū)間結(jié)束點:如果滿足如下兩個條件中的一條,則認為當前觀察樣本點dcfC就是待查找區(qū)間結(jié)束點;否則不是待查找區(qū)間結(jié)束點。
條件6.1.dcfC點的彎曲度值大于整體彎曲度第二個預值參數(shù)dcfMAX2。
條件6.2.dcfC點的彎曲度值大于整體彎曲度預值參數(shù)dcfMAX,并且從dcfC+1點開始到dcfC+dcfWIN點結(jié)束觀察區(qū)間內(nèi)所有樣本點彎曲度的平均值大于整體彎曲度預值參數(shù)dcfMAX。
第7步 如果第6步判斷dcfC是否待查找區(qū)間結(jié)束點,則將帶查找區(qū)間起結(jié)束點序號dcfE設(shè)置為dcfC,結(jié)束(完成)這個帶查找區(qū)間的查找步驟;否則dcfC不是待查找區(qū)間結(jié)束點,則將dcfC的值加1,跳轉(zhuǎn)至第5步。
在邊緣線路徑上查找整體彎曲度低于一個預值的區(qū)間方法2
大致思路:
這個方法(方法2)和方法1基本類似,區(qū)別在于彎曲度整體性計算辦法調(diào)整:條件6.2更換樣本整體彎曲度情況觀察窗口位置。
輸入?yún)?shù):
參數(shù)1:被查找區(qū)間起始點序號dcRB
參數(shù)2:被查找區(qū)間結(jié)束點序號dcRE
參數(shù)3:整體彎曲度第一個預值參數(shù)dcfMAX
參數(shù)4:整體彎曲度第二個預值參數(shù)dcfMAX2
參數(shù)5:路徑觀察窗口大小參數(shù)dcfWIN
輸出結(jié)果:
結(jié)果1:待查找區(qū)間起始點序號dcfB
結(jié)果2:待查找區(qū)間結(jié)束點序號dcfE
臨時變量:
臨時變量1:路徑當前觀察樣本點序號dcfC
待查找區(qū)間查找具體步驟如下:
第1步 初始化查找區(qū)間起止點算法用的參數(shù):
第2步 初始化當前觀察樣本點序號dcfC為被查找區(qū)間起始點序號dcRB(直觀理解就是將其放在查找區(qū)間起始點的位置)。
第3步 判斷當前觀察樣本點dcfC是否待查找區(qū)間起始點:如果dcfC點的彎曲度值小于整體彎曲度預值參數(shù)dcfMAX,則認為當前觀察樣本點dcfC就是待查找區(qū)間起始點;否則不是待查找區(qū)間起始點。
第4步 如果第3步判斷dcfC是待查找區(qū)間起始點,則將待查找區(qū)間起始點序號dcfB設(shè)置為dcfC,跳轉(zhuǎn)至下一步(第5步);否則dcfC不是待查找區(qū)間起始點,則將dcfC的值加1,跳轉(zhuǎn)至第3步。
第5步 初始化當前觀察樣本點序號dcfC為dcfB+1。
第6步 判斷當前觀察樣本點dcfC是否待查找區(qū)間結(jié)束點:如果滿足如下兩個條件中的一條,則認為當前觀察樣本點dcfC就是待查找區(qū)間結(jié)束點;否則不是待查找區(qū)間結(jié)束點。
條件6.1.dcfC點的彎曲度值大于整體彎曲度第二個預值參數(shù)dcfMAX2
條件6.2.dcfC點的彎曲度值大于整體彎曲度預值參數(shù)dcfMAX,并且從dcfC-dcfWIN/2點開始到dcfC+dcfWIN/2點結(jié)束觀察區(qū)間內(nèi)所有樣本點彎曲度的平均值大于整體彎曲度預值參數(shù)dcfMAX。
第7步 如果第6步判斷dcfC是否待查找區(qū)間結(jié)束點,則將帶查找區(qū)間起結(jié)束點序號dcfE設(shè)置為dcfC,結(jié)束(完成)這個帶查找區(qū)間的查找步驟;否則dcfC不是待查找區(qū)間結(jié)束點,則將dcfC的值加1,跳轉(zhuǎn)至第5步。
通過采用本發(fā)明公開的上述技術(shù)方案,得到了如下有益的效果:
使用本發(fā)明的基于圖像邊緣線彎曲度和距離特征的人手識別方法,利用人手邊緣線彎曲度和距離特征,通過簡單的規(guī)則快速找出圖像中所有疑似人手區(qū)域,大大縮小人手識別算法的運算量;本發(fā)明中用到的彎曲度更能反映邊緣線圖一段區(qū)域內(nèi)總體彎曲情況,天然對噪音信號影響有抑制作用;而且彎曲度計算中只需進行查表(近距離兩點間距離可用查表加速而非平方和的平方根)、求和及相減等簡單快速運算,沒有曲率計算中的運算量很大的三角函數(shù)運算。使其能夠運行在處于大眾消費主流的嵌入式系統(tǒng)中,為實現(xiàn)AR/VR等設(shè)備的人手凌空輸入提供了可能。
以上所述僅是本發(fā)明的優(yōu)選實施方式,應(yīng)當指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應(yīng)視本發(fā)明的保護范圍。