一种基于图像边缘线弯曲度和距离特征的人手识别方法与流程

文档序号:12272297阅读:736来源:国知局
一种基于图像边缘线弯曲度和距离特征的人手识别方法与流程

本发明涉及人体智能识别技术领域,尤其涉及一种基于图像边缘线弯曲度和距离特征的人手识别方法。



背景技术:

目前现有的相关技术大致有如下几种:

1.基于特征和分类的经典的人手识别方法:这种方法需要步进型对整个图片中每一小片图片都进行特征和分类运算。这种识别方法优点是:算法成熟、识别比较准确,但缺点也很明显:就是运算量巨大,由于特征抽取和分类运算的运算量都很大,在整个图片上进行这种步进型运算的运算量非常大,导致这种方法基本无法放入处于大众消费主流的运算能力受限的低端嵌入式设备。

2.基于图像特征+模式匹配的人手识别方法:这个方法的优点是比经典方法快,缺点是受制于模板的数目(模板数目不可能很多),很难匹配真实世界中人手千变万化的形态;如果模板数量太多这种方法的运算量又会超过前述第一种基于分类器的经典人手识别方法。因此当人手实际姿态和模板库中模板不太一致时(譬如伸缩一个手指)模式匹配的结果就会很不理想,这就是模式匹配方法在人手识别上不是主流方法的原因。

3.基于神经网络及自适应学习的方法目前大多数还处于理论阶段,运算量比前述第一种经典算法还高出几个数量级,更不可能将其放在处于大众消费主流的低端嵌入式设备中运行。



技术实现要素:

本发明的目的在于提供一种基于图像边缘线弯曲度和距离特征的人手识别方法,从而解决现有技术中存在的前述问题。由于深度图像更容易提取图像边缘线,所以本方法更适用于深度图像,当然也可以适用于能够提取图像边缘线的其他彩色图像或黑白图像等图像。

为了实现上述目的,本发明采用的技术方案如下:

一种基于图像边缘线弯曲度和距离特征的人手识别方法,包括以下步骤:

S1,获取待进行人手识别的原始图像;

S2,对所述原始图像进行预处理,得到所述原始图像的边缘线图;

S3,沿所述边缘线图的边缘线路径进行遍历,依次得到所述边缘线路径上取样点的坐标值,再计算得到所述取样点的弯曲度值;

S4,应用弯曲度和距离特征算法,根据所述取样点与相关取样点的距离特征 和/或 根据所述取样点的弯曲度值进行计算,得出具备人手轮廓线弯曲度特征 和/或 具备人手轮廓线距离特征的边缘线路径片段,与得出的所述边缘线路径片段相对应的边缘线图即为疑似人手区域边缘线图;与得出的所述边缘线路径片段相对应的图像即为疑似人手区域图像;

S5,对S4中得到的全部疑似人手区域边缘线图 和/或 疑似人手区域图像逐一进行精确判定,得到确定的人手区域边缘线图 和/或 确定的人手区域图像,从而得到人手位置信息,完成人手识别。

优选的,还包括以下步骤:

S6,对S5中得到的确定的人手区域边缘线图 和/或 确定的人手区域图像进行精细计算识别,得到人手姿态信息。

优选的,S1中所述的待进行人手识别的原始图像为待进行人手识别的原始深度图像。

优选的,所述S3中所述的沿所述边缘线图的边缘线路径进行遍历,依次得到所述边缘线路径上取样点的坐标值,再计算得到所述取样点的弯曲度值,包括以下步骤:

遍历所述边缘线图查找边缘线路径,将边缘线路径上取样点序列化并将其坐标值存入数组,计算得到所述边缘线路径上每个所述取样点的弯曲度值并存入所述数组;所述数组的每个元素均包含信息:所述取样点位置坐标值和所述取样点弯曲度值。

优选的,S3中计算得到所述边缘线路径上每个所述取样点的弯曲度值的方法包括以下步骤:

以待计算取样点为中心取一窗口,用所述窗口内的边缘线路径距离减去所述窗口内边缘线路径两端点的直线距离所得之差作为所述待计算取样点的弯曲度值;如果弯曲度值越大,则所述差值会越大,具体步骤如下:

第1步:假设当前取样点的路径/数组索引为i,弯曲度计算参数为cN;

第2步:累计从i-cN到i+cN点之间的边缘线路径上的所有相邻两点间距离到dSum;

第3步:计算i-cN到i+Cn点的直线距离dDir;

第4步:则得出i点的弯曲度值为dSum–dDir。

优选的,所述S4中所述的得出具备人手轮廓线弯曲度特征 和/或 具备人手轮廓线距离特征的边缘线路径片段,中的人手轮廓线弯曲度特征和人手轮廓线距离特征包括以下一种或几种:

人手手指区域取样点弯曲度值整体上比其邻近的手掌区域的取样点的弯曲度值高的特征;

人手手掌区域取样点弯曲度值低而且有一部分取样点靠近弯曲度值高的手指区域的特征;

人手手掌区域弯曲度值低且手掌长度和宽度接近的特征。

优选的,

S4具体包括以下步骤:

根据人手手指区域取样点弯曲度值整体上比其邻近的手掌区域的取样点的弯曲度值高的特点,根据弯曲度值高度先找到疑似手指区间,然后在这个疑似手指区间附近查找疑似人手区间;具体步骤包括:

第1步:在边缘线路径上查找所有疑似手指区间;

第1.1步 根据手指区域取样点的弯曲度值整体上比其邻近手掌区域的取样点的弯曲度值高的特点,在边缘线路径上查找所有疑似手指区间;

第1.2步 计算边缘路径线上所述疑似手指区间对应的手指区域重心:累加路径上手指区间所有取样点的坐标,除以取样点的个数得到手指区间重心的坐标;

第2步:根据第1步得到的手指区间重心的坐标计算出一个或者几个经验位置,并估算人手大小;

第3步:在边缘线上路径上从手指区间附近根据第2步算出的经验位置的距离大小取得疑似人手手掌区域;

和/或 S4具体包括以下步骤:

根据人手手掌区域取样点的弯曲度值低而且有一部分取样点靠近弯曲度值高的手指区域的特点,先获取到手掌区域然后再延展获取到整个疑似人手区域;

和/或 S4具体包括以下步骤:

根据人手手掌区域取样点弯曲度低以及手掌长度和宽度接近的特点先获取到手掌区域然后再延展获取到整个疑似人手区域。

优选的,S5中精确判定的方法包括以下一种或几种:

基于训练好的经典的人手识别模型,对疑似人手区域图像进行特征抽取及分类运算,判定这个疑似人手区域图像是否是真正的手部区域;

进一步根据人手轮廓弯曲度和距离的特征,应用更多规则排除疑似人手区域边缘线图集合中的非人手区域边缘线图;

利用模式识别方法,排除疑似人手区域边缘线图集合或疑似人手区域图像集合中的非手部区域。

优选的,在S6前还包括对待精细化计算识别的所述人手区域图像进行预处理的步骤。

本发明的有益效果是:

使用本发明的基于图像边缘线弯曲度和距离特征的人手识别方法,利用人手边缘线弯曲度和距离特征,通过简单的规则快速找出图像中所有疑似人手区域,大大缩小人手识别算法的运算量;本发明中用到的弯曲度更能反映边缘线图一段区域内总体弯曲情况,天然对噪音信号影响有抑制作用;而且弯曲度计算中只需进行查表(近距离两点间距离可用查表加速而非平方和的平方根)、求和及相减等简单快速运算,没有曲率计算中的运算量很大的三角函数运算。使其能够运行在处于大众消费主流的嵌入式系统中,为实现AR/VR等设备的人手凌空输入提供了可能。

附图说明

图1是本发明的方法的总体流程示意图;

图2是人手轮廓及轮廓位置标识;

图3是人手手腕取样点弯曲度特征示意图;

图4是人手手掌边缘点弯曲度特征示意图;

图5是人手手掌边往指尖弯曲度特征示意图;

图6是人手手掌边往指尖弯曲度特征示意图2;

图7是人手指尖弯曲度形成高峰特征示意图;

图8是人手指尖弯曲度特征示意图;

图9是人手手指中部弯曲度特征示意图;

图10是人手指蹼区域形成弯曲度高峰特征示意图;

图11是人手指蹼区域弯曲度特征示意图;

图12是人手指尖往相邻手掌边弯曲度下滑特征示意图;

图13是指尖往相邻手掌边弯曲度特征示意图;

图14是岔开手指区域整体弯曲度特征示意图;

图15是岔开手指区域弯曲度震荡特征示意图;

图16是手掌边到手指并拢区弯曲度变化特征示意图;

图17是手掌边到手指并拢区弯曲度变化特征示意图2;

图18是手指并拢区到手掌边弯曲度变化特征示意图;

图19是手指并拢区到手掌边弯曲度变化特征示意图2;

图20是手指并拢手指区域整体弯曲度特征示意图;

图21是手指并拢区域弯曲度低幅震荡特征示意图;

图22是手掌边到手指握拳区弯曲度变化特征示意图;

图23是手掌边到手指握拳区弯曲度变化特征示意图2;

图24是手指握拳区到手掌边弯曲度变化特征示意图;

图25是手指握拳区到手掌边弯曲度变化特征示意图2;

图26是手指握拳手指区域整体弯曲度特征示意图;

图27是手指握拳区域弯曲度低幅震荡特征示意图;

图28是人手外轮廓距离特征示意图;

图29是同一根手指/相邻人手距离特征示意图;

图30是轮廓线中人手边缘线距离经验点的距离特征示意图;

图31是轮廓线中手掌边缘线特征示意图;

图32是轮廓线中手掌边缘线特征示意图2;

图33是原始深度图像及对应的真实场景示意图;

图34是深度图像预处理计算出轮廓线/边缘线示意图;

图35是深度图边缘线(片段)弯曲度计算示例示意图;

图36是手指形态判定(手指岔开)示意图;

图37是手指形态判定(手指并拢)示意图;

图38是手指形态判定(手指握拳)示意图;

