一种基于点云的实时三维人体测量方法、系统及存储介质与流程

    专利2022-07-08  118


    本发明涉及人体测量技术领域,特别是涉及一种基于点云的实时三维人体测量方法、系统及存储介质。



    背景技术:

    三维人体测量技术是计算机视觉领域中热门的研究内容之一。与传统的接触式人体测量方法相比,三维人体测量技术具有速度快、精度高、无接触、自动化程度高等特点。随着计算机视觉的迅速发展,3d摄像头与人体重建技术都日益成熟,可实现更高效便捷的人体测量,广泛应用于体态健康管理、服装设计与制作、虚拟试衣等领域。

    三维人体测量技术是一种直接在人体三维数据上计算包括关键点位置、围度、长度等人体尺寸信息的技术,现有的实现三维人体测量的技术主要是基于蒙皮多人线性模型(skinnedmulti-personlinear,smpl)的三维人体测量方法,其采集被测人员的深度图像,将深度图像融合为规则点云,拟合参数化人体模板,求解参数化人体模板的形态参数和姿态参数,使得基于上述参数变形的smpl人体模板与所获得的点云尽可能拟合,通过标准参数化人体模板定义的人体参数获取方式获取当前对象的人体参数,该方法对硬件采集设备要求低,使用简单,应用前景广阔,但是,该方法复杂度较高,对运算平台的要求较高,占用资源大,无法实现实时性。



    技术实现要素:

    为了弥补上述现有技术的不足,本发明提出一种基于点云的实时三维人体测量方法、系统及存储介质。

    本发明的技术问题通过以下的技术方案予以解决:

    一种基于点云的实时三维人体测量方法,包括如下步骤:

    s1:从人体的点云中确定第一关键点,其中,所述第一关键点包括:左侧颈点、右侧颈点、左腋下点、右腋下点、会阴点;s2:根据确定的所述第一关键点分割出所述人体的各部分对应的点云,其中,所述人体的各部分包括头部、躯干、左臂、右臂、左腿和右腿六部分,所述头部对应的点云根据所述左侧颈点和所述右侧颈点进行分割,所述左臂和所述右臂对应的点云根据所述左腋下点和所述右腋下点进行分割,所述左腿、右腿对应的点云根据所述会阴点进行分割,所述躯干对应的点云为分割完所述头部、所述左臂、所述右臂、所述左腿和所述右腿后剩下的点云;s3:从所述人体的点云中确定第二关键点,其中,所述第二关键点包括:前颈点、后颈点、左胸点、右胸点、左膝点、右膝点;s3:根据所述第一关键点、所述第二关键点及所述人体的各部分对应的点云,计算所述人体的主要尺寸,其中,所述人体的主要尺寸包括围度和曲线长,所述围度包括:颈围、左上臂围、右上臂围、左夹围、右夹围、和躯干围,所述曲线长包括:会阴上部前后长、左背长、右背长。

    一种基于点云的实时三维人体测量系统,包括:人体第一关键点提取单元,用于从人体的点云中确定第一关键点,其中,所述第一关键点包括:左侧颈点、右侧颈点、左腋下点、右腋下点、会阴点;人体点云分割单元,用于根据确定的所述第一关键点分割出所述人体的各部分对应的点云,其中,所述人体的各部分包括头部、躯干、左臂、右臂、左腿和右腿六部分,所述头部对应的点云根据所述左侧颈点和所述右侧颈点进行分割,所述左臂和所述右臂对应的点云根据所述左腋下点和所述右腋下点进行分割,所述左腿、右腿对应的点云根据所述会阴点进行分割,所述躯干对应的点云为分割完所述头部、所述左臂、所述右臂、所述左腿和所述右腿后剩下的点云;人体第二关键点提取单元,用于从所述人体的点云中确定第二关键点,其中,所述第二关键点包括:前颈点、后颈点、左胸点、右胸点、左膝点、右膝点;以及人体主要尺寸计算单元,用于根据所述第一关键点、所述第二关键点及所述人体的各部分对应的点云,计算所述人体的主要尺寸,其中,所述人体的主要尺寸包括围度和曲线长,所述围度包括:颈围、左上臂围、右上臂围、左夹围、右夹围、和躯干围,所述曲线长包括:会阴上部前后长、左背长、右背长。

    一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述任一所述的方法。

    本发明与现有技术对比的有益效果包括:本发明将人体分为六部分,简化了关键点的提取及主要尺寸的计算,各个部位的尺寸提取互不干扰,提高整体算法的效率;通过对人体关键部位的点云形态进行分析,结合普通人体关键点位置与身高的关系,联合确定人体关键点三维坐标,简化了关键点检测复杂度,提高了鲁棒性;利用基于三维曲线拟合的人体主要尺寸计算方法,降低了噪声干扰的影响,提高了尺寸提取的稳定性。总体来说,本发明运算简单,效率高,每次测量的耗时约40ms,实时性强,提升了用户体验,测量精度良好,能够符合很多需要人体尺寸数据的领域,如体态健康管理、服装设计与制作、虚拟试衣等领域,具有一定的经济效益,市场前景广阔。

    附图说明

    图1是本发明具体实施方式中的基于点云的实时三维人体测量方法的流程图。

    图2是本发明优选实施方式中的人体坐标示意图;

    图3是本发明优选实施方式中确定左侧颈点和右侧颈点的示意图;

    图4是本发明优选实施方式中得到的头部、躯干、左臂、右臂、左腿和右腿六部分对应的点云示意图;

    图5是本发明优选实施方式中得到的15个关键点的示意图;

    图6是本发明优选实施方式中人体的主要尺寸全部计算完成后的示意图。

    图7是本发明具体实施方式中的一种三维人体尺寸测量系统的示意图。

    具体实施方式

    下面对照附图并结合优选的实施方式对本发明作进一步说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

    本发明利用人体的点云进行实时三维人体测量,包括:人体第一关键点提取、人体点云分割、人体第二关键点提取、人体主要尺寸计算。其中:人体点云分割中可以将人体分为头部、躯干、左臂、右臂、左腿和右腿六部分,大大简化了关键点的提取及主要尺寸的计算,特别是各个部位的尺寸提取互不干扰,提高整体算法的效率;基于点云的人体关键点提取中,通过对人体关键部位的点云形态进行分析,结合普通人体关键点位置与身高的关系,联合确定人体关键点三维坐标,简化了关键点检测复杂度,提高了鲁棒性;人体主要尺寸计算包括通过关键点所在位置的几何特征,提取相关点云,并对点云进行处理、拟合和计算,现有的基于smpl的三维人体测量方法中人体模型的参数拟合常常出现由于如噪声干扰导致人体建模精度不佳,或者所提供的骨骼点位置不准确等原因导致的异常情况,导致得到的人体参数化模型与原始模型差异太大,直接导致人体主要尺寸的计算误差过大,本发明通过人体关键点为辅助,直接提取身体截面外圈点云,并提取轮廓,进行b样条拟合后计算尺寸,可在一定程度上消除点云噪声的影响,提高尺寸提取的稳定性。

    具体来说,在具体实施方式中,如图1所示,基于点云的实时三维人体测量方法,包括如下步骤:

    s1:从人体的点云中确定第一关键点,其中,第一关键点包括:左侧颈点、右侧颈点、左腋下点、右腋下点、会阴点;

    s2:根据确定的第一关键点分割出人体的各部分对应的点云,其中,人体的各部分包括头部、躯干、左臂、右臂、左腿和右腿六部分,头部对应的点云根据左侧颈点和右侧颈点进行分割,左臂和右臂对应的点云根据左腋下点和右腋下点进行分割,左腿、右腿对应的点云根据会阴点进行分割,躯干对应的点云为分割完头部、左臂、右臂、左腿和右腿后剩下的点云;

    s3:从人体的点云中确定第二关键点,其中,第二关键点包括:前颈点、后颈点、左胸点、右胸点、左膝点、右膝点;

    s3:根据第一关键点、第二关键点及人体的各部分对应的点云,计算人体的主要尺寸,其中,人体的主要尺寸包括围度和曲线长,围度包括:颈围、左上臂围、右上臂围、左夹围、右夹围、和躯干围,曲线长包括:会阴上部前后长、左背长、右背长。

    在一些实施方式中,还包括对人体的点云进行坐标转化,其中对人体的点云进行坐标转化包括:将坐标系置于人体的脚底部,摆正人体坐标及点云,设人体的点云的宽度方向为x轴,身高方向为y轴,厚度方向为z轴,按照y值从小到大排列所有点云,记最大y值为ymax,最小y值为ymin,人体身高记为h,h=ymax-ymin,点云单位为mm。

    在一些实施方式中,第二关键点还包括左肩点、右肩点、左腰点和右腰点。

    在一些实施方式中,围度还包括:胸围、腰围、臀围、左大腿根围、右大腿根围、左膝围、右膝围、左腿肚围和右腿肚围。

    在一些实施方式中,曲线长还包括:肩宽、背宽、背腰长、左腰至臀长、右腰至臀长、左腿外侧长和右腿外侧长。

    在一些实施方式中,人体的主要尺寸还包括直线长,进一步地,直线长包括:乳间宽、躯干长、会阴高、臀围高、身高。

    在一个优选实施方式中,具体包括如下:

    获取人体的点云,并对人体的点云进行坐标转化:采集具有预定姿势的人体的深度图像,将深度图像融合为规则点云采集的方法和图像融合的方法不限制;利用主成分分析计算三个坐标轴,根据头部和脚部对三个坐标轴方向进行校正,将坐标系置于人体的脚底部,摆正人体坐标及点云,如图2所示。设人体的点云的宽度方向为x轴,身高方向为y轴,厚度方向为z轴,按照y值从小到大排列所有点云,记最大y值为ymax,最小y值为ymin,人体身高记为h,h=ymax-ymin,点云单位为mm。

    其中,预定姿势是指:人体的双腿分开,距离为20~30cm;双臂张开,各距离身体10~40cm。

    1.人体第一关键点提取及点云分割

    (1.1)确定左右侧颈点并分割头部:

    首先确定左右侧颈点,然后根据两个侧颈点的位置,将头部分割出来。

    (1)确定左右侧颈点。

    按照正常人体比例,侧颈点高度应大于0.8h。取y值大于0.8h的点云,以6mm为步长,从下至上或从上至下以平行于xoz平面的截面切割该部分点云,在每层找到左右极值对应的点,作为xoy平面上的轮廓点。找到y值最大的轮廓点p1,与p1的x值符号相反且y值最大的轮廓点p2,x值最小的轮廓点p3,x值最大的轮廓点p4,如图3所示。将x<0的轮廓点作为左半部分,x>0的轮廓点作为右半部分,计算左半部分轮廓点到直线p1p3的距离,距离最大的轮廓点即为左侧颈点;计算右半部分轮廓点到直线p2p4的距离,距离最大的轮廓点即为右侧颈点。

    (2)分割头部

    (2.1)记左右侧颈点的平均z值为zmean,平均y值为ymean,在y值大于ymean的点云中,确定z值最大对应的点zmax与z值最小对应的点zmin。

    (2.2)按照下面公式计算脖颈的高度区间:

    upline=0.36×(zmean-zmin) ymean

    downline=ymean-0.36×(zmax-zmean)

    其中,upline为脖颈高度的上限值,downline为脖颈高度的下限值。y值大于upline的点云即为第一头部点云。

    (2.3)分割位于upline与downline之间的点云。

    如果位于upline与downline之间的点云的z值大于zmean,说明该点云位于正面,若其y值大于等于ymean,则其属于第二头部点云;若其y值小于ymean,且满足则其属于第三头部点云。

    如果点云的z值小于等于zmean,说明该点云位于背面,若其y值大于ymean,且满足则其属于第四头部点云。

    第一头部点云、第二头部点云、第三头部点云和第四头部点云的合集即为头部对应的点云,也即,头部对应的点云由以下四部分组成:

    ①y值大于upline的点云;

    ②在upline与downline之间,z值大于zmean,且y值大于等于ymean的点云;

    ③在upline与downline之间,z值大于zmean,且y值小于ymean,并满足的点云;

    ④在upline与downline之间,z值小于等于zmean,且y值大于ymean,并满足的点云。

    除头部对应的点云后剩下的点云为身体对应的点云。

    (1.2)确定左右腋下点并分割双臂

    首先确定初始腋下点,然后根据初始腋下点确定腋下搜索范围,确定真实的左右腋下点,之后找到手部最外侧点,与左右腋下点结合分割出左右臂点云。

    (1)在除头部对应的点云之外的其他点云(即身体对应的点云)中,取y值大于等于0.6h的点云,以5mm为步长,从下至上以平行于xoz平面的截面切割该部分点云。第i层(i=0,1,2,3…,y值为0.6h的点云i=0,y值为0.6h 5mm的点云i=1,y值为0.6h 5x2mm的点云i=2,依此类推,直到切割高度超过身体点云高度为止)中x小于0的点分割为左臂数据,x大于0的点分割为右臂数据。分别对左臂数据和右臂数据按照x由小到大的顺序排序。如果连续两点之间的x差值小于0.02h,则认为找到左右初始腋下点,左右初始腋下点坐标为:

    x=0.5×(xi xi-1)

    y=(0.6 i×0.005)×h

    z=0.5×(zi zi-1)

    否则继续往上切割,直到左右两个初始腋下点均被找到为止。

    (2)分别取左右初始腋下点x值左右各5mm范围内的点云,以1mm为步长,从左至右或从右至左以平行于yoz平面的截面切割该部分点云。记录每层点云中y值最小的点,其y值记为ymin,找到所有层中ymin的最大值对应的点,即为左右腋下点。

    (3)分割左右臂

    (3.1)找到左手最外侧点(身体对应的点云中,x值最小的点,即为左手最外侧点),以该点的y值为高度,以平行于xoz平面的截面切割点云,记相邻两点的x差值最大的两个点的中间位置点为pl,位于左腋下点与pl这两点确定的直线左侧的点云即为左臂对应的点云。

    (3.2)找到右手最外侧点(身体点云中,x值最大的点,即为右手最外侧点),以该点的y值为高度,以平行于xoz平面的截面切割点云,记相邻两点的x差值最大的两个点的中间位置点为pr,位于右腋下点与pr这两点确定的直线右侧的点云即为右臂对应的点云。

    (1.3)确定会阴点并分割双腿

    首先提取会阴点pg,根据会阴点分割左右腿。

    (1)取y值位于0.35h与0.55h之间的点云,以6mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中z值最大与z值最小的点云。找到所有层中z值最小的点,认为是臀点。以臀点y值以下50~60cm的高度为起始位置,平行于xoz平面的截面切割点云,对第i层(i=0,1,2,3…起始为第0层)的点云按照x由小到大的顺序排序。如果连续两点之间的x差值小于0.02h,则认为找到初始会阴点,坐标值为该两点的平均值。

    (2)取初始会阴点x左右10mm,y值大于初始会阴点y值、小于臀点y值的点云。以1mm为步长,从左至右或从右至左以平行于yoz平面的截面切割该部分点云。记录每层点云中y值最大的点与y值最小的点,并求两者在y方向的差值。该差值最小的一层中y值最小的点即为真实的会阴点pg。

    (3)分割左右腿:x值小于0且y值小于会阴点y值的点云即为左腿对应的点云,x值大于0且y值小于会阴点y值的点云即为右腿对应的点云。

    至此,分割完头部、左臂、右臂、左腿和右腿后剩下的点云即为躯干对应的点云。分割结束后,得到头部1、躯干2、左臂3、右臂4、左腿5和右腿6共六部分对应的点云,如图4所示。接下来进行第2步。

    2.人体第二关键点提取

    在第1步中,已提取了左右侧颈点、左右腋下点和会阴点,并进一步分割出了头部、左臂、右臂、左腿、右腿和躯干六部分对应的点云,在本步骤中接着提取前后颈点、左右肩点、左右胸点、左右腰点与左右膝点,第1和第2共计提取了15个人体关键点。

    (2.1)提取前后颈点

    计算左右侧颈点x,y,z方向的平均值xmean,ymean,zmean,ymin=ymean-100,ymax=ymean 10。提取x值满足xmean-5≤x≤xmean 5,且y值满足ymin≤y≤ymax的点云。以ymin为起始高度,ymax为终止高度,5mm为步长,从下至上以平行于xoz平面的截面切割点云,取每层点云数据中z值最大与z值最小的点云。在z值小于zmean的点云中,y值最大的点即为后颈点;在z值大于zmean的点云中,z值最小的点即为前颈点。

    (2.2)提取左右肩点

    取y值位于0.78h与0.85h之间的点云,以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中x值最大与x值最小的点云。在x值小于0的点云中,相邻两点的x差值最大的点即为左肩点;在x值大于0的点云中,相邻两点的x差值最大的点即为右肩点。

    (2.3)提取左右胸点

    (1)计算左右腋下点y的平均值ymean,取y值在[ymean-300,ymean 300]范围内的点云。以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中z值最大与z值最小的点云。计算得到的点云z值的平均值zmean,取z值大于zmean的点云,认为是前胸部分。

    (2)找到前胸部分z值最大的点。以该点的y值为高度,平行于xoz平面的截面切割点云,保存该层点云数据。

    (3)将该层点云中x<0的部分记为左半部分点云,x≥0的部分记为右半部分点云。遍历左半部分点云,找到z值最大的点云即为左胸点;遍历右半部分点云,找到z值最大的点云即为右胸点。

    (2.4)提取左右腰点

    在躯干对应的点云上取y值位于会阴点与左右胸点y的平均值所在点之间的点云,以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中x值最大与x值最小的点云。将会阴点的z值赋值给该部分点云的z。在x值小于会阴点x的点云中,取x最大的点即为左腰点;在x值大于会阴点x的点云中,取x最小的点即为右腰点。

    (2.5)提取左右膝点

    根据第1步的分割结果,计算左腿对应的点云中最大y值与最小y值的差值hleg_l为左腿长度。计算右腿对应的点云中最大y值与最小y值的差值hleg_r为右腿长度。

    (1)提取左膝点。

    (1.1)在左腿对应的点云中取y值位于0.4hleg_l与0.6hleg_l之间的点云,以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中z值最大与z值最小的点云。计算得到的点云z值的平均值zmean,取z值大于zmean的点云。

    (1.2)遍历得到的点云。每个点前面取3个点,后面取3个点,共7个点使用最小二乘法进行线性拟合,计算该点对应的直线斜率。取斜率最大的直线对应的点云ps,其y值记为取y值小于的点云,其中z值最大的点为初始左膝点。

    (1.3)以初始左膝点的y值为高度,平行于xoz平面的截面切割左腿对应的点云。取该层点云数据x的平均值xmean。在xmean的左右8-12mm(本例中为10mm)范围内,找到z值最大的点,即为左膝点。

    (2)提取右膝点。

    (2.1)在右腿对应的点云中取y值位于0.4hleg_r与0.6hleg_r之间的点云,以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中z值最大与z值最小的点云。计算得到的点云z值的平均值zmean,取z值大于zmean的点云。

    (2.2)遍历得到的点云。每个点前面取3个点,后面取3个点,共7个点使用最小二乘法进行线性拟合,计算该点对应的直线斜率。取斜率最大的直线对应的点云ps,其y值记为取y值小于的点云,其中z值最大的点为初始右膝点。

    (2.3)以初始右膝点的y值为高度,平行于xoz平面的截面切割右腿对应的点云。取该层点云数据x的平均值xmean。在xmean左右8-12mm(本例中为10mm)范围内,找到z值最大的点,即为右膝点。

    至此,人体关键点(包括左侧颈点7、右侧颈点8、左腋下点9、右腋下点10、会阴点11、前颈点12、后颈点13、左肩点14、右肩点15、左胸点16、右胸点17、左腰点18、右腰点19、左膝点20、右膝点21)已全部提取完成,如图5所示。

    3、人体的主要尺寸计算

    人体的主要尺寸包括围度、曲线长与直线长,下面进行详细介绍。

    (3.1)计算围度

    计算颈围、胸围、腰围、臀围、左上臂围、右上臂围、左夹围、右夹围、左大腿根围、右大腿根围、左膝围、右膝围、左腿肚围、右腿肚围、躯干围15个围度尺寸。

    (1)计算颈围

    根据后颈点取(x,y,z)满足下面条件的点云:

    将得到的点云沿x轴逆时针旋转π/18弧度,求旋转后的点云在xoz面上的凸包点。然后将所有凸包点的y均值ymean赋值给每个凸包点的y。将新凸包点沿x轴顺时针旋转π/18弧度,进行三次b样条曲线拟合。累加b样条曲线上每相邻两个点之间的距离,累加的公式如下(n表示b样条曲线上的所有点云的个数),得到的值即为颈围。

    (2)计算胸围

    计算左胸点与右胸点的平均y值为胸的高度hbust。以hbust为高度,平行于xoz平面的截面切割躯干点云。求该层点云数据的凸包点,进行三次b样条曲线拟合。累加b样条曲线上每相邻两个点之间的距离(公式同上计算颈围的公式),得到的值即为胸围。

    (3)计算腰围

    计算左腰点与右腰点的平均y值为腰的高度hwaist。以hwaist为高度,平行于xoz平面的截面切割躯干点云。求该层点云数据的凸包点,进行三次b样条曲线拟合。累加b样条曲线上每相邻两个点之间的距离(公式同上计算颈围的公式),得到的值即为腰围。

    (4)计算臀围

    以臀点y值为高度,平行于xoz平面的截面切割躯干点云。求该层点云数据的凸包点,进行三次b样条曲线拟合。累加b样条曲线上每相邻两个点之间的距离(公式同上计算颈围的公式),得到的值即为臀围。

    (5)计算左右上臂围

    (5.1)计算左上臂围。

    以5mm为步长,以左腋下点为起点,从上往下沿y轴在左臂对应的点云上截取10圈点云,由每圈点云的x、z均值和每一圈的高组成左上臂中轴线点云。根据左上臂中轴线点云拟合直线方程,得到左上臂斜率。根据左上臂斜率逆时针旋转左臂对应的点云,摆正左臂。以同样的角度旋转左腋下点,以旋转后的左腋下点为起点,5mm为步长,从上往下沿y轴在左臂对应的点云上截取20圈点云,计算每圈的围度。确定最大围对应的点云,求点云的凸包点,进行三次b样条曲线拟合。求b样条曲线所有点y的均值,将该均值赋给每个点的y。对新的b样条曲线点进行顺时针旋转反变换,累加变换后的b样条曲线上每相邻两个点之间的距离(公式同上计算颈围的公式),得到的值即为左上臂围。

    (5.2)计算右上臂围。

    以5mm为步长,以右腋下点为起点,从上往下沿y轴在右臂对应的点云上截取10圈点云,由每圈点云的x、z均值和每一圈的高组成右上臂中轴线点云。根据右上臂中轴线点云拟合直线方程,得到右上臂斜率。根据右上臂斜率顺时针旋转右臂点云,摆正右臂。以同样的角度旋转右腋下点,以旋转后的右腋下点为起点,5mm为步长,从上往下沿y轴在右臂对应的点云上截取20圈点云,计算每圈的围度。确定最大围对应的点云,求点云的凸包点,进行三次b样条曲线拟合。求b样条曲线所有点y的均值,将该均值赋给每个点的y。对新的b样条曲线点进行逆时针旋转反变换,累加变换后的b样条曲线上每相邻两个点之间的距离(公式同上计算颈围的公式),得到的值即为右上臂围。

    (6)计算左右夹围

    (6.1)计算左夹围。

    在左臂对应的点云上取x值大于左腋下点x-5mm范围内的点云。以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中z值最大与z值最小的点云。然后取y值满足下面公式的点云:

    y>hmax-0.53×lmean

    其中,hmax为目前夹围圈点云的最大y值,lmean为左右上臂围的均值。之后提取y值满足公式y>hmax-0.53×lmean的点云的凸包点,进行三次b样条曲线拟合。最后累加b样条曲线上每相邻两个点之间的距离(公式同上计算颈围的公式),得到的值即为左夹围。

    (6.2)计算右夹围。

    在右臂对应的点云上取x值小于右腋下点x 5mm范围内的点云。以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中z值最大与z值最小的点云。然后取y值满足下面公式的点云:

    y>hmax-0.53×lmean

    其中,hmax为目前夹围圈点云的最大y值,lmean为左右臂围的均值。之后提取凸包点,进行三次b样条曲线拟合。最后累加b样条曲线上每相邻两个点之间的距离(公式同上计算颈围的公式),得到的值即为右夹围。

    (7)计算左右大腿根围

    (7.1)计算左大腿根围。

    以会阴点y值为高度,平行于xoz平面的截面切割左腿对应的点云。求该层点云数据的凸包点,并将会阴点y值减去5mm,赋给每个凸包点y。然后对新凸包点进行三次b样条曲线拟合。累加b样条曲线上每相邻两个点之间的距离(公式同上计算颈围的公式),得到的值即为左大腿根围。

    (7.2)计算右大腿根围。

    以会阴点y值为高度,平行于xoz平面的截面切割右腿对应的点云。求该层点云数据的凸包点,并将会阴点y值减去5mm,赋给每个凸包点y。然后对新凸包点进行三次b样条曲线拟合。累加b样条曲线上每相邻两个点之间的距离(公式同上计算颈围的公式),得到的值即为右大腿根围。

    (8)计算左右膝围

    (8.1)计算左膝围。

    以左膝点y值为高度,平行于xoz平面的截面切割左腿对应的点云。求该层点云数据的凸包点,并将左膝点y值赋给每个凸包点y。然后对新凸包点进行三次b样条曲线拟合。累加b样条曲线上每相邻两个点之间的距离(公式同上计算颈围的公式),得到的值即为左膝围。

    (8.2)计算右膝围。

    以右膝点y值为高度,平行于xoz平面的截面切割右腿对应的点云。求该层点云数据的凸包点,并将右膝点y值赋给每个凸包点y。然后对新凸包点进行三次b样条曲线拟合。累加b样条曲线上每相邻两个点之间的距离(公式同上计算颈围的公式),得到的值即为右膝围。

    (9)计算左右腿肚围

    (9.1)计算左腿肚围。

    在左腿对应的点云中取y值大于左膝点y值-0.06h,且小于左膝点y值的点云。以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,求每层点云的凸包点。然后对凸包点进行三次b样条曲线拟合。累加b样条曲线上每相邻两个点之间的距离(公式同上计算颈围的公式),得到每一层的长度。最大长度值即为左腿肚围。

    (9.3)计算右腿肚围。

    在右腿对应的点云中取y值大于右膝点y值-0.06h,且小于右膝点y值的点云。以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,求每层点云的凸包点。然后对凸包点进行三次b样条曲线拟合。累加b样条曲线上每相邻两个点之间的距离(公式同上计算颈围的公式),得到每一层的长度。最大长度值即为右腿肚围。

    (10)计算躯干围

    根据右胸点、会阴点坐标,计算xoy平面上过此两点的直线斜率kr。

    其中,xbust_r为右胸点的x坐标,ybust_r为右胸点的y坐标,xcrotch为会阴点的x坐标,ycrotch为会阴点的y坐标。根据直线斜率kr得到该直线与y轴的夹角alphar。

    在躯干对应的点云上取在xoy平面上与上述直线距离小于5mm的点云。将得到的点云沿z轴逆时针旋转alphar,求旋转后的点云的凸包点。然后将所有凸包点的x均值xmean赋值给每个凸包点的x。将新凸包点沿z轴顺时针旋转alphar,进行三次b样条曲线拟合。累加b样条曲线上每相邻两个点之间的距离(公式同上计算颈围的公式),得到的值即为躯干围。

    (3.2)计算曲线长

    包括肩宽、背宽、背腰长、左腰至臀长、右腰至臀长、左腿外侧长、右腿外侧长、会阴上部前后长、左背长、右背长10个曲线长尺寸。

    (1)计算肩宽

    计算左右肩点y的平均值ymean。以ymean为高度,平行于xoz平面的截面切割躯干对应的点云。取该层点云数据中x值大于左肩点x 5mm,且小于右肩点x-5mm的点云。求得到的点云在xoz平面上的凸包点,取z值小于左肩点z且x值小于会阴点x,及z值小于右肩点z且x值大于会阴点x的凸包点,再将左右肩点加入该凸包点集。在xoy平面上计算两肩点的直线方程,将凸包点的x值代入直线方程得到新的y值赋值给对应的凸包点。最后累加凸包点相邻两点之间的距离,即得到肩宽。

    (2)计算背宽

    计算左右肩点、左右腋下点y值的平均值ymean。以ymean为高度,平行于xoz平面的截面切割躯干点云。根据会阴点的x值,将该层点云数据分为左右两部分。求左半部分的凸包点,保留z值小于左腋下点的凸包点;求右半部分的凸包点,保留z值小于右腋下点的凸包点。将两部分凸包点合并,并按照x从小到大排列,第一个值与最后一个值的x分别赋值为左腋下点和右腋下点的x值。最后累加相邻两点之间的距离,即得到背宽。

    (3)计算背腰长

    在躯干对应的点云上取y大于左右腰点平均y值、小于后颈点y值,且x在会阴点x左右10mm范围内的点云。以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中z值最小且小于0的点云。使用高斯滤波对所有z值进行平滑,将会阴点的x值赋值给每个点x。最后累加相邻两点之间的距离,即得到背腰长。

    (4)计算左右腰至臀长

    在躯干对应的点云上取y小于左右腰点平均y值、大于臀点y值的点云。以5mm为步长,从下至上以平行于xoz平面的截面切割点云,取每层点云数据中x值最大与x值最小的点云。将会阴点的z值赋值给该部分点云的z。

    (4.1)计算左腰至臀长。

    取x值小于会阴点x的点云。使用高斯滤波对x值进行平滑,累加相邻两点之间的距离,即得到左腰至臀长。

    (4.2)计算右腰至臀长。

    取x值大于会阴点x的点云。使用高斯滤波对x值进行平滑,累加相邻两点之间的距离,即得到右腰至臀长。

    (5)计算左右腿外侧长

    左腿外侧长=左腰至臀长 臀点y值-会阴高 会阴高/sin(左腿角度)

    右腿外侧长=右腰至臀长 臀点y值-会阴高 会阴高/sin(左腿角度)

    (4)计算会阴上部前后长

    在躯干点云上取y小于左右腰点平均y值,x值在会阴点x左右20mm范围内的点云。以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中z值最大与z值最小的点云。将会阴点的x值赋值给该部分点云的x,并根据会阴点的z值,将z值小于会阴点z值的点云分为后半部分点云,将z值大于会阴点z值的点云分为前半部分点云。对前半部分点云,使用高斯滤波对z值进行平滑,累加相邻两点之间的距离得到第一值;对后半部分点云,使用高斯滤波对z值进行平滑,累加相邻两点之间的距离得到第二值。最后将第一值和第二值相加,并加上会阴前后分别与会阴点相邻的两点之间的距离,即得到会阴上部前后长。

    (7)计算左右背长

    (7.1)计算左背长

    取x,y,z均在左侧颈点与左肩点之间的点云,计算左侧颈点与左肩点x的平均值xmean,取x最接近xmean的点作为左肩中点。在躯干对应的点云上取y大于等于臀点y值,x在左肩中点左右5mm范围内的点云。以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中z值最小且小于0的点云,并使用高斯滤波对z值进行平滑。按照y由小到大的顺序排序,第一个点即为臀围线上的点,记为phip_l。取y值大于左右腰点y的平均值的点云,按照z由小到大的顺序排序,第一个点云即为背部最突出的点,记为pshoulder_l。取y值大于等于pshoulder_l的y值的点云,按照z由小到大的顺序排序,并将臀围线上的点phip_l插入为第一点。累加得到的点云相邻两点之间的距离,即得到左背长。

    (7.2)计算右背长

    取x,y,z均在右侧颈点与右肩点之间的点云,计算右侧颈点与右肩点x的平均值xmean,取x最接近xmean的点作为右肩中点。在躯干对应的点云上取y大于等于臀点y值,x在右肩中点左右5mm范围内的点云。以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中z值最小且小于0的点云,并使用高斯滤波对z值进行平滑。按照y由小到大的顺序排序,第一个点即为臀围线上的点,记为phip_r。取y值大于左右腰点y的平均值的点云,按照z由小到大的顺序排序,第一个点云即为背部最突出的点,记为pshoulder_r。取y值大于等于pshoulder_r的y值的点云,按照z由小到大的顺序排序,并将臀围线上的点phip_r插入为第一点。累加得到的点云相邻两点之间的距离,即得到右背长。

    (3.3)计算直线长

    包括乳间宽、躯干长、会阴高、臀围高、身高5个直线长尺寸。记会阴点y值为hcrotch,臀点y值为hhip,左腿角度为legangl,右腿角度为legangr。

    (1)乳间宽:左胸点与右胸点在xoz平面上的距离。

    (2)躯干长:后颈点y值与hcrotch的差值。

    (3)会阴高h′crotch:

    (4)臀围高h′hip:h′hip=hhip-hcrotch h′crotch

    (5)身高:h′=h-hcrotch h′crotch

    至此,人体关键尺寸已全部提取完成,如图6所示。

    算法性能测试

    分别对10组男模特、10组女模特的点云按上述方法进行尺寸提取,单位:cm,并计算标准差,结果如下表1和表2所示。

    表1:男模特数据

    表2:女模特数据

    由上述表1和2中可知,男女模特的点云数据测量结果的标准差都在2cm以内,精度良好,且所用方法运算简单,效率高,每次测量的耗时约40ms,实时性强。

    如图7所示,本发明具体实施方式还提供一种基于点云的实时三维人体测量系统,包括:人体第一关键点提取单元,用于从人体的点云中确定第一关键点,其中,所述第一关键点包括:左侧颈点、右侧颈点、左腋下点、右腋下点、会阴点;人体点云分割单元,用于根据确定的所述第一关键点分割出所述人体的各部分对应的点云,其中,所述人体的各部分包括头部、躯干、左臂、右臂、左腿和右腿六部分,所述头部对应的点云根据所述左侧颈点和所述右侧颈点进行分割,所述左臂和所述右臂对应的点云根据所述左腋下点和所述右腋下点进行分割,所述左腿、右腿对应的点云根据所述会阴点进行分割,所述躯干对应的点云为分割完所述头部、所述左臂、所述右臂、所述左腿和所述右腿后剩下的点云;人体第二关键点提取单元,用于从所述人体的点云中确定第二关键点,其中,所述第二关键点包括:前颈点、后颈点、左胸点、右胸点、左膝点、右膝点;以及人体主要尺寸计算单元,用于根据所述第一关键点、所述第二关键点及所述人体的各部分对应的点云,计算所述人体的主要尺寸,其中,所述人体的主要尺寸包括围度和曲线长,所述围度包括:颈围、左上臂围、右上臂围、左夹围、右夹围、和躯干围,所述曲线长包括:会阴上部前后长、左背长、右背长。

    本发明具体实施方式再提供一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时实现上述任一实施方式所述的方法。

    存储介质可以由任何类型的易失性或非易失性存储设备、或者它们的组合来实现。其中,非易失性存储器可以是只读存储器(rom,readonlymemory)、可编程只读存储器(prom,programmableread-onlymemory)、可擦除可编程只读存储器(eprom,erasableprogrammableread-onlymemory)、电可擦除可编程只读存储器(eeprom,electricallyerasableprogrammableread-onlymemory)、磁性随机存取存储器(fram,ferromagneticrandomaccessmemory)、快闪存储器(flashmemory)、磁表面存储器、光盘、或只读光盘(cd-rom,compactdiscread-onlymemory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(ram,randomaccessmemory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(sram,staticrandomaccessmemory)、同步静态随机存取存储器(ssram,synchronousstaticrandomaccessmemory)、动态随机存取存储器(dram,dynamicrandomaccessmemory)、同步动态随机存取存储器(sdram,synchronousdynamicrandomaccessmemory)、双倍数据速率同步动态随机存取存储器(ddrsdram,doubledataratesynchronousdynamicrandomaccessmemory)、增强型同步动态随机存取存储器(esdram,enhancedsynchronousdynamicrandomaccessmemory)、同步连接动态随机存取存储器(sldram,synclinkdynamicrandomaccessmemory)、直接内存总线随机存取存储器(drram,directrambusrandomaccessmemory)。本发明实施例描述的存储介质旨在包括但不限于这些和任意其它适合类型的存储器。

    以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的技术人员来说,在不脱离本发明构思的前提下,还可以做出若干等同替代或明显变型,而且性能或用途相同,都应当视为属于本发明的保护范围。


    技术特征:

    1.一种基于点云的实时三维人体测量方法,其特征在于,包括如下步骤:

    s1:从人体的点云中确定第一关键点,其中,所述第一关键点包括:左侧颈点、右侧颈点、左腋下点、右腋下点、会阴点;

    s2:根据确定的所述第一关键点分割出所述人体的各部分对应的点云,其中,所述人体的各部分包括头部、躯干、左臂、右臂、左腿和右腿六部分,所述头部对应的点云根据所述左侧颈点和所述右侧颈点进行分割,所述左臂和所述右臂对应的点云根据所述左腋下点和所述右腋下点进行分割,所述左腿、右腿对应的点云根据所述会阴点进行分割,所述躯干对应的点云为分割完所述头部、所述左臂、所述右臂、所述左腿和所述右腿后剩下的点云;

    s3:从所述人体的点云中确定第二关键点,其中,所述第二关键点包括:前颈点、后颈点、左胸点、右胸点、左膝点、右膝点;

    s3:根据所述第一关键点、所述第二关键点及所述人体的各部分对应的点云,计算所述人体的主要尺寸,其中,所述人体的主要尺寸包括围度和曲线长,所述围度包括:颈围、左上臂围、右上臂围、左夹围、右夹围、和躯干围,所述曲线长包括:会阴上部前后长、左背长、右背长。

    2.如权利要求1所述的基于点云的实时三维人体测量方法,其特征在于,还包括对所述人体的点云进行坐标转化,其中所述对所述人体的点云进行坐标转化包括:将坐标系置于所述人体的脚底部,摆正人体坐标及点云,设所述人体的点云的宽度方向为x轴,身高方向为y轴,厚度方向为z轴,按照y值从小到大排列所有点云,记最大y值为ymax,最小y值为ymin,人体身高记为h,h=ymax-ymin,点云单位为mm。

    3.如权利要求2所述的基于点云的实时三维人体测量方法,其特征在于,

    确定所述左侧颈点和所述右侧颈点包括:取y值大于0.8h的点云,以6mm为步长,从下至上或从上至下以平行于xoz平面的截面切割该部分点云,在每层找到左极值和右极值对应的点,作为xoy平面上的轮廓点;找到y值最大的轮廓点p1,与p1的x值符号相反且y值最大的轮廓点p2,x值最小的轮廓点p3,x值最大的轮廓点p4,将x<0的轮廓点作为左半部分,x>0的轮廓点作为右半部分,计算左半部分轮廓点到直线p1p3的距离,距离最大的轮廓点为所述左侧颈点;计算右半部分轮廓点到直线p2p4的距离,距离最大的轮廓点为所述右侧颈点;

    优选地,所述头部对应的点云通过以下方式进行分割:

    记所述左侧颈点和所述右侧颈点的平均z值为zmean,平均y值为ymean,在y值大于ymean的点云中,确定z值最大对应的点zmax与z值最小对应的点zmin;

    按照下面公式计算脖颈的高度区间:

    upline=0.36×(zmean-zmin) ymean

    downline=ymean-0.36×(zmax-zmean)

    其中,upline为脖颈高度的上限值,downline为脖颈高度的下限值;y值大于upline的点云为第一头部点云;

    分割位于upline与downline之间的点云:z值大于zmean且y值大于等于ymean的点云为第二头部点云;z值大于zmean且y值小于ymean,并满足的点云为第三头部点云;z值小于等于zmean且其y值大于ymean,并满足的点云为第四头部点云;

    所述第一头部点云、第二头部点云、第三头部点云和第四头部点云的合集为所述头部对应的点云。

    4.如权利要求2或3所述的基于点云的实时三维人体测量方法,其特征在于,确定所述左腋下点和所述右腋下点包括:

    在除了所述头部对应的点云外的其他点云中,取y值大于等于0.6h的点云,以5mm为步长,从下至上以平行于xoz平面的截面切割该部分点云,取第i层中x小于0的点分割为左臂数据,x大于0的点分割为右臂数据;分别对所述左臂数据和所述右臂数据按照x由小到大的顺序排序,如果连续两点之间的x差值小于0.02h,则认为找到左初始腋下点和右初始腋下点,所述左初始腋下点和所述右初始腋下点的坐标为:

    x=0.5×(xi xi-1)

    y=(0.6 i×0.005)×h

    z=0.5×(zi zi-1)

    否则继续往上切割,直到所述左初始腋下点和所述右初始腋下点均被找到为止;

    分别取所述左初始腋下点和所述右初始腋下点x值左右各5mm范围内的点云,以1mm为步长,从左至右或从右至左以平行于yoz平面的截面切割该部分点云,记录每层点云中y值最小的点,其y值记为ymin,找到所有层中ymin的最大值对应的点,即为所述左腋下点和所述右腋下点;

    优选地,所述左臂和所述右臂对应的点云通过以下方式进行分割:

    找到左手最外侧点,以该点的y值为高度,以平行于xoz平面的截面切割点云,记相邻两点的x差值最大的两个点的中间位置点为pl,位于所述左腋下点与所述pl这两点确定的直线左侧的点云为所述左臂对应的点云;

    找到右手最外侧点,以该点的y值为高度,以平行于xoz平面的截面切割点云,记相邻两点的x差值最大的两个点的中间位置点为pr,位于所述右腋下点与所述pr这两点确定的直线右侧的点云为所述右臂对应的点云。

    5.如权利要求2所述的基于点云的实时三维人体测量方法,其特征在于,确定所述会阴点包括:

    取y值位于0.35h与0.55h之间的点云,以6mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中z值最大与z值最小的点云;找到所有层中z值最小的点,认为是臀点;以所述臀点的y值以下50~60cm的高度为起始位置,平行于xoz平面的截面切割点云,对第i层的点云按照x由小到大的顺序排序,如果连续两点之间的x差值小于0.02h,则认为找到初始会阴点,所述初始会阴点的坐标值为该两点的平均值;

    取所述初始会阴点的x左右10mm,y值大于所述初始会阴点的y值、小于所述臀点的y值的点云;以1mm为步长,从左至右或从右至左以平行于yoz平面的截面切割该部分点云,记录每层点云中y值最大的点与y值最小的点,并求两者在y方向的差值,该差值最小的一层中y值最小的点为所述会阴点pg;

    优选地,所述左腿、右腿对应的点云根据以下方式进行分割:x值小于0且y值小于所述会阴点的y值的点云为左腿点云,x值大于0且y值小于所述会阴点的y值的点云为右腿点云。

    6.如权利要求2或3所述的基于点云的实时三维人体测量方法,其特征在于,根据已确定的所述左侧颈点和所述右侧颈点来确定所述前颈点和所述后颈点包括:

    计算所述左侧颈点和所述右侧颈点x,y,z方向的平均值xmean、ymean和zmean,记ymin=ymean-100,ymax=ymean 10;提取x值满足xmean-5≤x≤xmean 5,且y值满足ymin≤y≤ymax的点云;以ymin为起始高度,ymax为终止高度,5mm为步长,从下至上以平行于xoz平面的截面切割点云,取每层点云数据中z值最大与z值最小的点云,在z值小于zmean的点云中,y值最大的点为所述后颈点,在z值大于zmean的点云中,z值最小的点为所述前颈点。

    7.如权利要求2或4所述的基于点云的实时三维人体测量方法,其特征在于,根据已确定的所述左腋下点和所述右腋下点来确定所述左胸点和所述右胸点包括:

    计算所述左腋下点和所述右腋下点的y值的平均值ymean,取y值在[ymean-300,ymean 300]范围内的点云,以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中z值最大与z值最小的点云,计算得到的点云z值的平均值zmean,取z值大于zmean的点云作为前胸部分;

    找到所述前胸部分的z值最大的点,以该点的y值为高度,平行于xoz平面的截面切割点云,保存该层点云数据;

    将该层点云数据中x<0的部分记为左半部分点云,x≥0的部分记为右半部分点云,遍历所述左半部分点云,找到z值最大的点云即为左胸点,遍历所述右半部分点云,找到z值最大的点云即为右胸点。

    8.如权利要求2或5所述的基于点云的实时三维人体测量方法,其特征在于,根据所述左腿、所述右腿对应的点云来确定所述左膝点和所述右膝点包括:

    计算所述左腿对应的点云中最大y值与最小y值的差值hleg_l为左腿长度,计算所述右腿对应的点云中最大y值与最小y值的差值hleg_r为右腿长度;

    提取所述左膝点和所述右膝点:

    分别在所述左腿对应的点云和所述右腿对应的点云中取y值位于0.4hleg_l与0.6hleg_l之间的点云以及y值位于0.4hleg_r与0.6hleg_r之间的点云,以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中z值最大与z值最小的点云,计算得到的点云z值的平均值zmean,取z值大于zmean的点云;

    遍历得到的点云,每个点前面取3个点,后面取3个点,共7个点使用最小二乘法进行线性拟合,计算该点对应的直线斜率,取斜率最大的直线对应的点云ps,其y值记为取y值小于的点云,其中z值最大的点为初始左膝点和初始右膝点;

    分别以所述初始左膝点和所述右腋下点的y值为高度,平行于xoz平面的截面切割所述左腿对应的点云和所述右腿对应的点云,取该层点云数据x的平均值xmean,在xmean的左右8-12mm范围内,找到z值最大的点,即为所述左膝点和所述右膝点。

    9.如权利要求2所述的基于点云的实时三维人体测量方法,其特征在于,计算所述围度包括计算所述颈围、计算所述左上臂围、计算所述右上臂围、计算所述左夹围、计算所述右夹围、计算所述躯干围:

    其中,计算所述颈围包括:

    根据所述后颈点取(x,y,z)满足下面条件的点云:

    将得到的点云沿x轴逆时针旋转π/18弧度,求旋转后的点云在xoz面上的凸包点;将所有凸包点的y均值ymean赋值给每个凸包点的y,将新凸包点沿x轴顺时针旋转π/18弧度,进行三次b样条曲线拟合,根据下述公式累加b样条曲线上每相邻两个点之间的距离,得到的值即为颈围;

    计算所述左上臂围和所述右上臂围包括:

    以5mm为步长,分别以所述左腋下点和所述右腋下点为起点,从上往下沿y轴在所述左臂对应的点云和所述右臂对应的点云中截取10圈点云,由每圈点云的x、z均值和每一圈的高组成左上臂中轴线点云和右上臂中轴线点云,分别根据所述左上臂中轴线点云和所述右上臂中轴线点云拟合直线方程,得到左上臂斜率和右上臂斜率,分别根据所述左上臂斜率逆时针旋转所述左臂对应的点云以及根据所述右上臂斜率顺时针旋转所述右臂对应的点云,摆正左臂和右臂,分别以同样的角度旋转所述左腋下点和所述右腋下点,以旋转后的所述左腋下点和所述右腋下点为起点,5mm为步长,从上往下沿y轴在所述左臂对应的点云和所述右臂对应的点云上截取20圈点云,计算每圈的围度,确定最大围对应的点云,求所述最大围对应的点云的凸包点,进行三次b样条曲线拟合,求b样条曲线所有点y的均值,将该均值赋给每个点的y;分别对新的b样条曲线点进行顺时针旋转反变换和逆时针旋转反变换,累加变换后的b样条曲线上每相邻两个点之间的距离,得到的值即为所述左上臂围和所述右上臂围;

    计算所述左夹围和所述右夹围包括:

    分别在所述左臂对应的点云和所述右臂对应的点云中取“x值大于所述左腋下点x-5mm范围内的点云”以及“x值小于所述右腋下点x 5mm范围内的点云”,以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中z值最大与z值最小的点云,然后取y值满足下面公式的点云:

    y>hmax-0.53×lmean

    其中,hmax为目前夹围圈点云的最大y值,lmean为所述左上臂围和所述右上臂围的均值,之后提取所述y值满足公式y>hmax-0.53×lmean的点云的凸包点,进行三次b样条曲线拟合,最后累加b样条曲线上每相邻两个点之间的距离,得到的值即为所述左夹围和所述右夹围;

    计算所述躯干围包括:

    根据所述右胸点、所述会阴点的坐标,计算xoy平面上过此两点的直线斜率kr;

    其中,xbust_r为所述右胸点的x坐标,ybust_r为所述右胸点的y坐标,xcrotch为所述会阴点的x坐标,ycrotch为所述会阴点的y坐标,根据所述直线斜率kr得到该直线与y轴的夹角alphar,

    在所述躯干对应的点云上取在xoy平面上与上述直线距离小于5mm的点云,将得到的点云沿z轴逆时针旋转alphar,求旋转后的点云的凸包点,然后将所有凸包点的x均值xmean赋值给每个凸包点的x,将新凸包点沿z轴顺时针旋转alphar,进行三次b样条曲线拟合,累加b样条曲线上每相邻两个点之间的距离,得到的值即为所述躯干围。

    10.如权利要求2所述的基于点云的实时三维人体测量方法,其特征在于,计算所述曲线长包括计算会阴上部前后长、计算左背长和计算所述右背长;

    其中,计算所述会阴上部前后长包括:

    在所述躯干对应的点云上取y小于所述左腰点和所述右腰点平均y值且y值大于所述会阴点y值,x值在所述会阴点x左右20mm范围内的点云,以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中z值最大与z值最小的点云,将所述会阴点的x值赋值给该部分点云的x,并根据所述会阴点的z值,将z值小于所述会阴点z值的点云分为后半部分点云,将z值大于所述会阴点z值的点云分为前半部分点云,对所述前半部分点云,使用高斯滤波对z值进行平滑,累加相邻两点之间的距离得到第一值;对所述后半部分点云,使用高斯滤波对z值进行平滑,累加相邻两点之间的距离得到第二值,将所述第一值和所述第二值相加,并加上在所述会阴点前与所述会阴点相邻的点和在所述会阴点后与所述会阴点相邻的点之间的距离,即得到所述会阴上部前后长;

    计算所述左背长包括:

    取x,y,z均在所述左侧颈点与所述左肩点之间的点云,计算所述左侧颈点与所述左肩点x的平均值xmean,取x最接近xmean的点作为左肩中点,在所述躯干对应的点云上取y大于等于臀点y值,x在所述左肩中点左右5mm范围内的点云,以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中z值最小且小于0的点云,并使用高斯滤波对z值进行平滑,按照y由小到大的顺序排序,第一个点即为臀围线上的点,记为phip_l,取y值大于所述左腰点和所述右腰点y的平均值的点云,按照z由小到大的顺序排序,第一个点云即为背部最突出的点,记为pshoulder_l,取y值大于等于pshoulder_l的y值的点云,按照z由小到大的顺序排序,并将所述臀围线上的点phip_l插入为第一点,累加得到的点云相邻两点之间的距离,即得到所述左背长;

    计算右背长包括:

    取x,y,z均在所述右侧颈点与所述右肩点之间的点云,计算所述右侧颈点与所述右肩点x的平均值xmean,取x最接近xmean的点作为右肩中点,在所述躯干对应的点云上取y大于等于臀点y值,x在所述右肩中点左右5mm范围内的点云,以5mm为步长,从下至上或从上至下以平行于xoz平面的截面切割点云,取每层点云数据中z值最小且小于0的点云,并使用高斯滤波对z值进行平滑,按照y由小到大的顺序排序,第一个点即为臀围线上的点,记为phip_r,取y值大于所述左腰点和所述右腰点y的平均值的点云,按照z由小到大的顺序排序,第一个点云即为背部最突出的点,记为pshoulder_r,取y值大于等于pshoulder_r的y值的点云,按照z由小到大的顺序排序,并将所述臀围线上的点phip_r插入为第一点,累加得到的点云相邻两点之间的距离,即得到所述右背长。

    11.一种基于点云的实时三维人体测量系统,其特征在于,包括:

    人体第一关键点提取单元,用于从人体的点云中确定第一关键点,其中,所述第一关键点包括:左侧颈点、右侧颈点、左腋下点、右腋下点、会阴点;

    人体点云分割单元,用于根据确定的所述第一关键点分割出所述人体的各部分对应的点云,其中,所述人体的各部分包括头部、躯干、左臂、右臂、左腿和右腿六部分,所述头部对应的点云根据所述左侧颈点和所述右侧颈点进行分割,所述左臂和所述右臂对应的点云根据所述左腋下点和所述右腋下点进行分割,所述左腿、右腿对应的点云根据所述会阴点进行分割,所述躯干对应的点云为分割完所述头部、所述左臂、所述右臂、所述左腿和所述右腿后剩下的点云;

    人体第二关键点提取单元,用于从所述人体的点云中确定第二关键点,其中,所述第二关键点包括:前颈点、后颈点、左胸点、右胸点、左膝点、右膝点;以及

    人体主要尺寸计算单元,用于根据所述第一关键点、所述第二关键点及所述人体的各部分对应的点云,计算所述人体的主要尺寸,其中,所述人体的主要尺寸包括围度和曲线长,所述围度包括:颈围、左上臂围、右上臂围、左夹围、右夹围、和躯干围,所述曲线长包括:会阴上部前后长、左背长、右背长。

    12.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-10任一所述的方法。

    技术总结
    本发明公开了一种基于点云的实时三维人体测量方法、系统及存储介质,方法包括如下步骤:S1:从人体的点云中确定第一关键点,第一关键点包括:左右侧颈点、左右腋下点、会阴点;S2:根据第一关键点分割出人体的各部分对应的点云,人体的各部分对应的点云包括头部、躯干、左右臂、左右腿;S3:从人体的点云中确定第二关键点,第二关键点包括:前后颈点、左右胸点、左右膝点;S4:根据第一关键点、第二关键点和人体的各部分对应的点云,计算人体的主要尺寸,人体的主要尺寸包括围度和曲线长。本发明运算简单,效率高,实时性强,提升了用户体验,测量精度良好,能够符合很多需要人体尺寸数据的领域。

    技术研发人员:任茂栋;张朵朵;唐正宗;周烨
    受保护的技术使用者:新拓三维技术(深圳)有限公司
    技术研发日:2020.11.18
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-19964.html

    最新回复(0)