1.一种基于边界跟踪的人体尺寸测量方法,其特征在于,包括以下步骤:
步骤1、人体图像采集过程使用两台照相机,同时拍摄人体正面图像与侧面图像;为保证正侧面图像拍摄的同步性,使用多线程控制标志位的方式保证相机拍照同步;
步骤2、将采集到的图像进行二值化处理,得到人体图像的前景与背景,图像二值化处理后,采用基于优先搜索方向的轮廓跟踪算法获得人体正侧面图像的完整人体轮廓;
步骤3、对部分人体部位进行拟合,定位人体尺寸计算的关键点,最终计算得到人体主要尺寸;
步骤3.1,身高的计算:
人体的身高就是从地面到人的头部顶端的直线距离,地面的位置需要通过人为标定得出,地面的像素坐标在纵向的大小为ground_y;对于人体头部顶端的数据,只要从图片左上角开始,进行逐行逐列的扫描,一直到获取到第一个属于人体的像素为止,这个像素坐标的x值可以作为人体中心的坐标,记为center;该像素坐标的y值记为head_y,表示人体头顶的高度;由此可得人体身高:height=m×(head_y-ground_y) (1)
其中m为标定系数;
步骤3.2,人体肩点的定位:
由人体图像可知,肩部的边界曲线有着曲率较大的特点,根据此特性,首先需要根据人体比例大致确定肩的范围,确定起始点,并采用边界跟踪算法,选取N个像素点分析;然后使用最小二乘法,将这些连续的像素点拟合成一条4次曲线,拟合之后的曲线近似的表示肩部轮廓,并可减少衣服褶皱的干扰;曲线在靠近人体中心的部位的斜率的绝对值较小,而远离人体中心的斜率的绝对值较大;根据斜率的变化规律,基于斜率阈值的肩点确定方法;根据粗精定位的不同过程,以及人体轮廓体型的不同,自适应选取肩点的斜率阈值θ,在远离人体中心的方向上从拟合曲线中选取连续的像素点,并计算该点斜率,当斜率大于θ时,算法终止,终止的点即为肩点;肩点的粗精定位过程如下:第①步粗定位肩点:考虑到人体是垂直于地面站立的,选取θ为1得到粗定位肩点;
第②步精确定位肩点;考虑到人体的肩型不同,对应的斜率θ也不同;从上一步得到的粗定位肩点开始,分别沿顺时针和逆时针各跟踪N/2个轮廓像素点,分别拟合得到肩峰到肩颈部位的一条直线,该直线斜率记为α,以及人体上臂轮廓直线,斜率记为β;即可精确定位肩点斜率阈值为θ=1/2×(α+β),依据此斜率阈值最终确定肩点的位置;
步骤3.3人体颈点定位:
利用已经求得的肩点,定位颈点的位置;
已经通过边界跟踪算法获取了从肩点到颈部方向的边缘点序列,在序列中依次取间隔为n的两个像素,这两个像素在x方向的距离差在肩部附近较大,在颈部附近较小,因此根据两个像素在x方向的距离差的变化来确定颈点位置;根据这种像素位置变化规律,采用间隔像素跟踪算法:取边界上间隔为n的两个像素,靠近肩点的像素记为A1,远离肩点的像素记为B1,当 的值小于一定阈值p的时候, 表示A1点在x方向的位移, 表示B1点在x方向的位移,即可判定A1点为颈点位置,否则A1和B1都同时向靠近颈点的方向移动,保证它们之间的间隔n不变;
步骤3.4,肩宽的计算
采用多段直线来近似弧线的方法来求肩宽,计算由两个肩峰点和两个颈点组成的三个线段的长度的和作为肩宽;设左肩点为LS,右肩点为RS,左颈点为LN,右颈点为RN,函数length(A2,B2)的返回值为A2,B2两点的直线距离;则肩宽shoulder_breath的计算如下:shoulder_breath=m×(length(LS,LN)+length(LN,RN)+length(RN,RS)) (2)步骤3.5颈围的计算当获得颈点的坐标后,可将人体的颈部截面看作圆形,因此,根据两个颈点,可直接求得颈围的大小;则颈围neck的计算如下:neck=π(m×length(LN,RN)/2)2 (3)
步骤3.5,胸围的计算
根据人体正侧面图像,分别求得同一水平位置的人体胸部的正面尺寸front_chest和侧面尺寸side_chest;
胸围的计算公式如下:
bust=m×(front_chest×2.0/3.0+side_chest)×2 (4)其中,bust表示胸围。
2.根据权利要求1所述基于边界跟踪的人体尺寸测量方法,其特征在于:步骤1中使用多线程控制标志位的方式保证相机拍照同步的方法如下:步骤1.1,拍照过程使用了三个线程,分别为主线程、线程一、线程二,线程一与线程二分别控制照相机一与照相机二,主线程的主要任务是保证线程一与线程二同时进行;f0,f1,f2是控制相机拍照的标志位,当不需要拍照时,这三个标志位都为0;
步骤1.2,如果要拍照,只需要按一下拍照按钮,标志位随之发生变化,即可拍照;对于线程一,当满足f0=1且f1=0这个条件时,即控制照相机一拍照,拍照完毕后将f1置1;对于线程二,当满足f0=1且f2=0这个条件时,即控制照相机二拍照,拍照完毕后将f2置1。
步骤1.3,对于主线程,当有按键消息传来的时候,将f0置1,并不断检测f1与f2的值,当满足f1=1且f2=1的条件时,说明两台照相机拍照完毕,恢复标志位,令f0,f1,f2都置0。
3.根据权利要求2所述基于边界跟踪的人体尺寸测量方法,其特征在于:步骤2中采用基于优先搜索方向的轮廓跟踪算法获得人体正侧面图像的完整人体轮廓的方法:步骤2.1,采用阈值分割技术,将正侧面图像二值化,然后采用平滑处理以减小人体图像边缘的锯齿;
步骤2.2,以图像的左下角作为坐标原点建立平面直角坐标系,因此,每个像素的位置在坐标系中表示出来,并且图像的轮廓像素都是两两相邻的;取3个连续的像素点,分别记作A、B、C;B是当前扫描到的像素,A是B的前一个像素点,而C是待求的下一个像素点;三个像素点A,B,C的坐标位置分别记为(xA,yA),(xB,yB),(xC,yC),从A点到B点是有方向的,用向量AB表示该方向,即向量[xB-xA,yB-yA]T,易知向量AB一共有8种情况;
最开始执行的时候,需要确定像素扫描的起始点,为保证该点在轮廓上,需要从图中选取轮廓外部的某一位置,使用一次行扫描或者列扫描,定位到轮廓的某一边缘点即为起始点;此时的向量AB的方向就是使用行扫描或者列扫描的方向;
像素扫描的方向有两种情况,即顺时针扫描和逆时针扫描;当顺时针扫描时,C有7种可能的位置分别表示为C1能的位;逆时针方向扫描的情况类似;对这7种方向位置进行扫描时,是有优先级顺序的其中C1方向搜索的优先级最高,C7方向搜索的优先级最低,因为C7的位置与A的位置相同;根据向量AB的方向,按照搜索方向优先级高低顺序依次进行扫描,搜索到的第一个属于前景的像素点即为待求的下一个轮廓像素点C;
步骤2.3,得到轮廓点C的像素坐标后,进行赋值操作令B->A,C->B,便可得到新的A、B像素点的坐标,进行下一步的循环迭代,以计算出图中所有的轮廓像素坐标。
4.根据权利要求3所述基于边界跟踪的人体尺寸测量方法,其特征在于:步骤2.3中通过控制迭代次数来确定待计算的边缘像素点的个数。
5.根据权利要求4所述基于边界跟踪的人体尺寸测量方法,其特征在于:步骤3.3中间隔n为8,阈值p为3。