图39是手指重心计算(手指岔开)示意图;

图40是手指重心计算(手指并拢)示意图;

图41是手指重心计算(手指握拳)示意图;

图42是人手大小估算(手指岔开)示意图;

图43是人手大小估算(手指并拢)示意图;

图44是人手大小估算(手指握拳)示意图;

图45是手掌区域估算(手指岔开)示意图;

图46是手掌区域估算(手指并拢)示意图;

图47是手掌区域估算(手指握拳)示意图;

图48是计算人手区域经验值示意图;

图49是查找人手手腕点示意图;

图50是靠近手指的手掌边缘点分布及权重值示意图;

图51是沿着边缘线寻找手腕点示意图;

图52是估算手掌区间(手指岔开)示意图;

图53是估算手掌区间(手指并拢)示意图;

图54是估算手掌区间(手指握拳)示意图;

图55是估算手掌大小(手指岔开)示意图;

图56是估算手掌大小(手指并拢)示意图;

图57是估算手掌大小(手指握拳)示意图;

图58是计算手掌区间以及重心(手指岔开)示意图;

图59是计算手掌区间以及重心(手指并拢)示意图;

图60是计算手掌区间以及重心(手指握拳)示意图;

图61是计算手指区域重心(手指岔开)示意图;

图62是计算手指区域重心(手指并拢)示意图;

图63是计算手指区域重心(手指握拳)示意图;

图64是以手掌重心为中心,人手大小rfHand为半径的圆形区域示意图;

图65是以手掌重心为中心,旋转rfHand为半径的圆形区域示意图;

图66是以手掌和手指重心连线中心为正方形中心,找出正方形人手图片区域示意图;

图67是方法1起始点和结束点特征示意图;

图68是方法3平滑弯曲度示意图;

图69是方法3找到起始点和结束点特征示意图;

图70是方法1起始点和结束点特征示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。

本发明公开了一种基于图像边缘线弯曲度和距离特征的人手识别方法,包括以下步骤:

S1,获取待进行人手识别的原始图像;所述的待进行人手识别的原始图像为待进行人手识别的原始深度图像。

S2,对所述原始图像进行预处理,得到所述原始图像的边缘线图;

S3,沿所述边缘线图的边缘线路径进行遍历,依次得到所述边缘线路径上取样点的坐标值,再计算得到所述取样点的弯曲度值;具体步骤为:遍历所述边缘线图查找边缘线路径,将边缘线路径上取样点序列化并将其坐标值存入数组,计算得到所述边缘线路径上每个所述取样点的弯曲度值并存入所述数组;所述数组的每个元素均包含信息:所述取样点位置坐标值和所述取样点弯曲度值。计算得到所述边缘线路径上每个所述取样点的弯曲度值的方法包括以下步骤:

以待计算取样点为中心取一窗口,用所述窗口内的边缘线路径距离减去所述窗口内边缘线路径两端点的直线距离所得之差作为所述待计算取样点的弯曲度值;如果弯曲度值越大,则所述差值会越大,具体步骤如下:

第1步:假设当前取样点的路径/数组索引为i,弯曲度计算参数为cN;

第2步:累计从i-cN到i+cN点之间的边缘线路径上的所有相邻两点间距离到dSum;

第3步:计算i-cN到i+Cn点的直线距离dDir;

第4步:则得出i点的弯曲度值为dSum–dDir。

S4,应用弯曲度和距离特征算法,根据所述取样点与相关取样点的距离特征 和/或 根据所述取样点的弯曲度值进行计算,得出具备人手轮廓线弯曲度特征 和/或 具备人手轮廓线距离特征的边缘线路径片段,与得出的所述边缘线路径片段相对应的边缘线图即为疑似人手区域边缘线图;与得出的所述边缘线路径片段相对应的图像即为疑似人手区域图像;所述人手轮廓线弯曲度特征和人手轮廓线距离特征包括以下一种或几种:人手手指区域取样点弯曲度值整体上比其邻近的手掌区域的取样点的弯曲度值高的特征;人手手掌区域取样点弯曲度值低而且有一部分取样点靠近弯曲度值高的手指区域的特征;人手手掌区域弯曲度值低且手掌长度和宽度接近的特征。具体包括以下步骤:

根据人手手指区域取样点弯曲度值整体上比其邻近的手掌区域的取样点的弯曲度值高的特点,根据弯曲度值高度先找到疑似手指区间,然后在这个疑似手指区间附近查找疑似人手区间;具体步骤包括:

第1步:在边缘线路径上查找所有疑似手指区间;

第1.1步 根据手指区域取样点的弯曲度值整体上比其邻近手掌区域的取样点的弯曲度值高的特点,在边缘线路径上查找所有疑似手指区间;

第1.2步 计算边缘路径线上所述疑似手指区间对应的手指区域重心:累加路径上手指区间所有取样点的坐标,除以取样点的个数得到手指区间重心的坐标;

第2步:根据第1步得到的手指区间重心的坐标计算出一个或者几个经验位置,并估算人手大小;

第3步:在边缘线上路径上从手指区间附近根据第2步算出的经验位置的距离大小取得疑似人手手掌区域;

和/或 S4具体包括以下步骤:

根据人手手掌区域取样点的弯曲度值低而且有一部分取样点靠近弯曲度值高的手指区域的特点,先获取到手掌区域然后再延展获取到整个疑似人手区域;

和/或 S4具体包括以下步骤:

根据人手手掌区域取样点弯曲度低以及手掌长度和宽度接近的特点先获取到手掌区域然后再延展获取到整个疑似人手区域。

S5,对S4中得到的全部疑似人手区域边缘线图 和/或 疑似人手区域图像逐一进行精确判定,得到确定的人手区域边缘线图 和/或 确定的人手区域图像,从而得到人手位置信息,完成人手识别。精确判定的方法包括以下一种或几种:基于训练好的经典的人手识别模型,对疑似人手区域图像进行特征抽取及分类运算,判定这个疑似人手区域图像是否是真正的手部区域;进一步根据人手轮廓弯曲度和距离的特征,应用更多规则排除疑似人手区域边缘线图集合中的非人手区域边缘线图;利用模式识别方法,排除疑似人手区域边缘线图集合或疑似人手区域图像集合中的非手部区域。

对得到确定的人手区域边缘线图 和/或 确定的人手区域图像进行精细化计算识别前的预处理,以减少精细化识别的运算步骤提高精细化识别的准确率。

S6,对S5中得到的确定的人手区域边缘线图 和/或 确定的人手区域图像进行精细计算识别,得到人手姿态信息。

本发明利用深度图像易于计算边缘线,以及边缘线中人手区域弯曲度和直线距离的显著特点,快速找出一帧深度图像中所有疑似人手区域;进一步可以用一些办法精准判定这些区域是否真正的人手区域,以及进一步精准计算各人手部位的位置;继而可以根据识别精度需要继续识别人手姿态信息。但是本发明并不依赖于深度图像,其只要是能够提取图像边缘线的彩色图像或灰度图像等都可以应用本发明。以下通过实例详细说明:

一、人手各轮廓位置标号和描述:

为方便对本发明方法的详细讲解,如图2所示定义出人手轮廓以及轮廓各位置标号图,图中人手各轮廓位置标识描述:

人手轮廓位置1:手指指尖

人手轮廓位置2:手指中部

人手轮廓位置3:手指指蹼

人手轮廓位置4:手指外轮廓

人手轮廓位置5:手掌边缘

人手轮廓位置6:手腕边缘

人手轮廓位置7:边缘线手指区间开始点

人手轮廓位置8:边缘线手指区间结束点

人手轮廓位置9:边缘线手指并拢区间开始点

人手轮廓位置10:边缘线手指并拢区间结束点

人手轮廓位置11:边缘线手指握拳区间开始点

人手轮廓位置12:边缘线手指握拳区间结束点

对于各轮廓位置标识描述的几点说明:

第一,大拇指和食指间较平滑位置可以定义为一个新的位置(譬如手掌次边缘),但由于其弯曲度和手掌边缘相同,从算法以及描述简洁上考虑可以将它认为是手掌边缘(人手轮廓位置5)的一部分。

第二,小拇指中部到它附近的手掌边缘也可以定义为一个新位置(譬如手掌第二次边缘),但和前述相同的理由,我们可以将它认为是手掌边缘(人手轮廓位置5)的一部分。

第三,手指区间开始位置与通常理解位置可以不同,通常意义上讲应该是虚线圈7所表示的位置,但由于算法需要根据弯曲度和距离特征进行计算定位,使用实线圈7所示的位置算法上更容易定位;同理手指区间结束位置使用实线圈8所示位置比虚线圈8所示位置更合适;还是同样的道理:边缘线手指并拢区间开始点使用实线圈9所示位置比虚线圈9所示位置更合适,边缘线手指并拢区间结束点使用实线圈10所示位置比虚线圈10所示位置更合适,边缘线手指握拳区间开始点使用实线圈11所示位置比虚线圈11所示位置更合适,边缘线手指握拳区间结束点使用实线圈12所示位置比虚线圈12所示位置更合适。

第四,手指区间、手指并拢区间及手指握拳区间的开始位置和结束位置,根据路径方向不同是可以交换的。意思是说如果边缘线路径查找的方向相反,则原来的起始点会变为结束点,原来的结束点会变为起始点。

二、图像边缘线中人手区域边缘线的弯曲度和距离特征:

说明1:在下面弯曲度和距离特征中提到的预值,都可以根据疑似人手到摄像头的距离进行调整:距摄像头越远则弯曲度预值越大,距摄像头越远则距离预值越小。

说明2:为了方便疑似人手区域查找计算的描述,提出人手区域计算经验点概念:利用人手边缘线全部或者部分部位的坐标用一种经验算法运算出的位置,它位于人手的一个相对位置,譬如:

手指区间中心点:手指区间开始点和结束点连线的中点。

手指区域重心:人手边缘线手指区域开始到结束所有点的坐标(横坐标和纵坐标分开计算)平均值。

手掌区域重心:人手边缘线手掌部分所有点的坐标的平均值。

