一种人体跟踪方法及系统
技术领域
本发明涉及一种人体跟踪方法及系统,更具体地说,涉及一种当人体运动出现部分部位被其他部位遮挡时采用拟合算法获得被遮挡部位的位置状态的人体跟踪方法及设备。
背景技术
随着游戏开发者技术水平的提高,出现了让用户感受更真实的例如体感游戏,此类游戏需要处理计算人体的运动状态。常见的体感游戏系统中,WII、CyWee等采用如加速度计、陀螺仪等惯性传感器,捕捉人体运动的加速度、方向等信息。但当需要描述人体多个部位时,使用惯性传感器,不仅成本高,使用也极其不便;在此情况下,出现了采用光学捕捉的方法在需要计算运动的人体部位粘贴相应的标记点,通过分析标记点的运动状态描述人体运动,当需要描述人体多个部位时,通过增加标记点的数量,可以以较低的成本实现体感功能,然而用户使用时却会因标记点的存在尤其是大量标记点的存在而感觉繁琐。此后,随着计算的进一步发展,出现了无标记点的人体运动捕捉方案,即通过立体视觉系统、结构光系统、以及ToF(飞行时间time offlight)摄像机等数据源捕捉人体3D点云,通过分析人体点云,可构建出人体模型,进而分析人体运动状态。然而目前的通过点云配准算法构建人体模型的无标记点的人体运动捕捉方案存在以下问题:由于点云数据源等原因,躯干部位点的数量较多,头部、四肢等部位点数量较少,在点云分辨率较低以及一些如遮挡等极端情况下,部分部位甚至不存在点,此时,利用点云配准算法构建人体模型的无标记点的人体运动捕捉方案将完全失效。
发明内容
本发明要解决的技术问题在于,针对现有技术的上述在点云分辨率较低以及一些如遮挡等极端情况下,利用点云配准算法构建人体模型的无标记点的人体运动捕捉方案将完全失效的缺陷,提供一种从低密度点云中构建人体模型的人体跟踪方法和系统。
本发明解决其技术问题所采用的技术方案是:提供一种人体跟踪方法,其特征在于,包括以下步骤:
S1、采用线段表示四肢的上臂、下臂、大腿、小腿和头部,矩形表示躯干,根据人体尺寸参数建立人体模型;
S2、点云采集设备读取当前帧采集到的人体点云数据;
S3、分别计算人体点云数据中每个点到表示上臂、下臂、大腿、小腿、头部的线段和表示躯干的矩形面的距离,比较选择距离每个点最近的部位,并记录该点以及该部位,从而得到每个点与该点最近的部位的配对,该处称为最近点对;
S4、根据最近点对计算得到表示躯干的矩形的四条边线和表示头部的线段,同时根据最近点对采用拟合算法计算得到表示四肢的线段,即计算得到人体姿态参数;
S5、迭代步骤S3、S4,直至满足要求时退出;
S6、根据所得的表示躯干的四条边线和分别表示头部和四肢的线段输出人体模型。
在本发明所述的人体跟踪方法中,所述步骤S1中的用于表示躯干的矩形分为共用一条边的上下两部分矩形,分别为第一矩形和第二矩形,在所述步骤S3中求最近点对时分别计算每个点到第一矩形和第二矩形的距离,并在所述步骤S4中根据所述第一矩形和第二矩形的最近点对计算出所述第一矩形、第二矩形所在的平面,两矩形所在平面的交线即为两矩形共用的边所在直线;
让所述第一矩形和第二矩形的最近点对向所述两矩形共用的边所在直线投影,根据所述第一矩形和第二矩形的宽度,搜索线段使得落得线段范围内的投影的数量最多,所述线段的两个端点即为所述第一矩形和第二矩形共用的边的两个顶点;
根据所述第一矩形和第二矩形的高度计算所述第一矩形和所述第二矩形的其它顶点,从而得到所述第一矩形和第二矩形。
在本发明所述的人体跟踪方法中,所述第一矩形和第二矩形的高度固定,所述计算所述第一矩形和第二矩形的其它顶点的方法为:
在所述第一矩形所在的平面内,分别求过所述第一矩形和所述第二矩形共用的边的两个端点,垂直于所述第一矩形和所述第二矩形共用的边,且方向向上的射线,分别为第一射线和第二射线,分别在所述第一射线和第二射线上求与所述第一射线、第二射线端点距离为所述第一矩形的高度的点,称为第一端点,第二端点,所述第一矩形和所述第二矩形共用的边的两个端点以及所述第一端点、所述第二端点构成所述第一矩形的四个顶点;
在所述第二矩形所在的平面内,分别求过所述第一矩形和第二矩形共用的边的两个端点,垂直于所述第一矩形和所述第二矩形共用的边,且方向向下的射线,分别为第三射线和第四射线,分别在所述第三射线和第四射线上求与所述第三射线、第四射线端点距离为所述第二矩形的高度的点,称为第三端点,第四端点,所述第一矩形和所述第二矩形共用的边的两个端点以及所述第三端点、所述第四端点构成所述第二矩形的四个顶点。
在本发明所述的人体跟踪方法中,所述第一矩形和第二矩形高度不固定但高度之和固定,所述计算所述第一矩形和第二矩形其它顶点的方法为:
在所述第一矩形所在的平面内,求过所述第一矩形和第二矩形共用的边的中点,垂直于所述第一矩形和所述第二矩形共用的边,且方向向上的射线,称为第一射线;
在所述第二矩形所在的平面内,求过所述第一矩形和第二矩形共用的边的中点,垂直于所述第一矩形和所述第二矩形共用的边,且方向向下的射线,称为第二射线;
以所述第一矩形和第二矩形共用的边的中点为起始点,分别在所述第一射线和所述第二射线上搜索第一端点和第二端点,使得所述第一矩形的最近点对中投影落在所述起始点和所述第一端点之间的点的数量与所述第二矩形的最近点对中投影落在所述起始点和所述第二端点之间的点的数量之和最大,并且所述起始点到所述第一端点的线段长度与所述起始点到所述第二端点的线段长度之和等于所述第一矩形和第二矩形的高度之和;
求在所述第一矩形所在的平面内,过所述第一端点平行于所述第一矩形和第二矩形共用的边所在直线的直线,称为第一边界直线,在所述第一边界直线上,求与所述第一端点距离为所述第一矩形宽度的一半的两个点,称为第三端点、第四端点,所述第一矩形和第二矩形共用的边的两个端点以及所述第三端点、所述第四端点构成所述第一矩形的四个顶点;
求在所述第二矩形所在的平面内,过所述第二端点平行于所述第一矩形和第二矩形共用的边所在直线的直线,称为第二边界直线,在所述第二边界直线上,求与所述第二端点距离为所述第二矩形宽度的一半的两个点,称为第五端点、第六端点,所述第一矩形和第二矩形共用的边的两个端点以及所述第五端点、所述第六端点构成所述第二矩形的四个顶点。
在本发明所述的人体跟踪方法中,所述步骤S4中采用拟合算法计算得到表示四肢的线段的方法为:所述上臂为所述下臂的父部位,所述下臂为所述上臂的子部位,所述大腿为所述小腿的父部位,所述小腿为所述大腿的子部位,当父部位最近点与子部位的最近点的比值大于某一数值时,则先采用拟合算法计算父部位的姿态参数,再拟合计算子部位的姿态参数,进而得到父部位和子部位;当父部位的最近点与子部位的最近点数量比值小于该数值时,则先拟合子部位所在的直线,再在该直线上查找一个到对应的躯干边线端点的距离与父部位长度相等点作为父部位与子部位间的关节点,然后根据该关节点和父部位与躯干之间的关节点得到父部位,再根据该关节点和子部位的长度得到子部位。
在本发明所述的人体跟踪方法中,在步骤S3前,还包括根据模型重心和点云重心的偏差,调整人体模型。
在本发明所述的人体跟踪方法中,在步骤S4后,还包括根据人体模型的中头部信息与通过所采集的点云计算得到的头部的最近点对信息,调整模型。
本发明还提供一种人体跟踪系统,其特征在于,包括点云采集设备、模型初始化单元、跟踪初值预测单元和人体跟踪单元,其中,所述点云采集设备包括点云采集模块,
所述点云采集模块,用于读取当前帧采集到的点云数据;
所述模型初始化单元,与所述人体跟踪单元连接,用于根据人体尺寸参数,采用线段表示四肢的上臂、下臂、大腿、小腿和头部,矩形表示躯干构造人体模型;
所述跟踪初值预测单元,与所述模型初始化单元和所述人体跟踪单元连接,用于为所述人体跟踪单元提供初始人体模型状态信息;
所述人体跟踪单元,与所述点云采集设备以及所述跟踪初值预测单元连接,用于读取跟踪初值预测单元中的人体模型信息和所述点云采集模块采集的到点云数据,并以从所述跟踪初值预测单元中读取的人体模型信息为初始值,对点云中每个点求取与该点距离最近的人体部位,即最近点对,并根据最近点对计算得到表示躯干的矩形的四条边线和表示头部的线段,同时根据最近点对采用拟合算法计算得到表示四肢的线段,即计算得到人体姿态参数,然后将所述人体姿态参数传送给所述跟踪初值预测单元和/或输出。
在本发明所述的人体跟踪系统中,所述人体跟踪单元进一步包括最近点对求取单元,与所述最近点对求取单元连接的第一数据处理单元和第二数据处理单元,以及与所述最近点对求取单元、所述第一数据处理单元和所述第二数据处理单元连接的控制单元,其中
所述最近点对求取单元,用于求取所述点云数据中的每个点到人体每个部位的距离,比较选择距离每个点最近的部位,并记录该点以及该部位,从而得到每个点与该点最近的部位的配对,该处称为最近点对;
所述第一数据处理单元,用于根据最近点对计算得到表示躯干的矩形的四条边线和表示头部的线段,即人体模型的躯干和头部的姿态参数;
所述第二数据处理单元,用于根据最近点对采用非线性拟合算法计算得到表示四肢的线段,即人体模型的四肢的姿态参数;
所述控制单元,用于控制所述最近点对求取单元、所述第一数据处理单元、所述第二数据处理单元迭代运行,直至满足要求时,将所述人体姿态参数传送给所述跟踪初值预测单元和/或输出。
在本发明所述的人体跟踪系统中,表示躯干的矩形分为共用一条边的上下两部分矩形,分别为第一矩形和第二矩形,在所述最近点对求取单元中求最近点对时分别计算每个点到第一矩形和第二矩形的距离,并在第一数据处理单元中根据所述第一矩形和第二矩形的最近点对计算出所述第一矩形、第二矩形所在的平面,两矩形所在平面的交线即为两矩形共用的边所在直线;
让所述第一矩形和第二矩形的最近点对向所述两矩形共用的边所在直线投影,根据所述第一矩形和第二矩形的宽度,搜索线段使得落得线段范围内的投影的数量最多,所述线段的两个端点即为所述第一矩形和第二矩形共用的边的两个顶点;
根据所述第一矩形和第二矩形的高度计算所述第一矩形和所述第二矩形的其它顶点,从而得到所述第一矩形和第二矩形。
在本发明所述的人体跟踪系统中,所述第一矩形和所第二矩形的高度固定,在所述第一数据处理单元中计算所述分别计算所述第一矩形和所述第二矩形的其他顶点:
在所述第一矩形所在的平面内,分别求过所述第一矩形和所述第二矩形共用的边的两个端点,垂直于所述第一矩形和所述第二矩形共用的边,且方向向上的射线,分别为第一射线和第二射线,分别在所述第一射线和第二射线上求与所述第一射线、第二射线端点距离为所述第一矩形的高度的点,称为第一端点,第二端点,所述第一矩形和第二矩形共用的边的两个端点以及所述第一端点、所述第二端点构成所述第一矩形的四个顶点;
在所述第二矩形所在的平面内,分别求过所述第一矩形和第二矩形共用的边的两个端点,垂直于所述第一矩形和所述第二矩形共用的边,且方向向下的射线,分别为第三射线和第四射线,分别在所述第三射线和第四射线上求与所述第三射线、第四射线端点距离为所述第二矩形的高度的点,称为第三端点,第四端点,所述第一矩形和所述第二矩形共用的边的两个端点以及所述第三端点、所述第四端点构成所述第二矩形的四个顶点。
在本发明所述的人体跟踪系统中,所述第一矩形和所述第二矩形高度不固定但高度之和固定,在所述第一数据处理单元中计算所述分别计算所述第一矩形和所述第二矩形的其他顶点:
在所述第一矩形所在的平面内,求过所述第一矩形和第二矩形共用的边的中点,垂直于所述第一矩形和所述第二矩形共用的边,且方向向上的射线,称为第一射线;
在所述第二矩形所在的平面内,求过所述第一矩形和第二矩形共用的边的中点,垂直于所述第一矩形和所述第二矩形共用的边,且方向向下的射线,称为第二射线;
以所述第一矩形和第二矩形共用的边的中点为起始点,分别在所述第一射线和所述第二射线上搜索第一端点和第二端点,使得所述第一矩形的最近点对中投影落在所述起始点和所述第一端点之间的点的数量与所述第二矩形的最近点对中投影落在所述起始点和所述第二端点之间的点的数量之和最大,并且所述起始点到所述第一端点的线段长度与所述起始点到所述第二端点的线段长度之和等于所述第一矩形和第二矩形的高度之和;
求在所述第一矩形所在的平面内,过所述第一端点平行于所述第一矩形和第二矩形共用的边所在直线的直线,称为第一边界直线,在所述第一边界直线上,求与所述第一端点距离为所述第一矩形宽度的一半的两个点,称为第三端点、第四端点,所述第一矩形和第二矩形共用的边的两个端点以及所述第三端点、所述第四端点构成所述第一矩形的四个顶点;
求在所述第二矩形所在的平面内,过所述第二端点平行于所述第一矩形和第二矩形共用的边所在直线的直线,称为第二边界直线,在所述第二边界直线上,求与所述第二端点距离为所述第二矩形宽度的一半的两个点,称为第五端点、第六端点,所述第一矩形和第二矩形共用的边的两个端点以及所述第五端点、所述第六端点构成所述第二矩形的四个顶点。
在本发明所述的人体跟踪系统中,在所述第二处理单元中采用拟合算法计算得到表示四肢的线段:所述上臂为所述下臂的父部位,所述下臂为所述上臂的子部位,所述大腿为所述小腿的父部位,所述小腿为所述大腿的子部位,当父部位最近点与子部位的最近点的比值大于某一数值时,则先采用拟合算法计算父部位的姿态参数,再拟合计算子部位的姿态参数,进而得到父部位和子部位;当父部位的最近点与子部位的最近点数量比值小于该数值时,则先拟合子部位所在的直线,再在该直线上查找一个到对应的躯干边线端点的距离与父部位长度相等点作为父部位与子部位间的关节点,然后根据该关节点和父部位与躯干之间的关节点得到父部位,再根据该关节点和子部位的长度得到子部位。
在本发明所述的人体跟踪系统中,还包括重心调整单元,用于在所述控制单元控制下根据模型重心和点云重心的偏差,调整人体模型。
在本发明所述的人体跟踪系统中,还包括头部对齐单元,用于在所述控制单元控制下根据人体模型的中头部信息与通过所采集的点云计算得到的头部的最近点对信息,调整人体模型。
实施本发明的人体跟踪方法和系统,具有以下有益效果:由于点云数据源等原因,躯干部位点的数量较多,头部、四肢等部位点数量较少,在点云分辨率较低以及一些如遮挡等极端情况下,部分部位甚至不存在点,利用本发明所提供的方法及系统仍然能够很好地构建人体模型,分析跟踪人体运动。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明一个实施例的程序流程图;
图2是本发明一个实施例的人体模型示意图;
图3是本发明一个实施例的点到线段的投影示意图;
图4是本发明一个实施例的另一个点到线段的投影示意图;
图5是本发明另一个实施例的人体模型示意图;
图6是本发明一个实施例的中轴求取示意图;
图7是本发明一个实施例的头部模型初始状态图;
图8是本发明一个实施例的头部模型调整后的状态图;
图9是本发明一个实施例的四肢模型示意图;
图10是本发明一个实施例的系统示意图;
图11是本发明另一实施例的系统示意图。
具体实施方式
如图1所示,在本发明的人体跟踪方法的第一实施例中,首先建立人体模型,建立过程将在下面详细说明。然后利用点云采集设备(例如立体视觉系统、结构光系统、ToF(飞行时间,time of flight)摄像机)读取当前帧采集到的特定人物的点云数据。接着分别计算点云数据中每个点到表示上臂、下臂、大腿、小腿、头部的线段和表示躯干的矩形面的距离,比较选择距离每个点最近的部位,并记录该点以及该部位,从而得到每个点与每个点最近的部位的配对,该处称为最近点对,具体计算方法将在下面将详细说明。再接着,根据最近点对计算表示躯干的矩形的四条边线和表示头部的线段,采用拟合算法计算表示四肢的线段,并在计算最近点对步骤和计算人体模型的躯干的四条边线、头部线段和四肢线段步骤之间,进行计算迭代,以满足需求(例如循环次数或者精度要求等)具体计算方法将在下面详细说明。最后,根据所得的四条边线、和分别表示头部和四肢的线段输出人体模型。
建立人体模型的过程如下:如图2所示,采用线段分别表示四肢的上臂、下臂、大腿、小腿和头部,采用矩形表示躯干,并根据人体学上的人体比例,通过人体参数建立人体模型。
所述人体参数分为尺寸参数和姿态参数两类,其中,人体尺寸参数在跟踪过程中保持不变,姿态参数随着人体运动而变化。跟踪过程即计算人体的姿态参数并根据其调整人体模型。
尺寸参数可以在系统初始化时获取。人体各个部位的长度与身高存在比例关系,不同性别的不同比例有所区别,该比例关系对于本领域的技术人员来说,可以很容易地从人体学中获知。
当不考虑性别的差异时,各部位尺寸与身高的比例如下表所示:
项目 |
比例(身高为H) |
项目 |
比例(身高为H) |
头 |
0.113 |
小腿 |
0.265 |
上手臂 |
0.205 |
身躯(高) |
0.416 |
下手臂 |
0.141 |
胸宽 |
0.169 |
手掌 |
0.109 |
臀宽 |
0.182 |
大腿 |
0.206 |
|
|
在跟踪程序运行前,获取人体身高即可得到人体模型的尺寸参数。身高获取可以通过手动输入完成,也可以在人体直立的情况下通过分析采集到的人体点云中最高点与最低点的长度完成,还可以在人体伸开双臂的情况下分析人体点云中最左点和最右点的长度完成。
当然人体模型也可以采用除上述方法以外的为本技术领域的技术人员公知的其他方法建立。
本发明中求取最近点对的方法为:先计算每点到每条线段和矩形面的的距离,然后比较得出最近点和最近点相对应的部位,即最近点对。点到线段的距离的计算方法如图3和图4所示,首先判端点到线段所在直线的投影与线段的位置关系,当点到线段所在直线的投影在线段上时,如图3所示,点到线段的距离为点到其所在线段上投影的距离;当点到线段所在直线的投影在线段以外时,如图4所示,点到线段的距离为点与线段两个端点中距离较小的一个距离。点到矩形面的距离的计算方法类似点到线段的距离的计算方法。首先判端点到矩形面所在平面的投影与矩形面的位置关系,当点到矩形面的投影在矩形面内部时,点到矩形面的距离为点到投影的距离;当点到矩形面的投影在矩形面外部时,点到矩形面的距离为点与矩形面的四条边中距离最小的一个距离。此后便可比较得出最近点对。
根据最近点对计算表示躯干的矩形的四条边线。由于人体躯干上的点较多,因此可采用云点配准算法计算旋转、平移变换,将求得的变换作用于躯干矩形的四个顶点,即可求出调整后躯干矩形的四个顶点,进而求取矩形的四条边线,此为本技术领域相关人员熟知的计算方法。
作为可选的,为了更准确的定位躯干部位的姿态,则可采用非线性拟合算法计算得到躯干部位的姿态参数。同时,为进一步精准定位,作为可选的,如图5所示,可将表示躯干的矩形面分为上下两部分,分别为第一矩形和第二矩形,该第一矩形和第二矩形可以绕中轴旋转。分别求取第一矩形面与点云中点的最近点对序列
以及第二矩形面与点云的最近点对序列
然后计算得出两部分的姿态参数,即计算得出第一矩形和第二矩形各自的四条边线,其中第一矩形的下边线与第二矩形的上边线重合。
求取方法如下:首先使用全部点对拟合躯干模型。设代表躯干上半部分的第一矩形所在平面方程为:(A1x+B1y+C1z+D1)=0(1),其中,(A1,B1,C1)三个参数不独立,不失一般性,可根据情况设定三个中的一个为1。设代表躯干下半部分的第二矩形所在平面方程为:(A2x+B2y+C2z+D2)=0(2),其中,(A2,B2,C2)三个参数不独立,不失一般性,可根据情况设定三个中的一个为1。将躯干分为上、下两部分,则意味着躯干的函数方程为分段函数,这些给参数求取带来困难,为此,采用公式(3)作为躯干模型的方程:
(A1x+B1y+C1z++D1)*(A2x+B2y+C2z+D2)=0(3)。正常情况下,躯干为直立状态,因此,可设定C1=1,C2=1,可减少模型参数。将问题转化为求
(A1,B1,C1,D1,A2,B2,C2,D2),使得公式(4)最小:
给定初始值,使用Levenberg-Marquardt算法(一种非线性优化算法,可参www.ics.forth.gr/~lourakis/levmar)即可求得求参数(A
1,B
1,C
1,D
1)、(A
2,B
2,C
2,D
2)。这里,使用最近点序列中的点
计算模型参数。
然后将两个平面交线作为中轴,求取中轴中点及两个端点。中轴的两个端点的计算方法如下:对中的每个点,向中轴所在直线投影,并记录该投影数组。设中轴所在直线方程为:设任意点P(xp,yp,zp),则P(xp,yp,zp)在中轴所在直线的投影为:
若设定中轴所在直线方向向量为单位向量,即dirx
2+diry
2+dirz
2=1,则投影可简化为:
tp=(xp-x0)*dirx+(yp-y0)*diry+(zp-z0)*dirz(7),将所有点向中轴所在直线投影,根据投影的分布,以及中轴的长度(该长度为人体模型的参数)求中轴中点及端点。
对投影数组进行排序。以中轴长度扫描数组,求在中轴长度范围内最多的点的数量。如图6所示,其中黑色圆为投影,线段长度为中轴长度,移动线段,统计落在线段区间内的点的数量,找一个落在线段区间内的点的数量最大的线段,线段的端点为中轴的端点,线段的中点为中轴的中点。
在两个平面内,分别求过中轴中心,垂直于中轴的直线。已知平面的法向量,以及平面的直线方向向量,则所求直线的方向向量为二者的叉积,再已知一个点,即可求出所求直线方程。上、下部分最近点分别向所求直线做投影并记录投影数组,投影方法前面已有说明。根据两个投影数组分布,计算第一矩形和第二矩形的边线。
此时分作两种情况:(1)、上下两部分高度固定,此时直接在所求直线上向上(下)求到中轴距离为上(下)部分高度的点,即可确定边界的中点,过中点求与中轴直线平行的线,左右拓展中轴长度的一半,即可求端点。(2)、上下部分高度不固定,但两部分高度之和固定,设总高度为L_total,采用搜索完成该过程,设搜索过程中,上部分高度为L_upper,下部分高度为L_lower,对每个L_upper,在上部分点集中找出投影在0到L_upper的点的数量count_upper,在上部分点集中找出投影在0到(L_total-L_upper)的点的数量count_lower,循环,找出(count_upper+count_lower)的最大值,并记录L_upper,(L_total-L_upper),作为上下部分真实的高度。此时,直接在所求直线上向上(下)求到中轴距离为上(下)部分长度的点,即可确定边界的中点,过中点求与中轴直线平行的线,左右拓展中轴长度的一半,即可求端点。
得到端点后便可得出分别表示躯干上下两部分的第一矩形和第二矩形的边线,从而获得躯干的位置和姿态。
根据最近点对计算表示头部的线段。已知头部关节的位置、头部线段的长度以及最近点对,通过力矩平衡原理旋转即可完成头部线段的计算。如图7所示,初始状态时,部位上的点到其最近点形成一个力矢量,使得部位绕关节旋转,转动到特定位置,各个力产生的力矩平衡,调整后的状态示意图如图8所示。
作为可选的,可采用拟合算法更加准确的获得头部位置和状态。首先过关节点拟合直线。由于使用最小二乘法拟合过固定点的直线较为繁琐,是比较复杂的非线性运算,这里使用最近点集的重心作为直线上的另一点。此时,根据头部与躯干的结合点、表示头部的线段所在直线和线段长度便可获得该表示头部的线段位置和状态。还可以使用加权重心作为直线上的另一点,权重为最近点距P1的距离的函数,距离越远,权重越大,例如weight=sqrt(dis),dis为最近点到P1的距离,weight为权重,sqrt为平方根函数。
根据最近点对计算表示四肢的线段。如图9所示,四肢模型为相交的两条线段,约束为公共点到指定点的距离为固定值。P1为躯干上的关节,在躯干处理时已经求出,P2、P3待求,其中P2与P1的长度固定且已知,P2与P3的长度固定且已知。此处可采用两种方法拟合:
第一种方法,采用LM算法拟合。由于在3维空间描述该模型比较繁琐,对点集拟合平面,向平面投影,在平面内建立平面坐标系,将三维直线转换成平面直线处理,投影之后模型的解析式方程为:
(A1*(x-x0)+B1(y-y0))*(A2*(x-x0)+B2(y-y0))=0,约束为:
(xp-x0)2+(yp-y0)2=C,C为P2与P1的长度的平方。将问题转化为求
(x0,y0,A1,B1,B2,B2),使得公式最小:
其中λ为惩罚系数,由于要优先保证(xp-x0)2+(yp-y0)2=C,λ可以设定为较大的数,例如100等。给定初始值,使用LM算法,可以计算出(x0,y0,A1,B1,A2,B2)。需要说明的是(A1,B1),(A2,B2)并不独立,可设定其中的一个为1,减少模型参数。求出(x0,y0,A1,B1,A2,B2)后,求出P1、P2、P3的2D坐标,可将其转换为3D坐标。
第二种方法,直接拟合。根据父部位、子部位最近点的数量比值判断如何拟合父部位和子部位。其中,上臂为下臂的父部位,下臂为上臂的子部位,大腿为小腿的父部位,小腿为大腿的子部位。当父部位最近点与子部位的最近点的比值大于某一数值,例如0.6时,则先拟合父部位,再拟合子部位;当父部位的最近点与子部位的最近点数量比值小于该数值时,则先拟合子部位所在的直线,再在该直线上查找一个点作为父部位与子部位间的关节点,该点到对应的躯干边线端点的距离与父部位长度相等,例如左下臂所在直线上的某一点到躯干左边线上端点的距离等于上臂的长度,然后根据该关节点和父部位与躯干间的关节点得到父部位,再根据该关节点点和子部位的长度得到子部位。具体计算方法如下:(1)、先拟合父部位:过P1,拟合父部位最近点集。由于使用最小二乘法拟合过固定点的直线较为繁琐,是比较复杂的非线性运算,这里使用最近点集的重心作为直线上的另一点,还可以使用加权重心作为直线上的另一点,权重为最近点距P1的距离的函数,距离越远,权重越大,例如weight=sqrt(dis),dis为最近点到P1的距离,weight为权重,sqrt为平方根函数。拟合完父部位,取直线上最近点方向与P1的距离为P2与P1的长度的点作为子部位、父部位之间的关节点,拟合子部位,拟合方法同上。子部位拟合完成后,在子部位所在直线上,取子部位最近点方向与关节的距离为P2与P3的长度的点作为子部位末端。(2)、先拟合子部位所在的直线:使用最小二乘法拟合子部位的最近点所在直线line_lower。求P1到拟合的直线的距离dis_line_lower_P1。如果dis_line_lower_P1大于P2与P1的长度,此时在点到直线的垂线上,在点P1与直线垂足方向上,找一个与P1距离P2与P1的长度的点,作为关节点,过关节点拟合子部位最近点的直线,并在子部位最近点方向上,取与关节的距离为P2与P3的长度的点作为子部位末端。如果dis_line_lower_P1等于P2与P1的长度,此时设定点P1与直线的垂足为关节点,在line_lower上,在子部位最近点方向上,取与关节的距离为P2与P3的长度的点作为子部位末端。如果dis_line_lower_P1小于P2与P1的长度,此时在line_lower上可以找到两个距P1距离等于P2与P1的长度的点,即2个候选关节点。然后从两个点中找出一个最优的作为关节点,取与关节的距离为P2与P3的长度的点作为子部位末端。这里最优的计算方法是,子部位全部最近点到line_lower上投影,求与两个候选关节点与最远点的距离,将与最远点距离最接近P2与P1的长度的那个点作为关节点。从而得到表示四肢的线段,获得四肢的位置与姿态。
为了更加精准,在整个求取人体模型的过程中,将从求取最近点对到求取人体模型的各个部位的位置与姿态的步骤进行迭代,直至满足一定的要求(例如循环次数、精度等)时退出,从而得到人体模型的各个部位的位置与姿态。
在实现的过程中,例如在一些人体运动剧烈的情况下,可能出现,使用迭代找出最近点对容易陷入局部最优,导致人体建模失败的情形,此时,可以使用重心对齐的方法解决这一问题。所述重心对齐是以点云的重心为参考,根据模型重心与点云重心的偏差,调整模型状态。重心对齐一般在求部位最近点过程之前完成。过程如下:步骤一、计算采集到的点云的重心,方法1:求点云的物理位置平均值,即重心;方法2:求加权重心,先求点云的重心,以重心位置为参考位置,点离重心越远,权重越小;方法3:通过其它求躯干上的点云重心,求取方法用主视图进行提取,求重心。步骤二、计算模型的重心,方法1:求模型关节点的物理位置平均值,即重心;方法2:求加权重心,先求模型的重心,以重心位置为参考位置,关节离重心越远,权重越小。步骤三、计算点云重心与模型重心的偏差,通过两个点的三维坐标相减,得到偏差。步骤四、根据偏差修正模型,对模型上的关节点进行平移,平移量为偏差乘以一个系数,该系数可以设定为1,也可以设定略大于1或者略小于1,例如1.2或0.8等。
作为可选,实际运行中,头部运动相对缓和,并且受到手、腿等其它部位干扰较少,容易跟踪,因此,可以以头为基准,进行模型和点云的对齐,防止人体跟踪出现较大偏差。过程如下:步骤一、获取头部的最近点集,这部分求取过程与前面所述最近点求取过程一致,如果前面已求取并记录头部最近点,这里直接读取即可。步骤二、根据在头部上选取的对齐部位,计算相应的位置并求取偏差,方法1:求取头部最近点中的最高点和人体模型中头部的最高点并计算偏差,所述偏差主要是上下方向的偏差,即y坐标偏差;方法2:求取头部最近点的重心和人体模型中头部的重心并计算偏差,所述偏差主要是上下方向的偏差,即y坐标偏差。步骤三、调整模型,对人体模型上的关节点进行平移,平移量为偏差乘以一个系数,该系数可以设定为1,也可以设定略大于1或者略小于1,例如1.2或0.8等。
图10是本发明一个实施例的系统示意图。图中显示了点云采集设备、模型初始化单元、人体跟踪单元、跟踪初值预测单元。所述点云采集设备包括立体视觉系统、结构光系统以及TOF(飞行时间,time of flight)摄像机等,用于读取当前帧采集到的场景点云,并提取出人体上的点云。即当场景中除人外还包括其他背景时,需要对该背景进行去除。所述模型初始化单元,与所述人体跟踪单元连接,用于计算人体尺寸参数,从而采用线段表示四肢的上臂、下臂、大腿、小腿和头部,矩形表示躯干构造人体模型。在跟踪运行前,获取人体身高即可得到人体模型的尺寸参数。身高获取可以通过手动输入完成,也可以在人体直立的情况下通过分析采集到的人体点云中最高点与最低点的长度完成,还可以在人体伸开双臂的情况下分析人体点云中最左点和最优点的长度完成。所述跟踪初值预测单元,与所述模型初始化单元和所述人体跟踪单元连接,用于存储人体模型的状态信息。当没有运动历史信息时,从模型尺寸初始化单元读取人体尺寸,随机设定人体的姿态数据,将模型状态数据存储于该单元。当存在运动历史信息时,根据人体状态的历史信息,预测下一帧的人体的状态,预测可以采用kalman滤波、例子滤波等预测方法,也可以假设人体两帧之间静止,简单的使用上一帧的状态。所述人体跟踪单元,与所述点云采集设备连接,用于读取跟踪初值预测单元中的人体模型信息和所述点云数据,并以此为初始值求取人体模型的姿态参数,然后将所述姿态参数传送给跟踪单元和/或输出。
如图10所示,所述人体跟踪单元进一步包括最近点对求取单元,与所述最近点对求取单元连接的第一数据处理单元和第二数据处理单元,以及与所述最近点对求取单元、所述第一数据处理单元和所述第二数据处理单元连接的控制单元。所述最近点对求取单元,用于求取所述点云数据中的每个点到人体每个部位的距离,比较选择距离每个点最近的部位,并记录该点以及该部位,从而得到每个点与该点最近的部位的配对,该处称为最近点对。所述第一数据处理单元,用于根据最近点对计算得到表示躯干的矩形的四条边线和表示头部的线段,即人体模型的躯干和头部的姿态参数。因为在一般情况下,头部和躯干的点云数据很多,所以此处的计算方法可以为点云配准算法,当然,在上述部位的点云数据并非很多,例如运动幅度较大出现遮挡的情况是,为了更精确的计算出该部位的姿态参数,可以采用非线性拟合算法。所述控制单元控制所述第一数据处理单元迭代运行,直至满足要求(例如循环次数或精度要求等)时,将结果送入所述跟踪初值预测单元和/或输出。所述第二数据处理单元,用于根据最近点对采用非线性拟合算法计算得到表示四肢的线段,即人体模型的四肢的姿态参数。所述控制单元控制所述第二数据处理单元迭代运行,直至满足要求(例如循环次数或精度要求等)时,将结果送入所述跟踪初值预测单元和/或输出。
如图10所示,所述最近点对求取单元包括第一数据计算单元、第二数据计算单元、选择模块和记录模块。其中,所述第一数据计算单元,用于计算所述点云数据中每个点到表示人体模型的头部和四肢的线段的距离。所述第二数据计算单元,用于计算所述点云数据中每个点到表示人体模型的躯干部位的矩形的距离。所述选择模块,与所述第一数据计算单元和第二数据计算单元链接,用于比较两个数据计算模块中的计算结果,得到每个点到人体模型每个点与该点距离最近的部位的配对,该处称为最近点对。所述记录模块,与所述选择模块连接,用于记录所述最近点对。
图11是本发明另一实施例的系统示意图。图中显示了点云设备、模块初始化单元、跟踪初值预测单元、重心调整单元、最近点对求取单元、第一数据处理单元、第二数据处理单元和头部对齐单元和控制单元。
所述重心调整单元用于,例如在一些人体运动剧烈的情况下,可能出现,使用迭代找出最近点对容易陷入局部最优,导致人体建模失败的情形。此时,可以通过重心调整单元使用重心对齐的方法解决这一问题。所述重心对齐是以点云的重心为参考,根据模型重心与点云重心的偏差,调整模型状态。重心对齐一般在求部位最近点过程之前完成。即在采集完点云数据时,所述控制单元向所述重心调整单元发送调整指令,控制其对人体模型进行重心对齐调整。所述重心调整单元中的工作过程如下:步骤一、计算采集到的点云的重心,方法1:求点云的物理位置平均值,即重心;方法2:求加权重心,先求点云的重心,以重心位置为参考位置,点离重心越远,权重越小;方法3:通过其它求躯干上的点云重心,求取方法用主视图进行提取,求重心。步骤二、计算模型的重心,方法1:求模型关节点的物理位置平均值,即重心;方法2:求加权重心,先求模型的重心,以重心位置为参考位置,关节离重心越远,权重越小。步骤三、计算点云重心与模型重心的偏差,通过两个点的三维坐标相减,得到偏差。步骤四、根据偏差修正模型,对模型上的关节点进行平移,平移量为偏差乘以一个系数,该系数可以设定为1,也可以设定略大于1或者略小于1,例如1.2或0.8等。
所述头部对齐单元可用作调整人体模型偏差。实际运行中,头部运动相对缓和,并且受到手、腿等其它部位干扰较少,容易跟踪,因此,可以以头为基准,进行模型和点云的对齐,防止人体跟踪出现较大偏差。即在得到人体模型姿态参数后,所述控制单元向所述头部对齐单元发送调整指令,控制其对人体模型进行调整。所所述头部对齐单元的工作过程如下:步骤一、获取头部的最近点集,这部分求取过程与前面所述最近点求取过程一致,如果前面已求取并记录头部最近点,这里直接读取即可。步骤二、根据在头部上选取的对齐部位,计算相应的位置并求取偏差,方法1:求取头部最近点中的最高点和人体模型中头部的最高点并计算偏差,所述偏差主要是上下方向的偏差,即y坐标偏差;方法2:求取头部最近点的重心和人体模型中头部的重心并计算偏差,所述偏差主要是上下方向的偏差,即y坐标偏差。步骤三、调整模型,对人体模型上的关节点进行平移,平移量为偏差乘以一个系数,该系数可以设定为1,也可以设定略大于1或者略小于1,例如1.2或0.8等。
图11中的其他单元的功能在本发明的上一个实施例中已详细阐明,在此不再描述。
本发明是通过一些实施例进行描述的,本领域技术人员知悉,在不脱离本发明的精神和范围的情况下,可以对这些特征和实施例进行各种改变或等效替换。另外,在本发明的教导下,可以对这些特征和实施例进行修改以适应具体的情况及材料而不会脱离本发明的精神和范围。因此,本发明不受此处所公开的具体实施例的限制,所有落入本申请的权利要求范围内的实施例都属于本发明的保护范围。