鲍 陈, 缪永伟, 孙瑜亮, 张旭东
(1. 浙江工业大学 计算机科学与技术学院, 浙江 杭州 310023; 2. 浙江理工大学 信息学院, 浙江 杭州 310018)
人体测量学是人机工程一个非常重要的研究领域,通过测量人体各部位的尺寸差异来研究人体的体态特征,为服装CAD设计、服装工效学和虚拟试衣等提供人体测量数据[1],保证服装合身,并使着装既舒适又美观。目前可以通过三维非接触人体扫描技术,获得完整的人体表面三维点云数据,进而快速准确地提取人体特征点与特征线,并计算出人体特征尺寸。
从三维人体扫描点云数据提取人体尺寸的关键在于如何鲁棒、准确地提取特征点。国内外研究者相继提出了许多可行方法,主要方法有模板法、函数法和几何形状法3种。模板法是通过将一个预定义的模板映射到人体点云上来提取特征点。Allen等[2]提出模板映射方法,该算法为每个预定义点建立1个仿射变换最优化函数来提取特征点。Nurre等[3]提出将人体点云模型近似为棍模板,按照此模板对人体进行自动分段,通过对不同截面全局形状和相对位置的分析,提取特征点。模板法与其他2种方法相比,对特征点的定位精度略高,但是其缺点迭代求解计算量较大,速度慢。函数法通过为每个特征点建立1个具体的函数来识别特征点。Dekker等[4]提出在网格数据并建立判别函数,来自动提取特征点。Leong等[5]提出用逻辑数学描述人体特征,再利用深度图与语义约束来识别特征点。函数法对曲线和曲面拟合的过程十分复杂且运行时间较长。几何形状分析法是根据人体比例和人体几何形状分析来提取人体特征点。Markiewicz等[6]将人体点云分割,采用人体轮廓表面属性分析法,来定位特征点。陈国安等[7]在进行人体几何形状分析基础上,提出一种基于模糊逻辑规则自动提取人体特征点。上述几何形状分析方法都没有考虑利用廉价的深度相机,构建从原始三维人体点云模型到人体尺寸自动测量,以及测量结果的评价完整方案。
本文针对服装设计的三维人体测量学的需求,提出一种基于散乱点云的三维人体自动测量方案,无需在测量前进行人体体型分类,也无需测量扫描前人为标注模型基准点与基准线,通过分析人体轮廓几何特征,识别人体特征点,采用陈国安等[7]提出的人体截面轮廓变化极限点和分叉点2类人体特征点进行人体尺寸测量。本文方案不易受人体体型因素的影响,可以有效地实现人体尺寸信息自动提取,获得人体尺寸数据能够满足GB/T 23698—2009《三维扫描人体测量方法的一般要求》精度要求。
使用消费级Kinect深度相机获取三维人体点云数据,受文献[8]启发,设计出一种基于2台Microsoft Kinect v2深度相机和1个电动转盘来构建三维人体尺寸测量系统,如图1所示。在扫描过程中,被测者直立站在转盘固定位置,双臂张开与身体角度15°~45°,双腿自然分开两脚与肩平齐。对多台Kinect相机进行位姿标定[9],得到三维扫描点云数据,经过迭代最近点匹配(ICP)算法将8个(每45°取1块点云)单块三维人体点云进行配准拼接,获得原始三维人体点云模型。
图1 人体尺寸测量系统装置Fig.1 Measurement system device of human body sizes
本文主要论述三维人体点云数据获取后,利用人体几何形状分析法,自动提取人体特征点并进行尺寸计算。本文的三维人体尺寸提取方案流程如图2所示。
图2 人体尺寸测量流程图Fig.2 Flow chart of human body size measurement
1)数据预处理。包括点云降采样与去噪和表面重建,以及点云坐标转换。点云降采样、去噪和表面重建,通过Kinect深度相机获取的三维点云数据,通常会产生密度不均匀的大量点云数据,且由于测量中误差会产生稀疏的离群点,对经过ICP配准拼接后的点云数据进行降采样、离群点滤波和表面重建,得到数据量减少、保形、准确法线和曲率方差较小的点云模型。点云坐标转换,由于扫描数据初始读入时以相机中心为坐标原点,这将不利于后续特征尺寸提取,因此,需要对三维人体点云模型进行坐标调整。根据人体测量学定义人体测量基准面,将点云坐标系转换到正中矢状面上,从而识别出人体正背面。
2)人体点云分割。根据腋窝点和会阴点作为人体分割的特征点,识别出不同肢体的点云数据,并使用沿上臂根部纵向划分的肢体分割方法提高对不同体型人体点云模型的适应性,将人体点云分割为手臂(左臂和右臂)、双腿(左腿和右腿)、躯干和头部3个部分。人体点云分割使得对后续特征点识别更加快速和鲁棒。
3)特征点提取。测量人体尺寸前,首先根据人体特征点位置与身高之间的比例关系,近似计算出特征点(身高、颈侧点、肩峰点、胸高点、腰侧点、臀凸点、外踝点),所采用的三维人体点云模型为右手定则坐标系,并根据人体几何特征分析法精确自动定位特征点及其所在的特征截面。若此时用户对提取特征点结果不满意,则可进行交互式选取特征点。
4)尺寸计算。利用提取出的人体特征截面点云,计算人体尺寸。首先需要提取出边界点集,构建特征截面点云的kd-tree数据结构,实现基于FLANN快速最近邻检索,利用点云中点与其K邻域点分布均匀性的检测出特征边界点集,边界有序拾取算法收集到有序特征线;接着通过改进的凸包法得到特征截面轮廓有序特征边界线点集;最后采用3次B样条曲线拟合计算特征尺寸,并将测量项目的值输出。
采用Kinect深度相机获取的原始点云数据,如图3(a)所示,通常数据量较大且不可避免地存在一些噪声点。首先对原始人体点云数据获取后,进行点云数据预处理,采用 VoxelGrid滤波器对点云进行降采样[10],通过对输入点云数据创建1个三维体素栅格,在每个体素内用所有点的重心来近似显示体素中其他点;接着使用StatisticalOutlier 滤波器移除离群点,设置在进行统计时考虑查询点近邻点数,计算该点到所有临近点的距离,并设置判断是否为离群点的阈值标准差,平均距离在标准范围之外的点,被从数据点集中去除掉;最后由于采用2台Kinect深度相机采集数据,扫描数据经ICP配准后得到,如果直接使用容易造成“双墙”等人造伪数据(重叠的2个曲面),采用基于移动最小二乘(MLS)的法线估计、点云平滑和数据重采样。通过上述3个步骤,得到了数据量减少、保形、准确法线和曲率方差较小的点云模型。点云降采样、去噪和表面重建得到密度适中的扫描线点云,设定层间距为扫描线扫描间距的2倍,如图3(b)所示。这将有利于后续更好地进行特征点提取与特征边界线收集等操作。
图3 人体点云数据预处理Fig.3 Cloud data preprocessing of human body points. (a)Original point cloud; (b)Point cloud desampling, denoising, and surface reconstruction; (c)Point cloud coordinate transformation
在获得坐标转换点云模型后,首先计算身高H,Y轴方向为人体身高方向,人体点云模型Y轴方向最大值ymax和最小值ymin计算身高H=ymax-ymin;参考GB/T 16160—2008《服装用人体测量的部位与方法》和美国Clemson大学对人体特征点位置与身高之间的比例关系[7],将人的身高值归一化,则各特征点的高度值百分比如表1所示。特征点估计高度坐标值为hx,特征点位置的坐标高与身高的比例为λscale,则从表1中可得到人体各特征点的近似高度坐标值为hx=λscaleH+ymin。为提取特征点,采用分层来构建人体扫描线点云,点云数据使用PCD(point cloud data)格式存储,首先将PCD格式的三维人体点云模型转换为CSV格式数据,保存每个点序号和三维坐标信息,通过用特征点的平面与三维人体点云相交的交平面生成特征截面扫描线点云数据。
表1 人体特征点位置与身高之间比例Tab.1 Proportion of position of human body characteristic points and body height
为减少识别出人体特征点搜索区域,需要对人体点云进行分割,根据轮廓分析法来定位腋窝点和会阴点,作为人体分割的基准点,将人体分为手臂、腿、躯干和头部。腋窝点和会阴点,作为分叉点,通过空隙查找法和曲率来定位提取。
腋窝点的提取准则。本文改进了Wang等[11]提出模糊逻辑规则的腋窝点提取方法,其步骤如下:1)以肩峰点ybegin=0.82H为起始位置,垂直向下等步长搜索截面扫描线点云,步长取值为2 mm。2)在特征截面点云上,经过点云边界识别、降采样等操作得到截面环线Sc,利用空隙查找法,找到第1个开始出现间隙的截面环,判断是否出现间隙的方法为:按照X轴坐标轴从小到大进行排序,计算截面环上相邻2个点在X轴方向的差值,如果差值大于某个阈值,则为1个间隙,也就是出现不同环,当环数首次由1变到3时,则找到腋窝点截面环Sarmpit。在截面环Sarmpit上找取曲率最大的6个点,计算离散点的曲率首先计算离散点集P的协方差矩阵C,如下:
图4 人体点云分割结果示意图Fig.4 Segmentation results of human body point cloud.(a)Human body segmentation key points; (b) Human body segmentation result
会阴点的提取准则。根据会阴点的定义,会阴点位于左、右坐骨结节最下点的连线的中点。本文改进Zhong等[13]提出的会阴点提取方法,其步骤如下:以臀凸点ybegin=0.53H为起始位置,垂直向下搜索截面扫描线点云,判断是否出现间隙的截面环;当环数首次由1变到3时,则找到会阴点截面环Scrotch。接下来,在截面环Scrotch上,用x=0的平面垂直截切点云中y坐标最小点为会阴点Pcrotch。提取腋窝点和会阴点后,通过直通滤波对点云进行滤波处理,分割出左右手臂、左右下肢、躯干和头部。根据腋窝点和会阴点,分割人体点云模型,图4(a)为分割的分界点示意图,图4(b)为分割结果示意图,再此基础使得特征点的识别更加快速和鲁棒。
以胸高点和颈椎点为例,予以说明轮廓变化极值点的提取过程。1)由胸高点的定义可知,胸高点位于腋窝点之下腰点之上比例值区间,通过胸部最高点的截面环上,其截面是水平截面。首先根据输入的三维人体扫描线点云,确定胸高点的搜索区间[0.75H~0.61H]搜索域上截面点集;然后在该搜索域内从0.75H为起始位置,沿着Y方向垂直向下采用变步长搜索,通过对特征截面点云边界识别、降采样等得到轮廓线,并对获取的轮廓线边界点集进行均值滤波平滑;最后通过比较3个近邻的搜索截面环轮廓线,如果中间截面环轮廓线上Z坐标值点最大,则该点为所要提取的胸高点,根据对称性,另一个胸高点亦可求得。2)由颈根围线的定义可知,其经过颈窝点、颈侧点和颈椎点的曲线,其截面是斜截面,通过空间旋转局部区域内人体点云模型的方法,将斜截面转换为水平截面来求取颈椎点,其颈椎点提取示意图如图5所示。首先根据输入的三维人体扫描线点云,提取颈侧点,颈侧点位于人体正投影的侧轮廓上,为曲率变化最大处,是头和躯干相连接部分中最凹点,确定颈侧点的搜索区间,获得颈侧点集,对颈侧点集进行XOZ面投影,获得投影面点集;然后遍历该投影面点集,找取X坐标值最小的点,继续沿着Y方向遍历搜索区域内其他投影面点集,从而获得右颈侧点,依据对称性,可求得X坐标值最大的点,为左颈侧点;最后由于颈根围线是斜截面如图5(a)所示,通过空间旋转变换将人体头部点云模型绕X轴旋转20°如图5(b)所示,利用颈侧点水平截面截切的方法得到颈椎点截面点云,求得颈椎点截面点云中Z坐标最小值点为颈椎点。其他特征斜截面如上臂围、腕围,由于篇幅原因,不再赘述。
图5 颈根围线提取Fig.5 Neck base line extraction. (a)Oblique cross section neck base line; (b) Neck base line rotaled by 20°
通过自动提取轮廓极限点,有时因一些非正常体型如:挺胸体、驼背体、凸肚体、凸臀体等,无法很好地采用几何形状分析法进行人体特征点自动定位,提取出的特征点用户可能不满意。为此,本文实现一种基于用户交互方式的拾取空间三维点坐标功能,方便用户交互方式选择人体特征点,以使本文系统更加鲁棒。通过鼠标在计算机屏幕上点选三维点,从屏幕上拾取特征点的三维点坐标,并将其坐标保存在配置文件中,方便后续特征尺寸计算。在交互测量界面类中调用静态回调方法函数,获取三维点坐标;依据Qt信号槽机制,实现交互测量界面类与特征点编辑对话框类建立连接,进行特征点编辑。
4.1.1判别边界特征点
散乱点云呈无序分布,必须建立数据点之间的空间拓扑关系,以方便K近邻搜索。本文采用kd-tree对特征截面散乱点云数据进行组织,实现基于FLANN快速最近邻检索。点云数据点的边界特征点有其自身特点,如图6所示。图6(a)中P点K邻域点分布偏向某一侧,即为边界特征点,图6(b)中P点K邻域点均匀分布,即为内部点。利用点云中点与其K邻域点分布均匀性判断边界点[14-15],而这种分布的均匀程度可以根据2个相邻方向线段间的夹角差来判断,当夹角差超过设定阈值为边界点,否则为内部点。
图6 判别边界特征点Fig.6 Judging boundary feature points.(a)P is boundary point;(b)P is interior point
算法1:边界点检测。
输入:特征截面点云数据SF。
输出:边界点集合SB。
4.1.2边界点有序拾取
4.2.1三维人体尺寸提取
根据人体测量学的原理,利用自动提取的人体特征点和特征截面点云,通过特征边界点提取,得到特征边界线,从而计算人体特征尺寸。根据三维服装设计测量项目的需求,将测量人体尺寸参数分为长度尺寸、围度尺寸和弧长尺寸。
2)围度尺寸,计算方法如下:定位围度所在点云分段区域(躯干、手臂、双腿等);利用测量特征点的水平截面与三维人体分段模型求交,得到特征截面点云数据,如腰围、胸围在躯干上围度截面;再对特征截面点云提取特征边界点,设定K邻域搜索范围和角度阈值ω,并进行降采样滤波,通过边界点有序拾取算法,实现对散乱点云提取特征边界轮廓线;采用改进的凸包法计算围度尺寸。
3)弧长尺寸,计算方法如下:利用测量特征点的水平截面与三维人体分段点云模型求交,得到特征截面点云SF,利用多个相关测量特征点,剔除点云SF中与弧长无关的部分,经特征边界点检测,得到特征边界点集。由于弧长特征边界线是不闭合的,如背宽为例,过左、右后腋窝点的水平弧长,对背宽截面特征点集,按照X坐标值进行快速排序,并确定左、右后腋窝点为有序拾取点集的起点和终点,通过边界有序拾取算法,得到肩宽特征线;采用改进的凸包法计算弧长尺寸。
4.2.2基于凸壳的轮廓线计算方法
算法2: 二维平面凸壳
输入:平面上一组点MU(P1,P2,…,Pn)。
输出:凸壳点链表LV。
步骤1:在序列MU中取P1点作为起始点,令Pc=P1,将P1点保存在凸壳点链表LV中。
步骤3-2:如果val==0,Pc、Pt和Pik是共线的,选择离Pc点,更接近的一个共线点。若distance(Pc,Pt,Pik)<0,则点Pt添加到LC中,令Pt=Pik。否则,将点Pik添加到LC中。
步骤4:i=i+1,如果i≤n,则返回步3-1,否则转向步5。
步骤5:将共线点链表LC中所有点添加到凸壳点链表LV中。
步骤6:当Pt=Pn时,凸壳点算法结束。
步骤7:将点Pt添加到LV链表中,令Pc=Pt,并转步3。
凸壳点链表ML计算方法与链表MU凸壳计算方法相同,不再赘述。
以胸围特征边界线和腰围特征线为例,展示某男模特围长特征边界线中胸围、腰围尺寸B样条拟合。胸围腰围及背宽特征边界线B样条曲线拟合如图7~9所示。B样条拟合曲线后,计算特征尺寸的长度。
图7 胸围凸包B样条拟合Fig.7 B-spline fitting of chest circumference convex-hull.(a)Chest circumference characteristic boundary line;(b)Chest circumference convex-hull fitting curve
图8 腰围凸包B样条拟合Fig.8 B-spline fitting of waist circumference convex-hull.(a)Waist circumference characteristic boundary line;(b)Waist circumference convex-hull fitting curve
图9 背宽凸包B样条拟合Fig.9 B-spline fitting of back breadth convex-hull.(a)Back breadth characteristic boundary line;(b) Back breadth convex-hull fitting curve
本文提出的方法已在Intel Corei5 2.30 GHz CPU、8 GB RAM计算机,利用Microsoft Visual Studio 2013 + Qt5集成开发环境,使用C++实现。基于三维人体点云数据的人体尺寸自动测量系统,其交互测量界面如图10所示。界面左上方为人体基于Qt-VTK点云可视化三维点云显示窗口,显示三维人体点云模型;界面左下方为画布PaintArea类,继承于QWidget类,绘制拟合B样条曲线;界面右侧为特征尺寸的测量结果。本文系统使用基于人体几何特征及人体测量学中定义特征点所在位置解决人体特征点自动定位问题;对定位的测量特征点的平面通过对细分肢体点云文件操作,截切三维人体点云解决特征截面点云数据生成问题;使用散乱点云特征边界有序拾取算法解决收集有序特征线点集问题,最后通过三次B样条曲线拟合,采用改进的凸包法来计算三维人体点云模型的特征尺寸。
图10 交互测量界面Fig.10 Interactive measurement interface
为进一步验证提出的人体尺寸自动测量方案精密度,根据服装CAD设计具体需要,测量14个特征尺寸。根据GB/T 23698—2009《三维扫描人体测量方法的一般要求》中规定测量精度可重复性和可再现性的要求,对同一个真实人体进行了多次测量,表2示出同一真人(男)模特在相同测量环境不同测量时间下,得到的5次人体尺寸测量结果。图11示出人体尺寸测量项目。利用IQR、标准差和变异系数(CV)来表征测量观测值之间离散程度,从计算结果来看测量项目CV值均达文献[16]提到的5%以内;同时为衡量和评价观察者间信度和复测信度,引入组内相关系数(ICC)[17],以验证测量结果的一致性和可靠性,在人体特征尺寸测量中,采用两因素混合效应模型(two-way mixed effects model)。应用方差分析,选择ICC(A,1)用于计算测试评分者的信度,选择ICC(C,1)用于一致性估计。
表2 测量结果精密度分析Tab.2 Precision analysis of measurement results cm
图11 人体尺寸测量项目Fig.11 Measurement items of human body dimessions
式中:MSR为组间均方差;MSE为均方误差;MSC为组内均方差;k为处理组数;n为被观察对象的个数。对表2中的数据进行统计分析,计算ICC(A,1)信度系数为0.99,计算ICC(C,1)为0.99。一般认为ICC信度系数对定量资料或分类资料,大于0.75表示信度良好。
为进一步验证该方案的准确度,考虑年龄在22~34岁群体体态特征,对8位在该年龄范围的真人(男)模特,取6个特征尺寸自动测量值和手动测量(ground-truth)进行对照,测量误差分析结果如表3所示。本次测量平均误差最大值为0.78 cm,长度尺寸的最大误差为0.38 cm,围度和弧长尺寸的最大误差为0.85 cm。测量误差在GB/T 23698—2009《三维扫描人体测量方法的一般要求》允许范围之内(长度尺寸的允许误差为0.4 cm,围度和弧长尺寸允许误差为0.9 cm)且准确度高于文献[4]和文献[18]中的尺寸测量结果。
为更加直观地验证其误差准确度,构建如图12所示测量误差箱线图。其箱线图最小、最大边界为1.5IQR范围内,超出值为离群值。结果显示,本文方案可以有效地实现对人体尺寸信息自动提取,根据人体尺寸测量结果,获得的人体尺寸数据可满足三维服装CAD设计领域对测量精度的需求。
表3 测量的误差分析Tab.3 Error analysis of measurement cm
图12 测量误差箱线图Fig.12 Measurement error boxplot
本文提出了一种基于散乱点云的三维人体自动测量方案,有效地实现了从三维人体点云模型自动提取人体尺寸信息。本文方案在一定程度上克服了商业三维人体扫描系统价格高、操作复杂的不足,利用消费级的Kinect深度相机,构建出方便、廉价和高效的非接触式三维人体尺寸测量系统。结果表明,从原始三维人体点云模型到人体尺寸自动测量,以及测量结果的评价完整方案均是可行的,获得人体尺寸数据满足GB/T 23698—2009的精度要求。
在采集三维人体点云数据时,由于TOF深度相机测量原理以及人为因素,测量获得物体表面点云可能存在“空洞”。在后续研究工作中,将针对点云数据补洞、散乱点云精简等进行研究,提升获取点云数据质量;并进一步改进方案的鲁棒性和准确性,扩充人体模型样本数据集,完善人体尺寸自动测量系统软件,并增加人体更多部位的测量尺寸信息。
FZXB