注意这些经验位置不是严格物理学意义上的重心点或中心点,只是方便计算和理解而为这些点取了直观的名字。

三、人手边缘线弯曲度特征和距离特征总结:

(一)人手边缘线非手指区域弯曲度特点总结:

手部轮廓弯曲度特征1:手腕点弯曲度小于一个弯曲度预值(预值1)。直观涵义:就是相对于手指区域,手腕点的弯曲度较小。如图3所示图中圆圈所标记区域的点(人手轮廓位置6:手腕边缘点),其弯曲度值低于一个弯曲度预值(预值1)。

手部轮廓弯曲度特征2:手掌边缘(包括大拇指和食指之间平滑部位)点弯曲度小于一个弯曲度预值(预值2)。直观涵义:就是相对于手指区域,手掌边缘点的弯曲度较小;而且手掌边缘点的弯曲度比手腕点的弯曲度还要小。如图4所示,图中圆圈所标记区域的点(人手轮廓位置5:手掌边缘点),其弯曲度值低于一个弯曲度预值(预值2);预值2可以比预值1小,意思是说手掌边缘弯曲度比手腕弯曲度低。

(二)人手边缘线手指叉开时手指区域弯曲度特点总结:

手部轮廓弯曲度特征3:由手掌边(包括大拇指和食指之间平滑部位)往相邻指尖,弯曲度会上升。直观涵义:在边缘线上,手指区域弯曲度比手掌区域弯曲度高;这个上升过程就是手掌区域到手指区域弯曲度上升的过程。如图5所示,图中所示箭头标识,由手掌边(人手轮廓位置5)往相邻指尖(人手轮廓位置1),弯曲度会上升。例如图5中第一个上升过程为手掌边到大拇指指尖,第二个上升箭头标识手掌边到第一个岔开的手指(食指,如食指弯曲则为中指)之间。

手部轮廓弯曲度特征4:手部轮廓弯曲度特征3由手掌边往指尖方向,弯曲度上升过程中必定有一点弯曲度第一个大于一个弯曲度预值(预值3),这个点可认作计算上的手指区间起始点。直观涵义:在边缘线上由手掌区域往手指区域弯曲度上升过程中,有一个可以由弯曲度值(预值3)定位的边界/分界点,这个边界点可以被认为是手指区域起始点。如图6所示,图中所示箭头标识,由手掌边(人手轮廓位置5)往相邻指尖(人手轮廓位置1),弯曲度会上升;而且必有一点第一个大于弯曲度预值3,我们可以认为这个点是手指区域起始点(人手轮廓位置7)。

手部轮廓弯曲度特征5:岔开手指指尖区域会出现弯曲度高峰,即沿着手指中部(或手掌边缘)往指尖弯曲度会上升,沿着指尖往另外一侧手指中部(或手掌边缘)弯曲度会下降,在指尖区域形成弯曲度高峰。直观涵义:岔开手指指尖部位弯曲度比相邻手指中部(或手掌边缘)弯曲度高。如图7所示,图中箭头上下标识,靠近指尖(人手轮廓位置1)会形成弯曲度高峰,指尖弯曲度比邻近两边手指中部(或手掌边缘)弯曲度高。

手部轮廓弯曲度特征6:岔开手指指尖区域的高峰值必定大于一个弯曲度预值(预值4)。直观涵义:岔开手指指尖部位弯曲度很高。如图8所示,图中岔开手指指尖弯曲度很高(高过预值4)。

手部轮廓弯曲度特征7:岔开手指位于指尖和指蹼之间的的手指中部会出现弯曲度低谷。即沿着指尖往指中弯曲度会降低,过了指中往指蹼弯曲度会上升,在手指中部有一个低谷;或者沿着指蹼往指中弯曲度会降低,过了指中往之间弯曲度会上升,在手指中部有一个低谷。直观涵义:岔开手指的手指中部弯曲度比邻近指尖和指蹼弯曲度都要低。如图9所示,岔开手指中部(人手轮廓位置2)会形成弯曲度低谷:手指中部的弯曲度比邻近指尖和指蹼的弯曲度都低。

手部轮廓弯曲度特征8:岔开手指时指蹼区域会出现弯曲度高峰,即沿着手指中部往指蹼弯曲度上升,过了指蹼往另一根手指中部弯曲度会下降,在指蹼形成弯曲度高峰。直观涵义:岔开手指时指蹼区域弯曲度比相邻手指中部弯曲度高。如图10所示,岔开手指区域会在指蹼区域(人手轮廓位置3)形成高峰,与指尖部位形成弯曲度高峰类似。

手部轮廓弯曲度特征9:岔开手指时指蹼区域的高峰值必定大于一个弯曲度预值(预值5)。直观涵义:岔开手指时指蹼部位弯曲度很高。如图11所示,岔开手指指蹼弯曲度很高(高过预值5)。

手部轮廓弯曲度特征10:岔开手指时由与手掌边(包括大拇指和食指之间平滑部位)相邻的指尖往这个手掌边,弯曲度会下降。直观涵义:在岔开手指的边缘线上,手掌区域弯曲度比手指区域弯曲度低;这个下降过程就是手指区域到手掌区域弯曲度下降的过程。如图12所示箭头标识,由指尖(人手轮廓位置1)到相邻手掌边(人手轮廓位置5),弯曲度会下降;例如图12中的下降过程为小拇指尖到邻近手掌边弯曲度下降过程。需要注意的是,如果边缘线路径是有右往左这个过程就会变成弯曲度上升过程。

手部轮廓弯曲度特征11:岔开手指时手部轮廓由指尖往手掌边方向,弯曲度下降过程中必定有一点弯曲度第一个小于或等于一个弯曲度预值(预值6),这个点可认作计算上的手指区间结束点(和前边所述的手部轮廓弯曲度特征4中的手指区间起始点对应)。直观涵义:在岔开手指的边缘线上由指尖到手掌区域弯曲度下降过程中,有一个可以由弯曲度值(预值6)定位的边界/分界点,这个边界点可以被认为是手指区域结束点。如图13所示箭头标识,由指尖(人手轮廓位置1)往相邻手掌边(人手轮廓位置5),弯曲度会下降;而且必有一点第一个小于弯曲度预值6,我们可以认为这个点是手指区域结束点(人手轮廓位置8)。需要注意的是,如果边缘线路径是由右往左则找到的这个点就是手指区间起始点(人手轮廓位置7)。

手部轮廓弯曲度特征12:岔开手指的手指区间的整体弯曲度高于一个预值。可以采用以下办法(但不限于这几种)中的一种计算,也可以用多种办法组合加权判断。直观涵义:岔开手指区域整体弯曲度很高。

方法1:对每一个样本点计算其前后N个样本组成的观察窗口内,弯曲度平均值或类似平均值(如加权平均值),这个平均值作为轮廓点整体弯曲度参考值都必定大于一个弯曲度预值(预值7)。

方法2:对每一个样本点计算其前后N个样本组成的观察窗口内,弯曲度高于一个弯曲度预值(预值8)点的个数,这个比例值作为轮廓点整体弯曲度参考值必定大于一个个数预值(预值9);注意计算样点的个数时可以加权(如弯曲度越高权重越大)。

如图14所示,在岔开手指区域样本点弯曲度普遍高于预值7;即使在在弯曲度低于预值7的指中(人手轮廓位置2),在它的整体弯曲度观察窗口内所有样本弯曲度的平均值还是大于预值7。

手部轮廓弯曲度特征13:岔开手指的手指区间的弯曲度高位震荡,振幅大于一个弯曲度预值(预值10)。直观涵义:岔开手指区域整体弯曲度会大幅震荡。如图15所示,沿着轮廓边缘路径,样本点在岔开手指区域大幅震荡,其幅度大于预值10。

(三)人手边缘线手指并拢时手指区域弯曲度特点总结:

手部轮廓弯曲度特征14:手指并拢时由手掌边(包括大拇指和食指之间平滑部位)往手指并拢区域,弯曲度会上升。直观涵义:手指并拢区比手掌边弯曲度高,沿边缘线路径由手掌边往手指并拢区观察弯曲度,弯曲度有一个上升过程。如图16所示箭头标识,由手掌边(人手轮廓位置5)往手指并拢区(人手轮廓位置4)邻弯曲度会上升。

手部轮廓弯曲度特征15:由手掌边往手指并拢区域方向,弯曲度上升过程中必定有一点弯曲度第一个大于一个弯曲度预值(预值11),这个点可认作计算上的手指并拢区间起始点。直观涵义:在边缘线上由手掌区域往手指并拢区域弯曲度上升过程中,有一个可以由弯曲度值(预值11)定位的边界/分界点,这个边界点可以被认为是手指并拢区域的起始点(人手轮廓位置9)。如图17所示箭头标识,由手掌边(人手轮廓位置5)往手指并拢区(人手轮廓位置4),弯曲度会上升;而且必有一点第一个大于弯曲度预值11,我们可以认为这个点是手指并拢区域起始点(人手轮廓位置9)。

手部轮廓弯曲度特征16:由手指并拢区域往相邻手掌边(包括大拇指和食指之间平滑部位),弯曲度会下降。直观涵义:手掌边弯曲度比手指并拢区弯曲度低,沿边缘线路径由手指并拢区往手掌边观察弯曲度,弯曲度有一个下降过程。需要注意的是,如果边缘线路径是由右往左这个过程就会变成弯曲度上升过程。如图18所示箭头标识,由手指并拢区(人手轮廓位置4)邻近手掌边(人手轮廓位置5)弯曲度会下降。

手部轮廓弯曲度特征17:由手指并拢区域往手掌边方向,弯曲度下降过程中必定有一点弯曲度第一个小于一个弯曲度预值(预值12),这个点可认作计算上的手指并拢区间的结束点。直观涵义:在边缘线上由手指并拢区域往手掌区域弯曲度下降过程中,有一个可以由弯曲度值(预值12)定位的边界/分界点,这个边界点可以被认为是手指并拢区域的结束点(人手轮廓位置10)。如图19所示箭头标识,由手指并拢区(人手轮廓位置4)往手掌边(人手轮廓位置5),弯曲度会下降;而且必有一点第一个小于弯曲度预值12,我们可以认为这个点是手指并拢区域结束点(人手轮廓位置10)。需要注意的是,如果边缘线路径是由右往左则找到的这个点就是手指并拢区间起始点(人手轮廓位置9)。

