APP下载

一种基于RGB-D的人体关节点定位方法

2018-09-13张青建韩建平

郑州大学学报(工学版) 2018年5期
关键词:关节点端点骨架

张青建, 韩建平

(杭州电子科技大学 计算机学院,浙江 杭州 310016)

0 引言

Kinect不仅价格低廉,而且能够获取彩色和深度信息,其深度信息具有抗光照扰动的优势,因此可用于人体关节点定位.文献[1]利用目标识别标记出人体模型,通过分类器定位出人体关节点,此方法是目前比较先进的关节点定位方法,但该方法需要大量的训练标记样本.文献[2]利用深度图像获取人体细化线,并根据人体刚架比例关系定位出人体关节点,此方法容易实现,但定位准确率有待提高.

笔者在文献[2]的基础上,加入了角点检测及分类、脸部跟踪等内容,提高了关节点定位的准确性和鲁棒性.文章首先对深度图像预处理以获取人体骨架线,从而得到骨架线角点并对角点筛选分类,然后在彩色图像中对人的脸部跟踪以定位头节点,最后结合人体各刚件比例关系,定位出人体关节点,方法如图1所示.

1 获取人体骨架线角点及头节点

1.1 深度及彩色图像预处理

用kinect摄取彩色图像和深度图像,由于此二者坐标不同,所以笔者以深度图像的坐标为基准,实现彩色图像坐标向深度图像坐标对齐[3],以保证头节点(从彩色图像中获取)和其他关节点(从深度图像中获取)坐标一致.设置深度图像的有效景深为0.8~3.8 m,超过此范围的景深,在彩色图像中予以擦除,初步排除不必要的像素干扰.

Kinect直接摄取的深度图像中人体轮廓边缘不光滑,人体区域内可能有黑洞,若不对深度图像预处理,细化后的人体骨架线有毛刺,甚至导致骨架线变形,因此需对深度图像进行滤波、膨胀腐蚀等预处理.首先对深度图像用中值滤波祛除噪声[4];然后对深度图形膨胀腐蚀处理以消除人体区域内的黑洞[5];最后对深度图像二值化[6]处理以减少数据量,取阈值128,大于阈值的像素置为1,否则置为0.

1.2 获取人体骨架线及角点

对预处理后的深度图像,利用Zhang-Suen细化算法[7]获取人体骨架线,并对骨架线过滤,使得骨架线上每两个像素之间有一个空白像素,然后利用Shi-Tomasi角点检测算法[8]获取骨架线的角点,最后将得到的角点分为折点和端点,并分别存储在Point1集合和Point2集合中.

1.3 定位头节点

在1.2节中获取了人体骨架线的角点,若直接将骨架线的头部端点作为头节点会导致头节点的定位有半个头长的误差,笔者利用camshift运动目标跟踪算法[9]获取脸部中心位置,以此作为头节点.Camshift跟踪算法分为3个步骤来完成,如图1所示.

图1 方法流程图Fig.1 Flow chat of this paper method

1.3.1 获取脸部区域(ROI)的颜色概率分布图

为减少光照影响,首先将彩色图像从RGB空间转换到HSV空间[10],做出H分量直方图,如图2所示,直方图代表了ROI区域不同颜色在H分量上出现的概率,然后将ROI区域中每个像素的值用其颜色概率替换,得到颜色概率分布图[11],如图3所示.

图2 H分量直方图Fig.2 H compont histogram

图3 颜色概率分布图Fig.3 The distribution of color probability

1.3.2 meanshift算法路径寻优

Meanshift算法[12]是一种密度函数梯度估计的非参数方法,通过迭代寻优找到概率分布的极值来定位目标.首先在图3中选取搜索窗口,计算窗口的质心(xc,yc),

xc=M10/M00;yc=M01/M00,

(1)

式中:M00和M10、M01分别是零阶矩和一阶矩,

(2)

(3)

(4)

把搜索窗口的中心设置在计算出的质心处,这样窗口的移动引起窗口内容的变化,继续重复以上定位窗口中心的步骤,直到搜索窗的中心与质心间的距离小于预设的阈值则停止计算[13].

1.3.3 camshift跟踪

Camshift算法是将视频中的每一帧做meanshift运算,并将上一帧搜索窗的大小和中心,作为下一帧meanshift算法搜索窗的初始值.如此迭代下去,实现对运动目标的跟踪.在脸部区域跟踪过程中,将窗口的中心位置作为头节点,实现效果如图4所示.

