发明内容
本发明的目的在于提供一种非接触的可以精确测量人体躯干围度的,便于进行批量处理的人体躯干围度测量方法和装置。
本发明公开了一种基于计算机视觉的人体躯干围度测量方法,包括:
获取立体躯干点云数据,所述立体躯干点云数据包括躯干表面的所有采样点的空间坐标;
选取围度测量位置的采样点进行投影构建躯干剖面图像;
计算躯干剖面图像的最大的内轮廓,得到所述最大内轮廓按逆时针顺序排列的像素序列;
计算所述像素序列中每个像素对应的剖面坐标,所述剖面坐标为空间坐标在所述剖面的投影坐标;
根据所述剖面坐标计算所述像素序列中所有相邻像素间空间实际距离,对所述相邻像素间空间实际距离求和获得人体躯干围度测量值。
优选地,所述选取围度测量位置的采样点进行投影构建躯干剖面图像包括:
计算立体躯干点云数据的主轴,并进行空间坐标变换,将立体躯干点云数据的空间坐标转换到以所述主轴为坐标轴的新坐标系中,在需要测量围度的主轴位置按预定条件提取立体躯干点云数据作为构成躯干剖面的点集;
将所述构成躯干剖面的点集沿与躯干围度垂直的主轴按预定分辨率进行平面图像投影,根据落入每个像素面积内的点的数量确定对应像素的灰度值,构建躯干剖面图像。
优选地,所述计算躯干剖面图像的最大的内轮廓包括:
对躯干剖面图像进行二值化,对二值化后的剖面图像进行连通域分析,获得最大的内轮廓。
优选地,所述获取立体躯干点云数据包括:
深度摄像装置围绕人体躯干相对移动一周,获取包括人体躯干的深度图像序列;
对所述深度图像序列的每一帧深度图像进行人体姿态识别,分别获得每一帧深度图像的躯干像素点云数据形成躯干像素点云数据序列;
选取相互差异度大于预定阈值的多个帧的躯干像素点云数据,进行躯干像素点云数据拼接,获得包括人体躯干采样点空间坐标的立体躯干点云数据。
优选地,所述在需要测量围度的主轴位置按预定条件提取立体躯干点云数据作为构成躯干剖面的点集包括:
在需要测量围度的主轴位置建立垂直于主轴的平面,提取立体躯干点云数据中到所述垂直于主轴的平面的距离小于第一阈值的点作为构成躯干剖面的点集。
优选地,所述计算所述像素序列中每个像素对应的剖面坐标包括:
根据下式计算所述像素序列的每个像素对应的剖面坐标:
其中,(ui,vi)为像素坐标,(xi,yi)为像素序列中第i个像素对应的剖面坐标,xmax和xmin分别为所述构成躯干剖面的点集中投影到剖面上的x坐标的最大值和最小值,ymax和ymin分别为所述构成躯干剖面的点集中投影到剖面上的y坐标的最大值和最小值,cols和rows为图像的预定分辨率。
优选地,所述根据所述剖面坐标计算所述像素序列中所有相邻像素间空间实际距离,对所述相邻像素间空间实际距离求和获得人体躯干围度测量值包括通过下式计算人体躯干围度测量值:
其中,L为所述人体躯干围度测量值,(xi,yi)为像素序列中第i个像素对应的剖面坐标,N为像素序列中像素的总数。
优选地,所述选取相互差异度大于预定阈值的多个帧的躯干像素点云数据,进行躯干像素点云数据拼接,获得包括人体躯干采样点空间坐标的立体躯干点云数据包括:
按顺序比较所述躯干像素点云数据序列中的躯干像素点云数据之间的差异度,从所述躯干像素点云数据序列中选取相互差异度大于差异阈值的躯干像素点云数据构成拼接数据序列,基于拼接数据序列中的躯干像素点云数据进行配准拼接,获得所述立体躯干点云数据;
其中,所述按顺序比较所述躯干像素点云数据序列中的躯干像素点云数据之间的差异度包括:
通过主元分析分别获得的进行比较的两帧躯干像素点云数据的第二主轴或第三主轴;
判断所述进行比较的两帧躯干像素点云数据的第二主轴之间或第三主轴之间的夹角是否大于夹角阈值。
优选地,所述选取相互差异度大于预定阈值的多个帧的躯干像素点云数据,进行躯干像素点云数据拼接,获得包括人体躯干采样点空间坐标的立体躯干点云数据包括:
按顺序比较所述躯干像素点云数据序列中的躯干像素点云数据之间的差异度,从所述躯干像素点云数据序列中选取相互差异度大于差异阈值的躯干像素点云数据构成拼接数据序列,基于拼接数据序列中的躯干像素点云数据进行配准拼接,获得所述立体躯干点云数据;
其中,所述按顺序比较所述躯干像素点云数据序列中的躯干像素点云数据之间的差异度包括:
分别计算进行比较的两帧躯干像素点云数据的重心坐标;
根据是否满足如下条件判断所述差异度是否大于差异阈值:
当Covprev[0][0]>k1·Covprev[2][2]时,|zprev-zk|>thresh1
当Covprev[0][0]<k2·Covprev[2][2]时,|xprev-xk|>thresh2
其它情况时,|zprev-zk|+|xprev-xk|>thresh3
其中,Covprev为上一个被确定为需要进行拼接的深度图像的协方差矩阵,(xprev,yprev,zprev)为上一个被确定为需要进行拼接的深度图像的重心坐标,(xk,yk,zk)为躯干像素点云数据序列中当前待选深度图像的重心坐标,k1和k2为预定权值,k2<k1,thresh1、thresh2、thresh3为预定的第一重心变化阈值,第二重心变化阈值和第三重心变化阈值。
优选地,通过如下方式确定所述躯干像素点云数据序列的结束帧:
确定所述躯干像素点云数据序列的起始帧;
计算所有躯干像素点云数据与所述起始帧的躯干像素点云数据的相似度,并按照所对应的深度图像的排列顺序记录所述相似度的变化趋势;
选取与所述起始帧相似度高且排列于相似度经历了两次下降上升过程的位置的帧对应的躯干像素点云数据作为所述结束帧。
本发明还公开了一种基于计算机视觉的人体躯干围度测量装置,包括:
躯干点云获取模块,用于获取立体躯干点云数据,所述立体躯干点云数据包括躯干表面的所有采样点的空间坐标;
剖面图像计算模块,用于选取围度测量位置的采样点进行投影构建躯干剖面图像;
内轮廓计算模块,用于计算躯干剖面图像的最大的内轮廓,得到所述最大内轮廓按逆时针顺序排列的像素序列;
剖面坐标计算模块,用于计算所述像素序列中每个像素对应的剖面坐标,所述剖面坐标为空间坐标在所述剖面的投影坐标;
躯干围度计算模块,用于根据所述剖面坐标计算所述像素序列中所有相邻像素间空间实际距离,对所述相邻像素间空间实际距离求和获得人体躯干围度测量值。
优选地,所述剖面图像计算模块包括:
剖面构建模块,用于计算立体躯干点云数据的主轴,并进行空间坐标变换,将立体躯干点云数据的空间坐标转换到以所述主轴为坐标轴的新坐标系中,在需要测量围度的主轴位置按预定条件提取立体躯干点云数据作为构成躯干剖面的点集;
剖面图像构建模块,用于将所述构成躯干剖面的点集沿与躯干围度垂直的主轴按预定分辨率进行平面图像投影,根据落入每个像素面积内的点的数量确定对应像素的灰度值,构建躯干剖面图像。
优选地,所述计算躯干剖面图像的最大的内轮廓包括:
对躯干剖面图像进行二值化,对二值化后的剖面图像进行连通域分析,获得最大的内轮廓。
优选地,所述躯干点云获取模块包括:
深度图像序列获取单元,用于通过深度摄像机围绕人体躯干相对移动拍摄一周获取包括人体躯干的深度图像序列;
图像分割单元,用于对所述深度图像序列的每一帧深度图像分别进行人体姿态识别,分割获得每一帧深度图像的躯干像素点云数据形成躯干像素点云数据序列;
立体数据拼接单元,用于对需要进行拼接的多个帧的深度图像进行拼接,获得包括人体躯干表面立体信息的躯干立体点云数据。
本发明通过人体躯干三维数据建模获取人体躯干立体点云数据,通过投影获得躯干剖面图像,并根据剖面图像计算人体躯干围度,获得的测量值精度高,便于测量人员批量处理数据,大大提高了人体体型数据测量的自动化程度和效率。
具体实施方式
下面结合附图并通过具体实施方式来进一步说明本发明的技术方案。
本发明实施例的总体方式是人体面对深度摄像装置转一圈,采集包含躯干的深度图像序列。对深度图像序列进行拼接,形成躯干一周的点云数据,根据点云数据测量人体三围。
图1是本发明实施例的人体躯干围度测量方法的方法流程图。如图1所示,所述方法包括如下步骤。
步骤100、获取立体躯干点云数据,所述立体躯干点云数据反映人体躯干表面的所有采样点的空间坐标。
其中,点云数据(point colud)是指透过3D扫瞄仪所取得之数据型式。扫描数据以点的型式记录,每一个点包含有三维座标,有些可能含有色彩资讯(R,G,B)或物体反射面强度。
步骤200、通过主元分析(PCA)求取立体躯干点云数据的主轴,并进行空间坐标变换,以使得立体躯干点云数据的空间坐标转换到以所述主轴为坐标轴的新坐标系中,在需要测量围度的主轴位置按预定条件提取立体躯干点云数据作为构成躯干剖面的点集。所述构成躯干剖面的点集是立体躯干点云数据中指在围度测量位置附近的点的集合,其构成人体躯干在测量位置的围度。
主元分析(PCA,Principal Component Analysis)是一种对数据进行分析的技术,最重要的应用是对原有数据进行简化,其可以有效的找出数据中最“主要”的元素和结构,去除噪音和冗余,将原有的复杂数据降维,揭示隐藏在复杂数据背后的简单结构。主元分析广泛应用于计算机视觉技术中,可用于求取模型所在的各个自然轴。
当然,在计算机图形学的技术中,通过计算最小外接矩形或最小外接长方体,或者通过计算图形惯量矩阵的特征向量也均可以计算获得立体躯干点云数据的主轴。
在本发明的一个实施例中,在所述步骤200中,优选通过下述方式选取构成躯干剖面的点集:
在需要测量围度的主轴位置建立垂直于主轴的平面,提取立体躯干点云数据中到所述垂直于主轴的平面的距离小于第一阈值的点作为构成躯干剖面的点集。
其中,可以根据现有的统计知识确定需要测量的主轴位置,以腰围为例,在手工测量腰围时,皮尺水平放在髋骨上、肋骨下最窄的部位(腰最细的部位),根据该特点,可确定剖面的位置。首先根据先验知识确定腰部剖面在躯干主轴上的大致区间,例如腰位于躯干中下部,1/2到4/5之间,在区间内,构建一系列剖面,求剖面的周长,确定周长最小剖面的周长为腰围。
步骤300、将所述构成躯干剖面的点集沿与躯干围度垂直的主轴按预定分辨率进行平面图像投影,根据落入每个像素面积内的点的数量确定对应像素的灰度值,构建躯干剖面图像。
在本发明的另一个实施例中,步骤300中进行投影,计算落入像素中的投影点的数量可以通过统计坐标满足如下公式的点的数量来确定:
(ui,vi)为像素坐标,(xi,yi)为像素对应的剖面坐标,xmax和xmin分别为所述构成躯干剖面的点集中的x坐标的最大值和最小值,ymax和ymin分别为所述构成躯干剖面的点集中的y坐标的最大值和最小值,cols和rows为图像的预定分辨率,即所述图像为cols列*rows行像素构成的数字图像。
步骤400、对剖面图像进行二值化(如果灰度值大于等于灰度阈值设置该像素灰度为1,反之设置为0),对二值化后的剖面图像进行连通域分析,求取最大的内轮廓,得到内轮廓按逆时针顺序排列的像素序列。
步骤500、根据投影到所述躯干剖面图像中的构成躯干剖面的点集的最大、最小剖面坐标以及所述躯干剖面图像的分辨率计算所述像素序列的每个像素对应的剖面坐标。所述剖面坐标为空间坐标在所述剖面的投影坐标
在一个优选实施例中,所述步骤500中,根据下式计算所述像素序列的每个像素对应的剖面坐标:
其中,(ui,vi)为像素坐标,(xi,yi)为像素对应的剖面坐标,xmax和xmin分别为所述构成躯干剖面的点集中的x坐标的最大值和最小值,ymax和ymin分别为所述构成躯干剖面的点集中的y坐标的最大值和最小值,cols和rows为图像的预定分辨率,即所述图像为cols列*rows行像素构成的数字图像。
实际上,上述实施例中利用像素对应区域的最小坐标作为像素对应坐标,在其它实施方式中,也可以采用像素对应的最大坐标或最大最小坐标的均值作为像素对应坐标。
步骤600、基于剖面坐标计算所述像素序列中所有相邻像素间空间实际距离,对所述相邻像素间空间实际距离求和获得人体躯干围度测量值。
其中,空间实际距离指的是图片中像素所对应的成像物体所在位置之间的实际距离。
在本发明实施例中,所述步骤600可以通过下式计算人体躯干围度测量值:
其中,L为所述人体躯干围度测量值,(xi,yi)为像素序列中第i个像素对应的空间坐标,N为像素序列中像素的总数。其中,由于围度的是闭合的图形,因此像素序列中第一个像素和第N个像素(最后一个像素)是相邻的。
在本发明实施例中,采用深度摄像装置围绕人体躯干拍摄,并进行人体姿态识别和点云数据拼接的操作来获取所述的立体躯干点云数据。图2是本发明实施例的人体躯干围度测量方法获取立体躯干点云数据的流程图。如图2所示,所述获取立体躯干点云数据的步骤包括:
步骤101、通过深度摄像机围绕人体躯干相对移动拍摄一周获取包括人体躯干的深度图像序列。
步骤102、对所述深度图像序列的每一帧深度图像分别进行人体姿态识别,分割获得每一帧深度图像的躯干像素点云数据形成躯干像素点云数据序列。
步骤103、对需要进行拼接的多个帧的深度图像的躯干像素点云数据进行拼接,获得包括人体躯干所有表面信息的躯干立体点云数据。
在本实施例中,优选使用现有的ICP算法来进行深度图像拼接。当两帧躯干点云存在公共区域时,可以根据公共区域信息,对两帧躯干点云进行拼接。拼接方法可采用刚体配准方法,求出两帧之间的平移向量T和旋转矩阵R。基于ICP算法配准方法,先求对应点对,然后求平移向量T和旋转矩阵R,进行迭代,直至收敛。步骤103对所有需要参与拼接的图像按时间顺序相邻帧之间两两配准,计算后一帧相对于前一帧的旋转矩阵和平移向量,找一个基准帧,例如第一帧,计算后续帧相对于第一帧的平移和旋转,并旋转后续帧躯干点云,即可形成拼接后的点云。
在点云拼接过程,由于配准误差积累,对深度图像序列的全部帧进行两两配准有可能达不到预期结果,即人转一圈后,躯干点云不能封闭,参与配准的帧数越多,该问题就越严重。为处理该问题,在本发明的一个实施例中,仅在两帧间差异度较大时才进行配准,即,从所述的深度图像序列中选取差异度较大的帧构成具有较少数量深度图像点云数据的拼接数据序列,对拼接数据序列中的点云数据进行配准拼接,从而避免躯干点云不能封闭的问题。
图3是本发明一实施例提供的对躯干像素点云数据进行选取的方法流程图。如图3所示,本实施例对躯干像素点云数据进行拼接的步骤包括:
步骤103A、从所述躯干像素点云数据序列中确定第一幅需要进行拼接的深度图像的躯干像素点云数据;在本实施例中,确定所述深度图像序列的第一帧的躯干像素点云数据作为所述第一幅需要进行拼接的深度图像。
步骤103B、比较上一个被确定为需要进行拼接的躯干像素点云数据与躯干像素点云数据序列中当前待选躯干像素点云数据之间的差异度是否大于差异阈值,如果大于,则执行步骤103C,否则执行步骤103D。
步骤103C、将所述当前待选的躯干像素点云数据确定为需要进行拼接的躯干像素点云数据放入拼接数据序列。
步骤103D、判断躯干像素点云数据序列是否结束,如果否,执行步骤103E,如果是,执行步骤103F。
步骤103E、将所述躯干像素点云数据序列中的下一帧躯干像素点云数据作为当前待选躯干像素点云数据,转而执行步骤103B进行新的差异度比较。
步骤103F、输出选取得到的待拼接点云数据序列。
对于差异度是否大于阈值的判断,本发明实施例提供以下两种方式:
方法A、对需要进行比较的两帧深度图像对应的躯干像素点云数据分别进行主元分析,分别得到两帧深度图像对应的躯干像素点云数据的第一主轴、第二主轴、第三主轴。所述第一主轴、第二主轴和第三主轴为所述人体躯干像素点云数据的主要分布方向,由于人体躯干沿人体高度方向分布,因此计算得到的第一主轴为人体高度方向,第二和第三主轴代表人体转动的角度。
在求得需要进行比较的点云数据的第二主轴和第三主轴后,比较两帧需要进行比较的躯干像素点云数据的第二主轴或第三主轴之间的夹角是否大于夹角阈值。如果夹角大于某阈值,则认为差异度大于阈值。
方法B、方法A的PCA分析过程需要先计算协方差矩阵,然后求协方差矩阵特征值,求矩阵特征值过程计算量较大,会影响进行点云数据选取和拼接的计算速度。由此,提出简化的差异度计算方法。在方法B中,通过比较两帧深度图像对应的躯干像素点云数据之间的相对重心变化,根据是否满足如下条件判断所述差异度是否大于差异阈值:
当Covprev[0][0]>k1·Covprev[2][2]时,|zprev-zk|>thresh1
当Covprev[0][0]<k2·Covprev[2][2]时,|xprev-xk|>thresh2
其它情况时,|zprev-zk|+|xprev-xk|>thresh3
其中,Covprev为上一个被确定为需要进行拼接的深度图像的协方差矩阵,(xprev,yprev,zprev)为上一个被确定为需要进行拼接的深度图像的重心坐标,(xk,yk,zk)为深度图像序列中当前待选深度图像的重心坐标,k1和k2为预定权值,k2<k1,thresh1、thresh2、thresh3为预定的第一重心变化阈值,第二重心变化阈值和第三重心变化阈值。在本发明的一个优选实施例中,k1=4、k2=2、thresh1=13mm、thresh2=10mm、thresh3=20mm。
同时,在实时测量中,需要确定所述深度图像的躯干像素点云数据序列的起始帧和结束帧。在本发明的实施例中,起始帧的确定可采用手动设定的方式,也可以采用自动设定的方式,可以优选人正对深度图像设备时开始。
以人正对深度图像设备时开始为例,在人体转一周过程中,要经过正面-侧面-背面-侧面-正面一个过程。在该过程中,对躯干像素点云数据进行PCA分析,则点云数据第二个主轴的方向变化、躯干点云数据与开始帧的躯干点云数据相似度变化会呈现一定的规律,通过判断该规律,即可确定结束帧。
以躯干点云与开始帧的躯干点云相似度为例,在该过程中,躯干点云与开始帧的躯干点云相似度变化过程为从1减少至第一相似度值,从第一相似度值增加到第二相似度值,从第二相似度值减少至第三相似度值,从第三相似度值增加至接近1,这里第一相似度值为人体第一侧面与人体正面的相似度,第二相似度值为人体背面与正面的相似度,第三相似度值为人体第二侧面与人体正面的相似度。当某一帧躯干像素点云数据与第一帧躯干像素点云数据的相似度接近于1,并且经历了从1减少至第一相似度值,从第一相似度值增加到第二相似度值,从第二相似度值减少至第三相似度值,从第三相似度值增加至接近1的过程,则可确定该帧为结束帧。
在步骤400进行二值化后得到的图像如图4所示。步骤500基于该剖面图像进行人体躯干围度的计算。
图5是本发明实施例的基于计算机视觉的人体躯干围度测量装置的框图。如图5所示,所述装置包括:
躯干点云获取模块,用于获取立体躯干点云数据,所述立体躯干点云数据包括躯干表面的所有采样点的空间坐标;
剖面图像计算模块,用于选取围度测量位置的采样点进行投影构建躯干剖面图像;
内轮廓计算模块,用于对剖面图像进行二值化,对二值化后的剖面图像进行连通域分析,求取最大的内轮廓,得到内轮廓按逆时针顺序排列的像素序列;
剖面坐标计算模块,用于根据投影到所述躯干剖面图像中的构成躯干剖面的点集的最大、最小剖面坐标以及所述躯干剖面图像的分辨率计算所述像素序列的每个像素对应的剖面坐标;
躯干围度计算模块,用于计算所述像素序列中所有相邻像素间空间实际距离,对所述相邻像素间空间实际距离求和获得人体躯干围度测量值。
其中,所述躯干点云获取模块包括:
深度图像序列获取单元,用于通过深度摄像机围绕人体躯干相对移动拍摄一周获取包括人体躯干的深度图像序列;
图像分割单元,用于对所述深度图像序列的每一帧深度图像分别进行人体姿态识别,分割获得每一帧深度图像的躯干像素点云数据形成躯干像素点云数据序列;
立体数据拼接单元,用于对需要进行拼接的多个帧的深度图像进行拼接,获得包括人体躯干所有表面信息的躯干立体点云数据。
其中,所述剖面图像计算模块包括:
剖面构建模块,用于计算立体躯干点云数据的主轴,并进行空间坐标变换,将立体躯干点云数据的空间坐标转换到以所述主轴为坐标轴的新坐标系中,在需要测量围度的主轴位置按预定条件提取立体躯干点云数据作为构成躯干剖面的点集;
剖面图像构建模块,用于将所述构成躯干剖面的点集沿与躯干围度垂直的主轴按预定分辨率进行平面图像投影,根据落入每个像素面积内的点的数量确定对应像素的灰度值,构建躯干剖面图像。
本发明通过人体躯干三维数据建模获取人体躯干立体点云数据,通过投影获得躯干剖面图像,并根据剖面图像计算人体躯干围度,获得的测量值精度高,便于测量人员批量处理数据,大大提高了人体体型数据测量的自动化程度和效率。
显然,本领域技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个计算装置上,或者分布在多个计算装置所组成的网络上,可选地,他们可以用计算机装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件的结合。
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。