手部轮廓弯曲度特征18:在边缘线的手指并拢区域,手指区间的整体弯曲度高于一个预值。可以采用以下办法(但不限于这几种)中的一种计算,也可以用多种办法组合加权判断。直观涵义:手指并拢区域整体弯曲度较高,比手掌和手腕部弯曲度高,但比岔开手指区域弯曲度低一些。

方法1:对每一个样本点计算其前后N个样本组成的观察窗口内,弯曲度平均值或类似平均值(如加权平均值),这个平均值作为轮廓点整体弯曲度参考值都必定大于一个弯曲度预值(预值13)。

方法2:对每一个样本点计算其前后N个样本组成的观察窗口内,弯曲度高于一个弯曲度预值(预值14)点的个数,这个比例值作为轮廓点整体弯曲度参考值必定大于一个个数预值(预值15);注意计算样点的个数时可以加权(如弯曲度越高权重越大)。

如图20所示,在手指并拢区域样本点弯曲度普遍高于预值13:即使在在弯曲度低于预值13的样本点,在它的整体弯曲度观察窗口内所有样本弯曲度的平均值还是大于预值13。

手部轮廓弯曲度特征19:在边缘线的手指并拢区域,弯曲度值的震荡幅度低于一个弯曲度(预值16)。直观涵义:手指并拢区域,边缘线弯曲度不是很高也不是很低,在一个范围内低幅震荡。如图21所示,手指并拢区域弯曲度会低幅度震荡。如图21所示,沿着轮廓边缘路径,样本点在手指并拢区域低幅震荡,其幅度小于预值16。

(四)人手边缘线手指握拳时手指区域弯曲度特点总结:

手部轮廓弯曲度特征20:由手掌边(包括大拇指和食指之间平滑部位)往手指握拳区域,弯曲度会上升。直观涵义:手指握拳区比手掌边弯曲度高,沿边缘线路径由手掌边往手指握拳区观察弯曲度,弯曲度有一个上升过程。如图22所示箭头标识,由手掌边(人手轮廓位置5)往手指握拳区(人手轮廓位置4)邻弯曲度会上升。

手部轮廓弯曲度特征21:由手掌边往手指握拳区域方向,弯曲度上升过程中必定有一点弯曲度第一个大于一个弯曲度预值(预值17),这个点可认作计算上的手指握拳区间起始点。直观涵义:在边缘线上由手掌区域往手指握拳区域弯曲度上升过程中,有一个可以由弯曲度值(预值17)定位的边界/分界点,这个边界点可以被认为是手指握拳区域的起始点(人手轮廓位置11)。如图23所示箭头标识,由手掌边(人手轮廓位置5)往手指握拳区(人手轮廓位置4),弯曲度会上升;而且必有一点第一个大于弯曲度预值17,我们可以认为这个点是手指握拳区域起始点(人手轮廓位置11)。

手部轮廓弯曲度特征22:由手指握拳区域往相邻手掌边(包括大拇指和食指之间平滑部位),弯曲度会下降。直观涵义:手掌边弯曲度比手指握拳区弯曲度低,沿边缘线路径由手指握拳区往手掌边观察弯曲度,弯曲度有一个下降过程。需要注意的是,如果边缘线路径是由右往左这个过程就会变成弯曲度上升过程。如图24所示箭头标识,由手指握拳区(人手轮廓位置4)邻近手掌边(人手轮廓位置5)弯曲度会下降。

手部轮廓弯曲度特征23:由手指握拳区域往手掌边方向,弯曲度下降过程中必定有一点弯曲度第一个小于一个弯曲度预值(预值18),这个点可认作计算上的手指握拳区间的结束点。直观涵义:在边缘线上由手指握拳区域往手掌区域弯曲度下降过程中,有一个可以由弯曲度值(预值18)定位的边界/分界点,这个边界点可以被认为是手指握拳区域的结束点(人手轮廓位置12)。如图25所示箭头标识,由手指握拳区(人手轮廓位置4)往手掌边(人手轮廓位置5),弯曲度会下降;而且必有一点第一个小于弯曲度预值18,我们可以认为这个点是手指握拳区域结束点(人手轮廓位置12)。需要注意的是,如果边缘线路径是由右往左则找到的这个点就是手指握拳区间起始点(人手轮廓位置11)。

手部轮廓弯曲度特征24:在边缘线的手指握拳区域,手指区间的整体弯曲度高于一个预值。可以采用以下办法(但不限于这几种)中的一种计算,也可以用多种办法组合加权判断。直观涵义:手指握拳区域整体弯曲度较高,比手掌和手腕部弯曲度高,但比岔开手指区域弯曲度低一些。

方法1:对每一个样本点计算其前后N个样本组成的观察窗口内,弯曲度平均值或类似平均值(如加权平均值),这个平均值作为轮廓点整体弯曲度参考值都必定大于一个弯曲度预值(预值19)。

方法2:对每一个样本点计算其前后N个样本组成的观察窗口内,弯曲度高于一个弯曲度预值(预值20)点的个数,这个比例值作为轮廓点整体弯曲度参考值必定大于一个个数预值(预值21);注意计算样点的个数时可以加权(如弯曲度越高权重越大)。

如图26所示,在手指握拳区域样本点弯曲度普遍高于预值19;即使在在弯曲度低于预值19的样本点,在它的整体弯曲度观察窗口内所有样本弯曲度的平均值还是大于预值19。

手部轮廓弯曲度特征25:在边缘线的手指握拳区域,弯曲度值的震荡幅度低于一个弯曲度(预值22)。直观涵义:手指握拳区域,边缘线弯曲度不是很高也不是很低,在一个范围内低幅震荡。如图27所示,沿着轮廓边缘路径,样本点在手指握拳区域低幅震荡,其幅度小于预值22。

(五)人手边缘线距离特点总结:

手部轮廓线距离特征1:人手轮廓线上任意两点距离小于一个距离预值(预值23)。直观涵义:人手轮廓基本是一个椭圆形轮廓,人手轮廓线上任意两点的距离不可能超过椭圆长轴的长度。如图28所示,人手轮廓线都包含在一个椭圆/球区域内,轮廓线任意两点距离不可能超过椭圆长轴长度。

手部轮廓线距离特征2:手指岔开时同一根或者相邻手指上任意两点距离小于一个距离预值(预值24)。手指岔开时同一根或者相邻手指的范围可以通过弯曲度特征定位:弯曲度极高(第一指尖/指蹼)->弯曲度极低(第一指中)->弯曲度极高(第一指蹼/指尖)->弯曲度极低(第二指中)->弯曲度极高(第三指尖/指蹼)。直观涵义:同一根手指上两点最远距离就是一根手指的长度;相邻两根手指能张开的角度一般不能大于60度,两个指尖的距离也就基本不能大于一根手指的长度,所以两根相邻手指上任意两点距离还是小于一根手指的长度。这个两点以及距离的组合可以细化:譬如弯曲度极高点(如第一指尖/指蹼)和另外一个弯曲度极高点(如第二疑似指蹼/指尖)的距离小于一个距离预值(预值25);直观上理解这个距离就是一根手指的长度。又譬如一个弯曲度最低点(如第一指中)到另外二个弯曲度最低点(第二指中)的距离小于一个距离预值(预值26);直观上理解就是两根手指中部的距离不能大于半根手指长度。如图29所示,同一根/相邻两根手指任意两点的距离不能超过一根手指的长度。

手部轮廓线距离特征3:人手轮廓线任意一点和人手区域计算经验点的距离小于一个距离预值(预值27)。这个轮廓线上的样本点和经验点及距离预值的组合可以细化:譬如手掌边缘线上任意一点距离手指重心距离小于一个距离预值(预值28);还譬如指蹼点距离手掌重心的距离小于另一个预值(预值29),以及指中/指尖到重心距离的预值等等,如图30所示。

手部轮廓线距离特征4:人手轮廓线手掌一边到另外一边的距离小于一个距离预值(预值30),同时大于另一个预值(预值31)。直观涵义:人手的两个手掌边基本平行,他们的距离和一根手指的长度差不多不会太大,也不会太小。如图31所示,人手边缘线箭头所示的手掌边缘线,基本可以判断出两边距离约为一根手指大小。

手部轮廓线距离特征5:人手轮廓线手掌边的长度大于一个距离预值(预值32)。直观涵义:人手轮廓线手掌部分不会太短。如图32所示,人手边缘线箭头所示的手掌边缘线,其长度都不会太短。

四、以下通过对深度图像中的人手识别实例对本发明的实现方法加以详细说明:

算法实现步骤1:采集需要进行人手识别的原始深度图像:

通过深度摄像机摄像,或读取视频/图像文件或其他办法,采集需要进行人手识别的原始深度图像。如图33所示,左边为深度图,右侧为对应的场景描绘。

算法实现步骤2:对原始深度图像进行预处理,去除噪音和提取深度图像的边缘线:

对原始深度图像进行预处理:去除噪音得到除噪后深度图像,进行边缘检测得到边缘线图像,如图34所示。

算法实现步骤3:对边缘线图进行遍历列出所有边缘线路径数组,并计算路径上每一点的弯曲度值:

遍历边缘线图查找边缘线路径,将边缘线路径上样本点序列化将其坐标存入数组,并计算边缘线路径上每个样本点的弯曲度值也存入这个数组;数组的每个元素包含信息:样本点位置坐标、样本点的弯曲度值。

图35为沿边缘线计算弯曲度过程示例图。

弯曲度的计算可以为曲率(计算量大,易受噪音干扰,不推荐),也可以是其他反映相对弯曲度特征的快速办法。下面算法就是其中的一种弯曲度计算快速算法:直观涵义:以样本点为中心取一个窗口,用窗口内样本路径距离减去两端的直线距离作为弯曲度的值;如果弯曲度越大,则它们的差值会越大。