图4 脸部跟踪效果图Fig.4 The figure of tracing face

2 人体关节点定位

2.1 中国成年人各部件比例关系

在标准人体骨架模型(如图5)中剩余的14个关节,需要结合骨架线角点和人体各刚件比例关系共同定位得出.《中国成年人人体尺寸》(GB/T 10000—1988)给出了我国成年人人体尺寸的比例关系,如图6所示,以此得到笔者所需的人体各刚件比例关系,以l(头-颈)为基准.

l(颈-肩) =0.8l(头-颈),

l(肩-肘) =1.5l(头-颈),

l(颈-尾椎) =3.5l(头-颈),

l(尾椎-臀) =0.5l(头-颈),

l(臀-膝) =2l(头-颈),

l(膝-足) =2l(头-颈),

(5)

其中,l(头-颈)为头节点到颈节点的距离;l(颈-肩)为颈节点到肩节点的距离;l(肩-肘)为肩节点到肘节点的距离;l(肘-手)为肘节点到手节点的距离;l(颈-尾椎)为颈节点到尾椎点的距离;l(尾椎-臀)为尾椎点到臀节点的距离;l(臀-膝)为臀节点到膝节点的距离;l(膝-足)为膝节点到足节点的距离.

图5 标准人体骨架模型Fig.5 Standard human skeleton model

图6 中国成年人人体尺寸比例关系Fig.6 The proportion of human body size in China

2.2 关节点定位

上文得到的人体各刚件比例关系具有一般性和普遍性,但是个体之间存在差异,针对某一个体,如果仅仅根据此比例关系,定位出的人体关节点位置的准确率有待提高,所以本文中,笔者结合骨架线角点和人体各刚件比例关系共同定位,得出除头节点外的14个人体关节点,具体操作如下.

①头节点.根据上文camshift的脸部跟踪算法获取脸部中心作为头节点的位置,并在端点集合Point2中将y坐标值大于此头节点且距离最近的点,也就是人体细化后得出的头部顶点,从端点集合Point2剔除.

②颈节点.操作①定位了头节点,则在折点集合Point1中,到头节点距离最近的点一定是颈节点,以此可以定位出颈节点的坐标,并记录颈节点到头节点的距离为l(头-颈).最后将颈节点从Point1集合剔除.

③肩节点.以颈节点为圆心,以l(颈-肩)±20%的长度为半径画出两个圆,出现在这两圆之间区域的Point1集合中的折点则为肩节点.由于肩节点的对称性,找到一侧肩节点,另一侧的肩节点可以对称定位得出.

④肘节点、尾椎点、臀节点、膝节点.此3个节点定位方法与肩节点方法类似,不再赘述.

⑤手节点.经过上几步的节点剔除操作,此时的端点集合Point2中只剩下手节点和足节点,在站立状态下,手节点到肘节点的距离小于足节点到肘节点的距离,所以计算Point2集合中剩余端点到某一侧肘节点的距离,距离最小的端点即为该侧的手节点.

⑥足节点.在端点集合Point2中,笔者已经剔除了有可能为头部端点的点,手部端点的点,那么剩下的端点只可能属于足节点,由此定位出左右足节点的位置.至此,就完成了人体关节点的定位.

3 试验与分析

3.1 试验环境

笔者的试验环境是在室内,光线充足,无刺激性强光,背景环境复杂性一般,试验对象是单人,人距离kinect约1.5 m处正向面对kinect成站立姿势,kinect距地约1.2 m,使用kinect摄取270帧视频,帧率30 fps,图像分辨率640×480,视频中的试验人作出4个基本动作,分别标记为动作1~4.

3.2 试验过程

由kinect摄取人体的彩色图像和深度图像,如图7和图8显示的是动作1的彩色及深度图像,接着实现彩色图像和深度图像的坐标对齐并对彩色图像擦除部分背景,如图9所示.对深度图像进行滤波膨胀等预处理,如图10所示.对预处理后的深度图像细化处理,得到人体骨架线,如图11所示.若不对深度图像预处理,获得的人体骨架线有较多毛刺,如图12所示,不符合试验要求.获取骨架线的角点,并将得到的角点分为折点和端点,并分别存储在Point1集合和Point2集合中,如图13所示,其中,红色为端点,蓝色为折点.

图7 人体彩色图像Fig.7 Color image of human body

图8 人体深度图像Fig.8 Depth image of human body

