吴东艳 张凌志 冷爽 韩喜春
摘 要:本文介绍了在Matlab开发环境中利用Kinect获取彩色图像和深度图像的具体操作步骤,以及利用Kinect获取深度图像进行骨骼追踪的原理和实现方法。给出了Kinect摄像头获取深度信息和人体骨骼信息,将每个骨骼点的三维信息转换成深度图上的二维信息,通过滤波和人体像素分类、部位识别,骨骼跟踪系统的20个关节点坐标。实践证明,这种方法不易受外界环境因素的干扰,能较好地克服部位遮挡问题,从而获得高质量的跟踪图像。
关键词:图像采集;Kinect;Matlab;深度图像;骨骼追踪
一、引言
Kinect是一款性价比高的图像传感器,可用于目标跟踪,语音识别,动作识别,捕获彩色图像和深度数据。通过开发算法Kinect能推算出人的骨骼结构。基于Matlab的深度图像采集与处理给出了在Matlab开发环境中利用Kinect 获取彩色图像和深度图的具體操作步骤;利用Kinect深度图像进行骨骼追踪的原理和实现方法[1]。能较好地克服部位遮挡问题,获得高质量的跟踪图像。
二、开发平台的构建
软件安装环境需要Windows7及以上版本的x64操作系统。对于Kinect2则需要安装MATLAB2016a以上版本,本文采用MATLAB2018b,接着安装摄像头驱动程序和开发工具。如本文使用罗技摄像头,就安装罗技摄像头驱动程序。再接着在MATLAB集成开发环境IDE中选择“附加功能管理器”,再选择“获取硬件支持包”,在显示的图形界面中,选择Image Acquisition Toolbox Support Package for OS Generic Video Interface和Kinect for Windows Sensor Image Acquisition Toolbox Support Package for Kinect For Windows Sensor安装,将会同时下载KinectSDK进行安装[2-3]。然后接上Kinect电源,插上USB接口。在命令行输入imaqhwinfo,要是以上步骤没问题的话,命令行窗口会显示出Kinec和罗技摄像头struct信息。Matlab中打开app里面的Image Acquisition,就可以看到Kinect和罗技摄像头在菜单选项里面,然后就可以开始Kinect彩色和深度图像以及逻辑摄像头彩色图像采集了。使用罗技摄像头的图像采集工具箱用户界面如图1所示[4]。
三、利用图像采集工具箱采集彩色和深度图像
在MATLAB主菜单选择应用程序,在应用程序下选择Image Acquisition,进入图像采集工具箱。在Hardware Browser窗口中列出本系统中安装和支持的所有摄像头。其中就有彩色传感器Kinect V2 Color Sensor(kinect-1)和深度传感器Kinect V2 Depth Sensor(kinect-2)。彩色图像有7种格式,深度图像有3种格式。选择某一种图像格式并双击,则选择了该图像格式进行采集。然后在图像采集和预览窗口中选择采集或预览图像。预览是连续采集图像但不保存。图像可以按帧采集并保存。MATLAB图像采集工具箱主用户界面如图1所示。利用此人机交互界面采集的彩色图像和深度图像如图2所示[5]。
点击Start Preview启动图像预览,点击Stop Preview停止图像预览。点击Start Acquisition启动图像采集,点击Stop Acquisition停止图像采集。在采集参数设置窗口可以设置如下参数:每次触发采集的帧数,颜色空间,摄像头高低角度,每秒帧数。在采集时可以设置导出数据,文件采用哪种格式保存,图像在显示器上显示的部分。
在信息窗口Information中显示正在使用的图像传感器配置的相关信息。在交互日志窗口Session Log中操作图像处理工具箱每一步对应的MATLAB命令。可以将其整理到自己设计的MATLAB命令文件中[6]。
图像采集常用命令:
hwInfo = imaqhwinfo('kinect'),识别出系统中两个图像传感器装置。
hwInfo.DeviceInfo(1)和 hwInfo.DeviceInfo(2)分别显示出彩色和深度传感器详细信息。
colorVid = videoinput('kinect',1)和depthVid = videoinput('kinect',2)生成两个视频输入的数据流。
triggerconfig([colorVid depthVid],'manual')设置为手动触发模式。
colorVid.FramesPerTrigger = 100和depthVid.FramesPerTrigger = 100设置每次触发采集多少帧图像数据。
start([colorVid depthVid])和 trigger([colorVid depthVid])启动图像采集并记录数据。
[colorFrameData,colorTimeData,colorMetaData] = getdata(colorVid)和[depthFrameData,depthTimeData,depthMetaData] = getdata(depthVid)重复采集图像数据。
stop([colorVid depthVid])停止彩色和深度图像采集。
骨骼追踪常用命令:
depthSrc = getselectedsource(depthVid)从深度装置得到视频对象。
depthSrc.TrackingMode = 'Skeleton'打开骨骼追踪。
anyPositionsTracked = any(metaDataDepth(95).IsPositionTracked ~= 0)和anySkeletonsTracked = any(metaDataDepth(95).IsSkeletonTracked ~= 0)从深度流检查追踪的骨骼。
trackedSkeletons = find(metaDataDepth(95).IsSkeletonTracked)显示那些骨骼被追踪了。
jointCoordinates = metaDataDepth(95).JointWorldCoordinates(:, :, trackedSkeletons)和
jointIndices = metaDataDepth(95).JointImageIndices(:, :, trackedSkeletons)用彩色顯示关节和关节的坐标[7]。
四、骨骼追踪的实现
深度图像对人体进行识别主要包括人体部位的静态识别、对骨骼、关节位置的判定以及人体动作的动态识别等。Kinect的骨骼追踪技术是通过处理深度图像建立起人体各个关节的坐标,而Kinect的突出功能就是处理深度图像,通过骨骼追踪技术来确定人体的各个部位。深度图像指从观察者角度看,图像所包含信息与场景物体表面距离相关的一种图像。深度图像能直接反映物体表面的三维特征 ,且不受光照、阴影和色度等因素的影响。分析深度图像比较接近Kinect的区域,逐点扫描这些深度区域,判断是否是“人体”目标,图3所示就是根据深度图像识别出人体的20个骨骼点:头部(head)、双肩中央(shoulder center)、脊柱中段(spine)、臀部中央(hip center)、左臀部(hip 1eft)、右臀部(hip right)、左手(hand left)、右手(hand right)、左腕关节(wrist left)、右腕关节(wrist right)、左肘关节(elbow left)、右肘关节(elbow right)、左肩(shoulder left)、右肩(shoulder right)、左膝盖(knee left)、右膝盖(knee right)、左踝关节(ankle left)、右踝关节(ankle right)、左脚(foot left)和右脚(foot right) [8-9]。
Kinec可以将这20个关节位置是通过(x,y,z)三维坐标表示出来,Kinect通过这些关节的坐标来识别人所做的各种动作。坐标系满足右手螺旋规则,Kinect 处于原点位置,y轴正向往上延伸 ,x轴正向往左延伸 ,z轴则与Kinect 摄像头的方向相同,这个空间被称为骨架空间。深度数据由16位组成,利用后3位信息(index)锁定人体目标,将前13位深度数据统一转换为8位的距离信息,并对人体目标和背景做不同的二值处理,即将人物的8位深度距离信息(depth data)全部转换为1,显示为白色,将环境的深度数据转换为0,显示为黑色,实现深度图像的二值化[10]。
将Kinect的骨骼追踪功能应用于视频监控,只要在侦测视角范围,即使在夜间也可以侦查到是否有人在侦测视角范围内就可以被辨别。Kinect还可以识别人的动作,如果被监控的对象有可疑动作,将会实时报警,对一些特定的动作作出报警反应。
五、结束语
本文主要介绍了在Matlab开发平台图像采集工具箱支持下,利用Kinect提取的深度图像进行人体部位识别的方法。该方法对人体部位的区分提供了一种可行的解决方案,为手势轨迹识别和人脸识别打下了良好的基础。但是Kinect仍存有许多有待改进的地方,识别精度不高,速度还不太快,相信下一代Kinect或相关开发工具功能更强,使开发者将精力主要投入到应用上。
参考文献:
[1] 吴国斌,李斌,闫骥洲.KINECT人机交互开发实践[M].北京:人民邮电出版社,2013.
[2] 王日海,汤振宇,吴新天.RealSense互动开发实战[M].北京:机械工业出版社,2016.
[3] 陆奎,周锋. Kinect在家庭智能监控系统中的应用[J].微型机与应用,2014,33(13):13-15.
[4] 李红波,丁林建,冉光勇.基于Kinect深度图像的人体识别分析[J].数字通信,2012,08:21-26.
[5] 余涛.Kinect应用开发实践一用最自然的方式与机器对话[M].机械工业出版社,2012.
[6] Ting Wan, Yujun Wang, Junke Li. Hand Gesture Recognition System Using Depth Data[C].2012:1063-1066.
[7] 刘阳,尚赵伟.基于Kinect骨架信息的交通警察手势识别 [J].计算机工程与应用,2015,51(3):157一161.
[8]李吉,顾德,刘飞.基于Kinect深度信息的手指及手部跟踪研究[J].计算机应用与软件.2015(03):79-83.
[9]吴东艳,张凌志,冷爽,韩喜春. 基于Kinect传感器的音乐喷泉控制系统[J].黑龙江工程学院学报,2018 (2):31一33.
[10] 胡琼, 秦磊, 黄庆明. 基于视觉的人体动作识别综述[J]. 计算机学报, 2013, 36(12):24-25.
作者简介:吴东艳(1975-),女,副教授,硕士,研究方向:测控技术与仪器.
基金项目:黑龙江省教育厅科学技术研究项目12541665