第1步:假设当前点的路径/数组索引为i,快速弯曲度计算参数为cN(例如8);

第2步:从i-cN开始到i+cN点,累计所有路径上相邻两点间距离到dSum;

第3步:计算i-cN到i+Cn点的直线距离dDir;

第4步:i点的快速弯曲度值为dSum–dDir。

算法实现步骤4:利用前边所总结的人手轮廓线弯曲度特征和距离特征,通过一部分特征总结一个/一套具体算法从边缘线路径数组上查找出所有疑似人手区间/区域。根据手部轮廓弯曲度特征12、手部轮廓弯曲度特征18、手部轮廓弯曲度特征24,以及手部轮廓弯曲度特征2,无论手指岔开、并拢还是握拳,人手轮廓线在手指区域的弯曲度都高于邻近的手掌区域(包括大拇指指蹼到食指间平滑部位)。根据这个手指区域弯曲度整体上比其邻近手掌区域高的特点,最简单直观的办法是根据弯曲度高度先找到疑似手指区间,然后在这个疑似手指区间附近查找疑似人手区间,目前能想到的大多数疑似人手区域查找办法都属于这种,也可以称这类办法为疑似人手区域查找的主要办法。

疑似人手区域查找主要办法的第一步:

在边缘线路径上查找所有疑似手指区间:

第1.1步根据手指区域弯曲度整体上比其邻近手掌区域高的特点,在边缘线路径上查找所有疑似手指区间。利用“在边缘线路径上查找整体弯曲度高于一个预值的区间办法”中的任意一种,弯曲度高度参数预值设为手部轮廓弯曲度特征24中提到的预值19(预值19和预值13相等,都小于预值7),查找边缘线路径数组上所有整体弯曲度较高的区间作为疑似手指区间。

第1.2步计算边缘线路径上疑似手指区间对应的手指区域重心:累加路径上手指区间所有点的坐标(水平坐标和垂直坐标分别累积),除以样本点的个数就得到手指区间重心的坐标。

第2步:根据手指区域的坐标计算出一个或者几个经验位置,并估算人手大小(一套距离值)。具体的实现说明见“疑似人手区域查找主要办法第2步:估算人手大小及经验位置”一节。

第3步:在边缘线上路径上从手指区间附近根据第2步算出的经验位置的距离大小搜索疑似人手手掌区域。具体的实现说明见“疑似人手区域查找主要办法第3步:计算人手手掌区域及手掌重心”一节。

疑似人手区域查找主要办法的第2步和第3步还有别的办法实现,例如“疑似人手区域查找主要办法(办法二)第2步:估算人手大小及经验位置”和“疑似人手区域查找主要办法(办法二)第3步:计算人手手掌区域及手掌重心”中提到的另一套办法。

除了以上提到的疑似人手区域查找主要办法,也有不是先找手指区域的办法:例如可以根据手掌区域弯曲度低而且有一部分靠近弯曲度高的手指,总结出一个经验位置算法然后查找整个人手区域,具体实现参见“疑似人手位置查找其他办法一”。还可以根据手掌弯曲度低以及手掌长度和宽度接近的特点先找到手掌区域然后再找到整个疑似人手区域,具体实现参见“疑似人手位置查找其他办法二”。

总之,通过一部分人手轮廓线弯曲度和距离特征,可以较容易找到所有疑似人手区域。当然这样找到的疑似人手区间不一定包含的都是人手边缘,有可能是胳膊拐、鼠标、人耳朵甚至是充电宝等进入深度摄像头传感区域而且有部分类似边缘线弯曲度和距离特征的部位/物体;所以疑似人手区域必须进行进一步人手识别:精准判定这个疑似区域是否是真正的人手区域。

算法实现步骤5:对算法实现步骤4中查找出的所有疑似人手区域的集合,进一步精准判定运算,判定疑似区域是否真为人手区域。精准判定前,可以根据疑似人手区域的大小和方向信息对疑似人手区域做旋转和伸缩后再进行精准判定,以简化其他算法的运算。详细实现参见“疑似人手区域精准判定预处理:疑似人手图片区的旋转/伸缩/切出”。

精准判定运算的办法可以为以下办法中的一种或几种:

1.基于训练好的经典的人手识别模型,对所述深度图像中疑似人手区域进行特征抽取及分类运算(例如采用HoG特征的AdaBoost分类器),判定这个疑似区域是否是真正的手部区域。

2.进一步根据人手轮廓弯曲度和距离的特征,用更多规则排除手部候选区域集合中的非手部区域。

3.利用其它现有的别的办法如模式识别,或者好几种办法的综合,进一步排除疑似人手区域集合中的非手部区域。

算法实现步骤6:对算法实现步骤5中精准判定为人手区域的图像和边缘路径区间,根据人手各部位弯曲度和距离特征进行精细化运算,精细计算出各人手的姿态。

疑似人手区域查找主要办法的第二步:

估算人手大小及经验位置:

第2.1步判断疑似手指的形态

根据手指岔开时手指弯曲度有高于样本点特点,判断手指形态。

计算人手形态:在疑似手指区间中,根据弯曲度最大值和震荡幅度特征,可以判断这个疑似手指区间的手指形态:如果疑似手指区间弯曲度最大值大于手部轮廓弯曲度特征6中提到预值4,而且震荡幅度大于手部轮廓弯曲度特征13中提到预值10,则这个疑似手指区域为手指岔开状态,否则为并拢/握拳状态,如图36、图37、图38所示。

第2.2步计算疑似人手经验位置

计算手指区域重心点:累加路径上疑似手指区间所有点的坐标(水平坐标和垂直坐标分别累积),除以样本点的个数就得到这个手指区间重心的坐标。将手指区域重心点作为疑似人手区域定位的经验位置,如图39、图40、图41所示。

第2.3步估算人手大小经验值rfHand

计算出手指区间重心的坐标后,计算如下值:

1.疑似手指区间开始点到重心的距离rfB

2.疑似手指区间结束点到重心的距离rfE

3.疑似手指区间弯曲度最高点到重心的距离rfCMax

4.疑似手指区间边缘到另一个手指区间边缘最近距离rfP

人手大小经验值rfHand可以被设定:rfHand=(rfB+rfE+rfCMax)*rfFct+rfP,rfFct为一个经验系数。经验系数rfFct根据手指形态不同:手指岔开区时较小(譬如为1),手指并拢/握拳时经验系数较大(譬如为1.5),如图42、图43、图44所示。

疑似人手区域查找主要办法的第三步:

计算人手手掌区域及手掌重心:

第3.1步在边缘线路径上从手指区间起始点往前步进,跳过其他疑似手指区域的样本点(即跳过疑似大拇指区域),直至样本点和第2.2步中计算出的疑似手指重心距离超过第2.3步中计算出的人手大小经验值rfHand,记这个步进的最后一个样本点为手腕点1。

第3.2步在边缘线路径上从手指区间结束点往后步进,跳过其他疑似手指区域的样本点(即跳过疑似大拇指区域),直至样本点和第2.2步中计算出的疑似手指重心距离超过第2.3步中计算出的人手大小经验值rfHand,记这个步进的最后一个样本点为手腕点2。

第3.3步第3.1步和第3.1步中在边缘线路径线上扫过的所有样本点,即手指区间起始点到手腕点1以及手指区间结束点到手腕点2区间,就是边缘线上这个疑似人手手掌区域。累积人手手掌区域样本点坐标值之和除以样本点的个数,就是手掌重心,如图45、图46、图47所示。

疑似人手区域查找主要办法的第二步还可以采用以下方法实现:估算人手大小及经验位置:

利用第1步找到的疑似手指区间开始点A0以及疑似手指区间结束点B0,算出他们连线中点坐标C0,以及连线长度d0,并计算如下一套经验值,如图48所示:

经验值1:手指区间开始点A0到第一个手腕点WA的距离值raHand,可设为d0。经验值2:手指区间结束点B0到第二个手腕点WB的距离值rbHand,可设为d0。经验值3:手指区间起止点连线中点C0到两个手腕点连线中点WC的距离值rcHand,可设为d0。经验值4:手指区间开始点A0到第二个手腕点WA的距离值rabHand,可设为d0的1.35倍。经验值5:手指区间结束点B0到第二个手腕点WB的距离值rbaHand,可设为d0的1.35倍。

疑似人手区域查找主要办法的第三步还可以采用以下方法实现:

计算人手手掌区域及手掌重心

基本思路为:在边缘线路径上从手指区间起始点往前步进和从手指区间结束点往后步进,直至样本点和手指区域经验位置超出人手大小范围;这些步进过程中人手大小范围内的样本点都算作手掌边缘点。

用如下步骤找寻第一个手腕点和第二个手腕点:

第3.1步初始化第一个手腕点WA为A0,初始化第二个手腕点WB为B0。

第3.2步将第一个手腕点WA沿着边缘线往前步进一点,同时将第二个手腕点WB往后步进一点,直到找到真正的第一和第二个边缘线手腕点。当最新WA和WB满足如下条件中的任意一条,则认为已经找到真正的两个边缘线手腕点,终止这一步;否则认为没达到真正的手腕点,需要重复这一步(第3.2步):

条件3.2.1:计算手指区间开始点A0到WA的距离值da,da大于raHand。直观理解就是WA距手指区间开始点A0太远。

条件3.2.2:计算手指区间结束点B0到WB的距离值db,db大于rbHand。直观理解就是WB距手指区间结束点B0太远。

条件3.2.3:计算手指区间起止点连线中点C0到WA与WB连线中点WC的距离值dc,dc大于rcHand。直观理解就是WC据手指区间起止点连线中点C0太远。

条件3.2.4:计算手指区间开始点A0到WB的距离值dab,dab大于rabHand。直观理解就是WA距手指区间结束点B0太远。

条件3.2.5:计算手指区间结束点B0到WA的距离值dba,dba大于rbaHand。直观理解就是WB距手指区间开始点A0太远。

