邓中民, 王健恺, 靳晓凝, 魏宛彤, 于东洋, 柯 薇
(1. 武汉纺织大学 省部共建纺织新材料与先进加工技术国家重点实验室, 湖北 武汉 430200;2. 武汉纺织大学 服装学院, 湖北 武汉 430200)
传统的手工测量人体尺寸的方法费时费力[1],三维的物理测量方法如扫描法,光、机、电法又成本过高[2],测量繁琐。随着计算机技术的不断发展,出现了许多基于二维图像的非接触式人体尺寸检测方法。在二维图像测量人体尺寸的方法中,人体特征点的选取影响着最终的检测结果,因而特征点选取的准确性是十分重要的。
肩部特征点是人体特征点的重要组成部分之一,对于服装的廓形选取具有较大影响。人体肩部存在肩高点和肩峰点2个生理特征点,肩高点为肩部与颈部连接处的点,肩峰点为肩胛骨的肩峰外侧上最突出的点。本文主要研究肩峰点(下文以肩部特征点代指)的检测以及肩宽的测量方法。目前对于肩部特征点的检测方法主要有基于人体比例的特征点检测方法[3]、基于腋下特征点平移近似替代方法[4-5]、基于肩部形状估计的检测方法[6-7]、基于人体轮廓编码的特征点检测方法[8]。前面3种检测方法通过划分人体的各个区域,在肩部区域中粗略检测肩部关键点,这些方法速度快,但适应性差,容易受体型影响导致肩部特征点偏移,从而产生较大的误差。基于人体轮廓编码的特征点检测方法则是将肩部轮廓转化为一串链码,并按指定的链码规则提取特征点,该方法提取的肩部特征点具有良好的独立性,但特征点过多,容易造成误检或漏检[9]。
本文基于人体轮廓编码的思想提出了一种改进的肩部特征点检测算法,通过人物在图像中的大小确定特征链码串长度,在以人体比例划分出的肩部区域中,由上至下动态搜索链码规则的特征链码串,并在符合链码规则的特征链码串中根据特征码值规则进行筛选,得到最终的肩部特征点。本文方法在快速和具有良好独立性的基础上,极大地减少了误检和漏检的情况,提高了特征点检测的准确性。
本文提出的肩部特征点检测方法流程如下:
图像采集→弱化阴影→分离背景→阈值分割→肩宽计算→特征点检测→轮廓提取→形态学运算。
图像的选取决定了后续的检测结果,为获得完整的人体轮廓,图像的采集需要在一定的环境条件下进行,具体选择条件如下:
1)白色墙面为背景,被拍者身穿与背景色差较明显的衣服,且被拍摄者距离背景墙一定距离以减弱阴影对图像的影响;
2)拍照时,被拍者两脚与肩同宽,双手张开,与身体形成一定的夹角。
1.2.1 图像阴影的弱化
获取图像后,为减小阴影对图像处理造成的影响[10],将图像转化到hsv空间,通过高斯滤波对图像明度进行平滑调整,进一步减弱光照不匀带来的影响,效果如图1所示。
图1 高斯滤波平滑处理前后效果对比图Fig. 1 Comparison diagram of effects before (a) and after (b) Gaussian filter smoothing
1.2.2 人物背景分离
在去除光照不匀带来的影响后,将图像进行R、G、B单通道提取。三通道图像中某种颜色在某个通道上显示越亮,代表该颜色在该通道颜色分量越重。由于背景为白色,因而选取B通道提取图像为目标图像,在该通道下,浅色衣服和皮肤由于颜色分量较小而呈深色,虽然深色衣服会变得更亮,但人物整体与背景的色差仍比较明显(见图2)。实验结果表明,图像提取能够对人的皮肤和背景进行有效分离,从而达到后续操作图像分割的最佳分割效果。
图2 单通道提取效果图Fig. 2 Single channel extraction rendering. (a) Treatment of uneven illumination; (b) R channel extraction; (c) G channel extraction; (d) B channel extraction
图3为阈值分割效果图。可看出,没有进行单通道提取时,皮肤因光线照射使得与背景墙的色差不明显,导致分割得到的结果存在较大误差,而B通道提取后的图片,人物与背景的色差明显,得到的分割效果较好。
图3 阈值分割效果图Fig. 3 Threshold segmentation rendering. (a) Original drawing; (b) Direct segmentation; (c) Segmentation by B channel extraction
1.2.3 轮廓提取
分割后的图像经过形态学运算、图像填充、最大面积图像提取和边缘提取操作后,得到最终的人体轮廓图(见图4)。
图4 人体轮廓图Fig. 4 Outline of human body
在得到人体轮廓图中,仍会存在一定数量的像素角(某个白色像素的横向和纵向都存在与之相邻的白色像素点,且3个像素点组成了1个白色像素角),如图5所示。而像素角的存在会影响链码遍历操作,使得遍历的特征链码串中增加冗余的码值,从而使特征不明显。为解决这个问题,对图像进行细化操作,并对八链码的方向进行了优先级设置(见图6)。
图5 像素角Fig. 5 Pixel angle
图6 遍历优先级设置Fig. 6 Traversal priority setting
对得到的人体轮廓图进行八链码编码,对原有的人体轮廓编码的人体关键点检测方法进行改进,使用改进的链码检测算法,对肩部特征点进行搜索。改进的链码检测算法如下:
首先采取人体头身比例定位的方法粗略定位头身分界点A(x,y),并从该点逐步向下遍历,创建特征链码串M用于存储遍历得到的链码。通过测试得知,所取得的特征链码串长度i与人像大小有关。
i=Iwαx+Ihαy
式中:Iw、Ih为人物外接矩形的长和宽;αx、αy为横向和纵向的比例因子。
初始的特征链码串为
M(m1,m2,…,mi)=0
在遍历像素点时,引入偏移量Δxn和Δyn来记录当前像素点(从初始点遍历n次得到,且n
设符合特征的码值集合为Q1,不符合特征的码值集合为Q2,当前(从初始点遍历n次得到,且n
当搜索到的特征链码串中每个链码都属于Q1时,停止搜索,并对特征链码串进行遍历,找到链码串中有快速下降趋势特征的第1个特征链码,且将初始点移至具有该特征链码的第1个点。设该链码为特征链码串中的第n个,则有:
执行完该算法后,得到选取点(x,y),则点(x,y)为所找到的单边肩部特征点,同理可得另一边肩部特征点(x′,y′)。
确定肩部特征点后,肩宽的定义有2种:线段长度的计算和两点之间的距离计算,本文采用两点之间的距离计算肩宽为
由上述算法检测到的肩部特征点效果图如图7所示。且在实验过程中,还可通过人物的侧面照得到人物身高数据,以辅助验证人物肩宽数据的可靠性。在拍摄正面人体图像的同时,对同一位置进行侧面人体图像的拍摄(脚后跟点在同一位置),进而检测出被拍摄者的身高。本文对100名测试者(50男/50女)拍摄样本图片并进行肩部关键点提取和肩宽计算,并随机抽取10条实验结果(见表1)。
表1 肩部特征点检测Tab. 1 Shoulder feature point detection
图7 肩部特征点检测效果图Fig. 7 Shoulder feature point detection rendering
从图7和表1可看出,本文改进的肩部特征点检测算法最大误差在3%左右,考虑到被测者穿着服装等影响,该误差在合理范围内,即表明本文改进算法能够很好地检测到人体的肩部特征点,且在检测速度快的基础上,又能很好保证检测结果的准确性,做到不误检、不漏检。
本文通过对被拍摄者的拍摄姿势进行调整、高斯滤波平滑去除光照不匀影响、单通道提取、形态学运算和轮廓提取等一系列操作提取出完整的人体轮廓,并提出了一种基于八链码改进的肩部特征点检测算法,通过判断部位特征结合下降趋势的判断方法,提取了人体肩部特征点,对人体肩宽进行了计算。在实验中,对100人进行测试,在误差允许的范围内准确检测到了人体肩部特征点,表明本文方法具有良好的鲁棒性且检测数据准确度高,能适用于人体围度的计算。随着信息技术的发展,线上购物的形式越来越受到人们的欢迎,但是对于服装尺码没有推荐的标准,本文提出的肩部测量方法,可通过照片测量人体肩部关键数据,为上衣的个性化定制提供准确参考,提高消费者的网上购物信心,为服装销售提供技术支持。