图9 对彩色图像坐标对齐并擦除部分背景Fig.9 Align the color image coordinates and erase part of background

图10 预处理后的深度图像Fig.10 The depth image after pre-processed

图11 细化处理得到人体骨架线Fig.11 The human skeleton line after Thinning-processed

图12 未经预处理得到的人体骨架线Fig.12 The human skeleton line without pre-processed

图13 人体骨架线角点及分类Fig.13 The classified corners of human skeleton line

3.3 试验结果

本试验分别获取动作1~4对应的预处理后的深度图,人体骨架线角点分类图,关节点定位图,试验效果如图14~17所示.

3.4 结果分析

从试验效果图可以看出,笔者方法能够定位到人体的15个关节点.为了验证本试验关节点定位的准确性,笔者做了两个对比试验:①以人工标记方式获取的关节点坐标为基准,对比笔者方法与文献[2]的方法(简称对比方法),得出两种方法获取的各关节点的平均像素误差;②以文献[1]的人体关节点定位方法(其功能实现已内置于kinect产品当中,是目前比较先进的人体关节点定位方法,简称kinect方法)为基准,得出笔者方法定位的各关节点的平均正确识别率.

对比一:首先对试验人的各个关节点做人工标记,然后在相同的试验条件下,对同一个动作,用笔者方法和对比方法分别获取对应关节点的坐标,再分别计算出两者的坐标与人工标记的对应关节点坐标间的欧氏距离[14],若距离小于15个像素,则认定识别正确,否则认定识别失败,得到笔者方法和对比方法的关节点定位平均正确识别率,如图18所示.

图14 动作1Fig.14 Action 1

图15 动作2Fig.15 Action 2

图16 动作3Fig.16 Action 3

图17 动作4Fig.17 Action 4

图18 笔者方法和对比方法的关节点平均正确识别率Fig.18 The correct recognition rate of human jointsof the proposed method and the comparison method

对比二:在相同的试验条件下,同一个动作的对应关节点分别以kinect方法和笔者方法定位出关节点坐标,并以kinect方法获取的关节点坐标为基准,计算出笔者方法定位的关节点坐标与kinect方法获取的对应关节点坐标间的欧氏距离,当两者对应关节点坐标间的欧式距离小于15个像素时则认定识别正确,否则认定识别失败,得到笔者方法定位关节点的平均正确识别率,如图19所示.

从图18可以看出,相较于对比方法,笔者方法定位头节点的误差明显更小,笔者方法定位的其他关节点的误差也相对较小.对比方法的关节点的平均定位准确率是69.7%,而笔者方法的关节点平均定位准确率为76.5%,整体的定位准确率提高了7%左右,其中头节点定位准确率提高效果最为明显,达到了42%.从图19可以看出,笔者方法除肘节点、膝节点、尾椎点外,其他节点的定位相较于kinect方法差别不大,基本吻合,尾椎点的定位效果一般,是由于人体细化后得到的尾椎点位置偏下所致.肘节点和膝节点的定位效果不够理想,平均正确识别率在60%左右,主要原因是当人体双臂伸展或双膝直立无弯曲站立的姿势下,折点定位的误差较大导致的.

4 结论

提出了一种利用深度图像和彩色图像定位人体关节点的方法,笔者的工作主要做了以下改进.

(1) 通过运动目标跟踪获取人体脸部区域中心点作为头节点,防止了直接以骨架线头部端点作为头节点产生的误差.

(2) 获取人体骨架线的角点,并将角点分类为端点和折点,并结合人体刚架比例关系定位出关节点,比直接通过一般性的人体刚架比例关系定位关节点的方法具有更好的适用性.

笔者提出的人体关节点定位方法,还有较大的改进空间,比如角点检测算法的效率有待提高等.

猜你喜欢

关节点端点骨架
浅谈管状骨架喷涂方法
基于深度学习和视觉检测的地铁违规行为预警系统研究与应用
重载机车网络重联TCN 故障节点识别方法研究*
关节点连接历史图与卷积神经网络结合的双人交互动作识别
例谈求解“端点取等”不等式恒成立问题的方法
骨架密度对炭/炭多孔骨架压力浸渗铜的影响
不等式求解过程中端点的确定
周博士考察拾零(六十六)日光温室前屋面开机具作业门处骨架的处理方法
搞好新形势下军营美术活动需把握的关节点
博泽引领座椅骨架技术发展