第3.3步第3.1步和第3.1步中在边缘线路径线上扫过的所有样本点,即手指区间起始点A0到第一个手腕点WA以及手指区间结束点B0到第二个手腕点WB区间,就是边缘线上这个疑似人手手掌区域。累积人手手掌区域样本点坐标值之和除以样本点的个数,就是手掌重心,如图49所示。

疑似人手位置的查找还可以采用其他一些方法,以下详细说明:

疑似人手位置其他查找方法一:

基本思路:第一、根据手掌区域弯曲度低(手部轮廓弯曲度特征2)而手指区域弯曲度较高(手部轮廓弯曲度特征12、手部轮廓弯曲度特征18、手部轮廓弯曲度特征24)特点,找到靠近手指区域的手掌边缘线区间,对其进行加权重心计算,得到一个疑似人手区域的经验位置;第二、估算人手大小;第三、根据第一步经验位置和第二步的人手大小,在边缘线路径上确定人手区间的范围;第四、计算疑似手指区域并计算手指区域重心;第五、计算疑似手掌区域并计算手掌区域重心。

第1步利用一个经验算法,找出一个疑似人手的经验位置。

这个手掌经验位置是通过大量实际数据测试和统计出来,它位于手掌重心偏向大拇指侧一些。这个经验位置是一个加权计算出的重心值,设计思想是将人手掌两边边缘上的点权重值设计为很大,而边缘线上别的位置权重很小,这样加权计算出的重心就会在两条手掌边缘线中间(可以理解为手掌重心);而实际上由于权值选取办法的关系,找到的位置在手掌重心靠大拇指那边偏一些。

在这个疑似人手位置查找办法中,为描述方便需要约定如下几个经验性概念:

1.靠近手指的手掌边缘点:边缘线路径数组中靠近手指的手掌边缘点。这些样本点有两个特征:第1、弯曲度很低;第2、邻近有弯曲度较高的点(因为靠近弯曲度较高的手指)。

2.手指区域点:边缘线路径数组中手指区域中的样本点,这些样本点弯曲度很高或者整体弯曲度较高。

3.靠近手指的手掌边缘点的手掌边缘权重值:就是被判定为“靠近手指的手掌边缘点”的样本点和远离手指靠近手掌一侧的程度,权重值高说明这个样本点靠近手掌一侧,反之权重值低则说明样本点靠近手指尖一侧。

4.手掌经验位置计算统计区间:就是边缘线路径上一段连续的样本区间,这个区间上所有点要么是被判定为“靠近手指的手掌边缘点”,要么是“手指区域点”。

如图50所示为三种手掌形态对应的“靠近手指的手掌边缘点”及其“手掌边缘权重值”分布图,样本点对应的圆圈越大则表明其“手掌边缘权重值”权值越大。图50中五边形为人手经验位置。

以下为疑似人手经验位置查找算法:

约定:为描述简洁性,称边缘线路径被查找搜寻的区间为“被查找区间”,称从被查找区间找到的“手掌经验位置计算统计区间”为“待查找区间”。

大致思路:

输入参数:

参数1:被查找区间起始点序号dcRB

参数2:被查找区间结束点序号dcRE

参数3:手掌部弯曲度预值参数dcfPLM

参数4:手指部弯曲度预值参数dcfFIN

参数5:路径观察窗口大小参数dcfWIN

参数6:判断是否“靠近手指的手掌边缘点”第一个个数参数dcfFPN1

参数7:判断是否“靠近手指的手掌边缘点”第二个个数参数dcfFPN2

输出结果:

结果1:待查找区间起始点序号dcfB

结果2:待查找区间结束点序号dcfE

结果3:疑似人手经验点位置dcfEXP

临时变量:

临时变量1:路径当前观察样本点序号dcfC

临时变量2:样本个数变量dcfPN

临时变量3:样本个数变量dcfFN

待查找区间查找具体步骤如下:

第1.1步 初始化人手经验位置查找用的参数。

第1.2步 对边缘线路径数组上的每一个样本点(序号为dcfC),判定它是否“靠近手指的手掌边缘点”并且计算其“手掌边缘权重值”。

第1.2.1步 从dcfC-dcfWIN/2点开始到dcfC+dcfWIN/2点结束观察区间内(即以dcfC为中心dcfWIN大小窗口区间内),统计弯曲度小于手掌部弯曲度预值参数dcfPLM的样本点个数dcfPN,还统计弯曲度大于手指部弯曲度预值参数dcfFIN的样本个数dcfFN。

第1.2.2步 同时满足以下两个条件,则认为当前样本点dcfC为“靠近手指的手掌边缘点”:

条件1.2.2.1:样本点的弯曲度比手掌部弯曲度预值参数dcfPLM小。

条件1.2.2.2:第2.1步中统计的样本点个数dcfFN大于“靠近手指的手掌边缘点”第一个个数参数dcfFPN1,而且小于“靠近手指的手掌边缘点”第二个个数参数dcfFPN2。

第1.2.3步满足以下两个条件中的一个,则认为当前样本点dcfC为“手指区域样本点”:

条件1.2.3.1:样本点的弯曲度大于手指部弯曲度预值参数dcfFIN。

条件1.2.3.2:第1.2.1步中统计的样本点个数dcfFN大于或等于“靠近手指的手掌边缘点”第二个个数参数dcfFPN2。

第1.3步 找到“手掌经验位置计算统计区间”

根据第1.2.2步和第1.2.3步中的判断,找到第一个被判定为“靠近手指的手掌边缘点”或者“手指区域样本点”的样本点作为区间的开始点,然后再找到第一个既不是“靠近手指的手掌边缘点”也不是“手指区域样本点”的样本点作为区间的结束点,这一步中找到的起始点和结束点间的区间就是待查找的“手掌经验位置计算统计区间”。

第1.4步 计算疑似人手经验位置

在“手掌经验位置计算统计区间”内,将第1.2.2步中判定为“靠近手指的手掌边缘点”的坐标乘以第1.2.1步中的dcfPN作为权值,累计所有点的权值坐标后除以其权值和,得到的坐标位置作为疑似疑似人手经验点位置dcfEXP。

第2步 算出人手经验位置后,估算人手大小。

计算出人手经验位置后,在“手掌经验位置计算统计区间”内,计算所有弯曲度高于手指部弯曲度预值参数dcfFIN的样本点到人手经验位置的距离值,用这些距离值的最大值rgMax和方差rgVar计算人手大小的估算结果rgHand:rgHand=(rgMax–rgVar)*rgFct,rgFct为经验系数可以根据手指形态不同调整:如手指岔开时设置为2,手指并拢/握拳时设置为3。

第3步 查找到手腕点,在边缘线路径上确定人手区间的范围。

根据第1步经验位置和第2步的人手大小,在边缘线路径上确定人手区间的范围。

具体办法为从“靠近手指的手掌边缘点”开始沿着边缘线路径往前查找,跳过弯曲度高于预值的样本点(即跳过拇指区间),直到样本点和人手经验位置的距离超过第2步估算的人手大小rgHand,则找到第一个手腕点;用类似办法从“靠近手指的手掌边缘点”开始沿着边缘线路径往后查找,就能查找到第二个手腕点;边缘线路径上两个手腕点之间的区间就是疑似人手区间,如图51所示。

第4步计算疑似手指区域并计算手指区域重心。

在第3步找到的疑似人手区间中,根据手指区间整体弯曲度高的特点利用“在边缘线路径上查找整体弯曲度高于一个预值的区间办法”找出所有疑似手指区间。

累计每一个疑似手指区间所有样本点坐标的和,除以样本的个数就可以得到每个手指区间重心位置。

第4步计算疑似手掌区域并计算手掌区域重心。

边缘线上第3步找到的疑似人手区间,刨去第4步找出的疑似手指区间,剩下几个不连贯的区间就是疑似手掌区间。

累计疑似手指区间所有样本点坐标的和,除以样本的个数就可以得到整个手掌区间重心位置。

疑似人手位置其他查找方法二:

基本思路:第一、根据手掌边缘线路径上手掌区域弯曲度低,比较长,一侧靠近手指区域的特点,找到靠近手指区域两侧的手掌边缘线区间和夹在其中的手指区域。第二、根据手掌两边距离和手掌大小基本一致特点,由两条手掌边缘线距离估算手掌大小。第三、根据第二步估算的手掌大小,在边缘线路径上计算手掌区间,然后在这个手掌区间上计算手掌重心点。第四、根据第一步找到的手指区域计算手指区域重心点。

在这个疑似人手位置查找方法中,为描述方便需要约定如下几个经验性概念:

1.边缘线第一手掌区间:轮廓线路径上,在疑似手指区间之前的手掌边缘线区间。

2.边缘线第二手掌区间:轮廓线路径上,在疑似手指区间之后的手掌边缘线区间。

3.疑似手指区间:轮廓线路径上,在“边缘线第一手掌区间”和“边缘线第二手掌区间”之间弯曲度较高的区间。

疑似人手位置查找具体步骤如下:

第1步找到“靠近手指第一手掌边缘线区间”和“靠近手指第二手掌边缘线区间”和中间的“疑似手指区间”

第1.1步 利用手掌边缘线的两个特点:1、整体弯曲度低;2、长度比较长。利用“在边缘线路径上查找整体弯曲度低于一个预值的区间办法”中的一种,找到所有疑似的“手掌边缘线区间”(即符合这两个特点的路径区间)。

第1.2步 分析找到“靠近手指第一手掌边缘线区间”和“靠近手指第二手掌边缘线区间”和中间的“疑似手指区间”。如图52、图53、图54所示。

第2步 估算手掌大小dP

第2.1步 沿着边缘线路径从“边缘线第一手掌区间”结束点(即手指一侧)开始往前,每W个样本点计算一次中点(需要跳过弯曲度高于手掌区域弯曲度预值的样本点),记这些依次得到的中点为A1、A2、A3…

第2.2步 同时边缘线路径从“边缘线第二手掌区间”起始点(即手指一侧)开始往后,每W个样本点计算一次中点(需要跳过弯曲度高于手掌区域弯曲度预值的样本点),记这些依次得到的中点为B1、B2、B3…

第2.3步 计算第2.1步和第2.2步得到中线的距离,即A1到B1的距离d1、A2到B2的距离d2、A3到B3的距离d3…

第2.4步 从第2.3步得到的结果d1、d2、d3结果序列中,取第一个极大值假设为dn(即dn的下一个值比dn小),并计算d1到dn数值的方差记为dV;则可估算手掌大小dP为:dn–dV/2。如图55、图56、图57所示。

第3步 计算手掌区间以及重心

第3.1步 沿着边缘线路径从“边缘线第一手掌区间”结束点(即手指一侧)开始往前步进,步进中跳过弯曲度高于手掌区域弯曲度预值的样本点,直到样本点到步进起始点的路径长度超过手掌大小dP,则记最后的样本点为第一手腕点。

第3.2步 同时边缘线路径从“边缘线第二手掌区间”起始点(即手指一侧)开始往后步进,步进中跳过弯曲度高于手掌区域弯曲度预值的样本点,直到样本点到步进起始点的路径长度超过手掌大小dP,则记最后的样本点为第二手腕点。

第3.3步 第3.1步和第3.2步中所有扫过的样本点共同构成手掌区间(应该是两个或两个以上不连续的区间),累计手掌区间所有样本点坐标的结果除以样本点的个数即得到手掌重心点。如图58、图59、图60所示。

第4步 在“疑似手指区间”根据手指区间,计算手指区域重心点

在第1步中找到的疑似手指区间,累积所有样本点坐标和然后除以样本个数即得到手指区域重心。如图61、图62、图63所示。

在对疑似人手区域进行精准判定前,为了简省精准判定算法的运算量,还可以对找到的疑似人手区域进行预处理:

疑似人手区域精准判定预处理:疑似人手图片区的旋转/伸缩/切出

将所有查找出的疑似人手区域中对应的深度图内容旋转至手指向上,伸缩至和人手识别模型训练图片一样大小,然后将这一小片图像切出,以省掉后续非必要的运算。

经过前述步骤后,我们已获得疑似人手区域的信息:手掌重心位置,手指重心位置,以及人手大小估算值rfHand。具体旋转/伸缩/切出过程如下:

第一步 划出人手外围圆形区。以手掌重心为中心,人手大小经验值rfHand为半径划出圆形区域。如图64所示。

第二步 图像旋转。以手掌重心为中心,旋转圆形较大图像到手指重心位于手掌重心正上(即手掌重心到手指重心连线的方位角为0)。如图65所示,旋转后手指已经朝向正上。

第三步 疑似人手区域图像定位。从旋转后的人手外围图中,选取一个正方形区域:以手掌重心和手指重心连线中点为正方形中心,人手大小rfHand的3/2为正方形的边长。这个正方形区域的图片即是我们需要的疑似人手区域图片。如图66所示。

第四步图像伸缩及切出。将疑似人手正方形图像伸缩至人手识别模型训练标准用图大小,并将伸缩后的图像保存为疑似人手区域图像的切出图。需注意在伸缩图像时,如果用到插值运算,插值运算的参数不能跨过边界线。

以下再对本发明涉及的一些算法加以详细说明:

一、在边缘线路径上查找整体弯曲度高于一个预值的区间办法

约定:为描述简洁性,称边缘线路径被查找搜寻的区间为“被查找区间”,从称被查找区间找到的“整体弯曲度高于一个预值的区间”结果为“待查找区间”。在边缘线上查找整体弯曲度高于一个预值的带查找区间方法有很多,不同方法的结果可能稍微不同但大致不会影响使用,我们列出其中的三种方法。

在边缘线路径上查找整体弯曲度高于一个预值的区间方法1:

大致思路:

“被查找区间”的起始点具有如下特点:

规则1、和后续一个窗口内的样本点(这些后续样本点位于整体弯曲度高的区间内)相比,起始点本身弯曲度低。

规则2、后续点弯曲度整体比较高,即在一个观察窗口内所有样本点弯曲度平均值高于预值。

“被查找区间”的结束点具有如下特点:

规则3、和后续一个窗口内的样本点(这些后续样本点位于整体弯曲度高的区间之外)相比,结束点本身弯曲度低。

规则4、后续点弯曲度整体比较低,即在一个观察窗口内所有样本点弯曲度平均值低于预值。

利用被查找区间起始点的特点(规则1和规则2),沿着边缘线路径逐样本点寻找起始点;然后利用被查找区间结束点的特点(规则3和规则4)寻找结束点;起始点到结束点之间的区间就是被查找的“整体弯曲度高于一个预值的区间”。

如图67所示,利用上述方法很容易找到被查找区间的起始点和结束点,但这些点与我们通常理解(“理想”情况下的)起始点和结束点有偏差,但对后续运算影响不大。

输入参数:

参数1:被查找区间起始点序号dcRB

参数2:被查找区间结束点序号dcRE

参数3:整体弯曲度预值参数dcfMIN

参数4:路径观察窗口大小参数dcfWIN

参数5:路径观察窗口第一个倍数参数WFB

参数6:路径观察窗口第二个倍数参数WFE

输出结果:

结果1:待查找区间起始点序号dcfB

结果2:待查找区间结束点序号dcfE

临时变量:

临时变量1:路径当前观察样本点序号dcfC

待查找区间查找具体步骤如下:

第1步 初始化查找区间起止点算法用的参数。

第2步 初始化当前观察样本点序号dcfC为被查找区间起始点序号dcRB(直观理解就是将其放在查找区间起始点的位置)。

第3步判断当前观察样本点dcfC是否待查找区间起始点:如果同时满足如下两个条件,则认为当前观察样本点dcfC就是待查找区间起始点;否则不是待查找区间起始点。

条件3.1.从dcfC+1点开始到dcfC+dcfWIN*WFB点结束观察区间内,路径上所有样本点弯曲度的平均值大于dcfMIN。直观理解就是当前观察样本点dcfC的后面dcfWIN的WFB倍观察窗口内,所有数样本点的整体(平均)弯曲度大于dcfMIN。

条件3.2.从dcfC+1点开始到dcfC+dcfWIN点结束观察区间内,路径上所有样本点弯曲度的值都大于dcfC点的弯曲度值。直观理解就是当前观察样本点dcfC后dcfWIN观察窗口内,所有样本点的弯曲度都比dcfC点的弯曲度大。

第4步 如果第3步判断dcfC是待查找区间起始点,则将带查找区间起始点序号dcfB设置为dcfC,跳转至下一步(第5步);否则dcfC不是待查找区间起始点,则将dcfC的值加1,跳转至第3步。

第5步 初始化当前观察样本点序号dcfC为dcfB+dcfWIN(直观理解就是dcfE最起码在dcfB后面间隔dcfWIN的地方,后续步骤只会增加它的值)。

第6步判断当前观察样本点dcfC是否待查找区间结束点:如果同时满足如下两个条件,则认为当前观察样本点dcfC就是待查找区间结束点;否则不是待查找区间结束点。

条件6.1.从dcfC+1点开始到dcfC+dcfWIN*WFE点结束观察区间内,路径上所有样本点弯曲度的平均值小于dcfMIN。直观理解就是当前观察样本点dcfC的后dcfWIN的WFE倍观察窗口内,所有数样本点的整体(平均)弯曲度小于dcfMIN。

条件6.2.从dcfC+1点开始到dcfC+dcfWIN点结束观察区间内,路径上所有样本点弯曲度都大于或等于dcfC点的弯曲度值。直观理解就是当前观察样本点dcfC后dcfWIN观察窗口内,所有样本点的弯曲度都比dcfC点的弯曲度大(或相等)。

第7步 如果第6步判断dcfC是否待查找区间结束点,则将带查找区间起结束点序号dcfE设置为dcfC,结束(完成)这个带查找区间的查找步骤;否则dcfC不是待查找区间结束点,则将dcfC的值加1,跳转至第5步。

在边缘线路径上查找整体弯曲度高于一个预值的区间方法2

大致思路:

这个方法(方法2)和前述方法1基本类似,区别在于弯曲度整体性计算办法调整:参数5和参数6换为个数,条件3.1以及条件6.1更换为以样本个数统计整体弯曲度情况。

输入参数:

参数1:被查找区间起始点序号dcRB

参数2:被查找区间结束点序号dcRE

参数3:整体弯曲度预值参数dcfMIN

参数4:路径观察窗口大小参数dcfWIN

参数5:路径观察窗口第一个个数参数nFB

参数6:路径观察窗口第二个个数参数nFE

输出结果:

结果1:待查找区间起始点序号dcfB

结果2:待查找区间结束点序号dcfE

临时变量:

临时变量1:路径当前观察样本点序号dcfC

待查找区间查找具体步骤如下:

第1步 初始化查找区间起止点算法用的参数。

第2步 初始化当前观察样本点序号dcfC为查找区间起始点序号dcRB(直观理解就是将其放在查找区间起始点的位置)。

第3步 判断当前观察样本点dcfC是否待查找区间起始点:如果同时满足如下两个条件,则认为当前观察样本点dcfC就是待查找区间起始点;否则不是待查找区间起始点。

条件3.1.从dcfC+1点开始到dcfC+dcfWIN点结束观察区间内,路径上弯曲度的平均值大于dcfMIN的样本点个数大于第一个个数参数nFB。直观理解就是当前观察样本点dcfC的后面dcfWIN大小观察窗口内,超过nFB个样本点的弯曲度都大于dcfMIN。

条件3.2.从dcfC+1点开始到dcfC+dcfWIN点结束观察区间内,路径上所有样本点弯曲度的值都大于dcfC点的弯曲度值。直观理解就是当前观察样本点dcfC后dcfWIN观察窗口内,所有样本点的弯曲度都比dcfC点的弯曲度大。

第4步 如果第3步判断dcfC是待查找区间起始点,则将带查找区间起始点序号dcfB设置为dcfC,跳转至下一步(第5步);否则dcfC不是待查找区间起始点,则将dcfC的值加1,跳转至第3步。

第5步 初始化当前观察样本点序号dcfC为dcfB+dcfWIN(直观理解就是dcfE最起码在dcfB后面间隔dcfWIN的地方,后续步骤只会增加它的值)。

第6步 判断当前观察样本点dcfC是否待查找区间结束点:如果同时满足如下两个条件,则认为当前观察样本点dcfC就是待查找区间结束点;否则不是待查找区间结束点。

条件6.1.从dcfC+1点开始到dcfC+dcfWIN*WFE点结束观察区间内,路径上弯曲度的平均值小于dcfMIN的样本点个数大于第二个个数参数nFE。直观理解就是当前观察样本点dcfC的后面dcfWIN大小观察窗口内,超过nFE个数样本点的弯曲度于dcfMIN。

条件6.2.从dcfC+1点开始到dcfC+dcfWIN点结束观察区间内,路径上所有样本点弯曲度都大于或等于dcfC点的弯曲度值。直观理解就是当前观察样本点dcfC后dcfWIN观察窗口内,所有样本点的弯曲度都比dcfC点的弯曲度大(或相等)。

第7步 如果第6步判断dcfC是否待查找区间结束点,则将带查找区间起结束点序号dcfE设置为dcfC,结束(完成)这个带查找区间的查找步骤;否则dcfC不是待查找区间结束点,则将dcfC的值加1,跳转至第5步。

在边缘线路径上查找整体弯曲度高于一个预值的区间方法3

大致思路:

这个方法(方法3)和前两种方法(方法1及方法2)构思不同,这个算法先计算被查找区间每一个样本点在一个窗口内的平均值(相当于平滑去除干扰),然后找出第一个平均值较高的区间作为待查找区间。

输入参数:

参数1:被查找区间起始点序号dcRB

参数2:被查找区间结束点序号dcRE

参数3:整体弯曲度预值参数dcfMIN

参数4:路径观察窗口大小参数dcfWIN

输出结果:

结果1:待查找区间起始点序号dcfB

结果2:待查找区间结束点序号dcfE

临时变量:

临时变量1:路径当前观察样本点序号dcfC

待查找区间查找具体步骤如下:

第1步 初始化查找区间起止点算法用的参数:

第2步 计算被查找区间每一个样本的弯曲度平均值;一个样本点dcfC弯曲度平均值计算办法:以样本点dcfC为中心以dcfWIN为窗口大小的区间内,求区间内所有样本点弯曲度之和最后除以dcfWIN得到dcfC样本点的弯曲度平均值。

第3步初始化当前观察样本点序号dcfC为查找区间起始点序号dcRB(直观理解就是将其放在查找区间起始点的位置)。

第4步判断当前观察样本点dcfC是否待查找区间起始点:如果第2步算出的dcfC点的弯曲度平均值大于预值参数dcfMIN,则认为当前观察样本点dcfC就是待查找区间起始点;否则不是待查找区间起始点。

第5步 如果第4步判断dcfC是待查找区间起始点,则将带查找区间起始点序号dcfB设置为dcfC,跳转至下一步(第6步);否则dcfC不是待查找区间起始点,则将dcfC的值加1,跳转至第4步。

第6步 初始化当前观察样本点序号dcfC为dcfB+dcfWIN/2(直观理解就是dcfE最起码在dcfB后面间隔dcfWIN/2的地方,后续步骤只会增加它的值)。

第7步 判断当前观察样本点dcfC是否待查找区间结束点:如果第2步算出的dcfC点弯曲度平均值小于预值参数dcfMIN,则认为当前观察样本点dcfC就是待查找区间结束点;否则不是待查找区间结束点。

第8步如果第7步判断dcfC是待查找区间结束点,则将带查找区间起结束点序号dcfE设置为dcfC,结束(完成)这个带查找区间的查找步骤;否则dcfC不是待查找区间结束点,则将dcfC的值加1,跳转至第7步。如图68、图69所示。

二、在边缘线路径上查找整体弯曲度低于一个预值的区间方法

约定:为描述简洁性,称边缘线路径被查找搜寻的区间为“被查找区间”,从称被查找区间找到的“整体弯曲度低于一个预值的区间”结果为“待查找区间”。在边缘线上查找整体弯曲度低于一个预值的带查找区间办法有很多,不同办法的结果可能稍微不同但大致不影响使用,我们列出其中的两种方法。

在边缘线路径上查找整体弯曲度低于一个预值的区间办法1

大致思路:

“被查找区间”的起始点具有如下特点:

规则1、起始点本身弯曲度低。

“被查找区间”的结束点具有如下特点:

规则2、结束点本身弯曲度高;或者结束点本身弯曲度不算太低,后续一个窗口内的样本点(这些后续样本点位于整体弯曲度高的区间之外)弯曲度整体比较高。如图70所示。

输入参数:

参数1:被查找区间起始点序号dcRB

参数2:被查找区间结束点序号dcRE

参数3:整体弯曲度第一个预值参数dcfMAX

参数4:整体弯曲度第二个预值参数dcfMAX2

参数5:路径观察窗口大小参数dcfWIN

输出结果:

结果1:待查找区间起始点序号dcfB

结果2:待查找区间结束点序号dcfE

临时变量:

临时变量1:路径当前观察样本点序号dcfC

待查找区间查找具体步骤如下:

第1步 初始化查找区间起止点算法用的参数。

第2步 初始化当前观察样本点序号dcfC为被查找区间起始点序号dcRB(直观理解就是将其放在查找区间起始点的位置)。

第3步判断当前观察样本点dcfC是否待查找区间起始点:如果dcfC点的弯曲度值小于整体弯曲度预值参数dcfMAX,则认为当前观察样本点dcfC就是待查找区间起始点;否则不是待查找区间起始点。

第4步如果第3步判断dcfC是待查找区间起始点,则将待查找区间起始点序号dcfB设置为dcfC,跳转至下一步(第5步);否则dcfC不是待查找区间起始点,则将dcfC的值加1,跳转至第3步。

第5步初始化当前观察样本点序号dcfC为dcfB+1。

第6步判断当前观察样本点dcfC是否待查找区间结束点:如果满足如下两个条件中的一条,则认为当前观察样本点dcfC就是待查找区间结束点;否则不是待查找区间结束点。

条件6.1.dcfC点的弯曲度值大于整体弯曲度第二个预值参数dcfMAX2。

条件6.2.dcfC点的弯曲度值大于整体弯曲度预值参数dcfMAX,并且从dcfC+1点开始到dcfC+dcfWIN点结束观察区间内所有样本点弯曲度的平均值大于整体弯曲度预值参数dcfMAX。

第7步 如果第6步判断dcfC是否待查找区间结束点,则将带查找区间起结束点序号dcfE设置为dcfC,结束(完成)这个带查找区间的查找步骤;否则dcfC不是待查找区间结束点,则将dcfC的值加1,跳转至第5步。

在边缘线路径上查找整体弯曲度低于一个预值的区间方法2

大致思路:

这个方法(方法2)和方法1基本类似,区别在于弯曲度整体性计算办法调整:条件6.2更换样本整体弯曲度情况观察窗口位置。

输入参数:

参数1:被查找区间起始点序号dcRB

参数2:被查找区间结束点序号dcRE

参数3:整体弯曲度第一个预值参数dcfMAX

参数4:整体弯曲度第二个预值参数dcfMAX2

参数5:路径观察窗口大小参数dcfWIN

输出结果:

结果1:待查找区间起始点序号dcfB

结果2:待查找区间结束点序号dcfE

临时变量:

临时变量1:路径当前观察样本点序号dcfC

待查找区间查找具体步骤如下:

第1步 初始化查找区间起止点算法用的参数:

第2步 初始化当前观察样本点序号dcfC为被查找区间起始点序号dcRB(直观理解就是将其放在查找区间起始点的位置)。

第3步 判断当前观察样本点dcfC是否待查找区间起始点:如果dcfC点的弯曲度值小于整体弯曲度预值参数dcfMAX,则认为当前观察样本点dcfC就是待查找区间起始点;否则不是待查找区间起始点。

第4步 如果第3步判断dcfC是待查找区间起始点,则将待查找区间起始点序号dcfB设置为dcfC,跳转至下一步(第5步);否则dcfC不是待查找区间起始点,则将dcfC的值加1,跳转至第3步。

第5步 初始化当前观察样本点序号dcfC为dcfB+1。

第6步 判断当前观察样本点dcfC是否待查找区间结束点:如果满足如下两个条件中的一条,则认为当前观察样本点dcfC就是待查找区间结束点;否则不是待查找区间结束点。

条件6.1.dcfC点的弯曲度值大于整体弯曲度第二个预值参数dcfMAX2

条件6.2.dcfC点的弯曲度值大于整体弯曲度预值参数dcfMAX,并且从dcfC-dcfWIN/2点开始到dcfC+dcfWIN/2点结束观察区间内所有样本点弯曲度的平均值大于整体弯曲度预值参数dcfMAX。

第7步 如果第6步判断dcfC是否待查找区间结束点,则将带查找区间起结束点序号dcfE设置为dcfC,结束(完成)这个带查找区间的查找步骤;否则dcfC不是待查找区间结束点,则将dcfC的值加1,跳转至第5步。

通过采用本发明公开的上述技术方案,得到了如下有益的效果:

使用本发明的基于图像边缘线弯曲度和距离特征的人手识别方法,利用人手边缘线弯曲度和距离特征,通过简单的规则快速找出图像中所有疑似人手区域,大大缩小人手识别算法的运算量;本发明中用到的弯曲度更能反映边缘线图一段区域内总体弯曲情况,天然对噪音信号影响有抑制作用;而且弯曲度计算中只需进行查表(近距离两点间距离可用查表加速而非平方和的平方根)、求和及相减等简单快速运算,没有曲率计算中的运算量很大的三角函数运算。使其能够运行在处于大众消费主流的嵌入式系统中,为实现AR/VR等设备的人手凌空输入提供了可能。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1