发明内容
本发明的目的是提供一种脸型轮廓的检测与分类方法,以克服现有技术存在的无法检测得到准确的脸型轮廓,因此无法真正将这类技术应用于进行脸型分类的问题。
为克服现有技术存在的问题,本发明提供的技术方案是:
一种脸型轮廓的检测与分类方法,包括以下步骤:
步骤(一):人脸定位
采用现有的检测方法检测出任意图像中一幅或多幅人脸的位置,并给出脸部的矩形区域ABCD,其中对角顶点的坐标为A(Xa,Ya),C(Xc,Yc),中心点O的坐标O((Xa+Xc)/2,(Ya+Yc)/2);
步骤(二):人脸轮廓检测
首先设定脸型轮廓的基本模型为一个由若干个点组成矢量封闭对称曲线Lm,其坐标序列为(xi,yi),i=1,2,..,M;将常见七种脸型中的蛋形脸作为基本模型。
令(xi,yi)坐标的高度yi等间隔变化,这样仅需确定各点的横坐标xi就可以确定脸型轮廓。定义该轮廓中心轴的横坐标为0,并以脸宽作归一化,即设脸宽为1,脸高随比例随后确定。
将矢量曲线Lm的中心与脸部中心点O重合,以脸部矩形区域ABCD的大小为基准,以O为参考点,对Lm作矢量伸缩,使得Lm的上下左右顶点K1,K2,K3,K4分别切上脸部范围ABCD的各个边沿,将此时的各个曲线坐标作为脸型轮廓的初始值L0;在初始轮廓L0的基础上,对脸部的各个部位的细节进行修正,其中包括:额头的高度、下巴的高度、左右脸颊最靠边的横坐标位置,分别叙述如下,
(1)额头的高度确定:额头的顶部一般是较浅的额头皮肤和较深的头发的交接处,即发迹线
修正的步骤是:
(a)在人脸区域矩形ABCD内,取出上1/4区域的中间1/2的部分B1,以阴影来表示,这部分图像中下半部分为额头,上半部分为头发。
(b)确定发迹线的检测准则:将区域B1内各个点处的象素点灰度级Cxy分为N个区间,统计所有象素点的灰度级,寻找数目最小的象素点区间,以此区间的中值作为发迹线象素的灰度级门限GT。
(c)在区域B1中,自下向上,统计所取图像中每行各个像素的灰度级高于门限GT的点的数目,当某一行中,高于门限GT的像素点的数目与该行像素点的总数目的比例高于1/7时,确定该行所处的垂直位置就是发迹线,即额头的顶端。
(d)根据额头顶端的垂直位置,伸缩调整L0,使其上顶点K1与该垂直位置重合,修正后的轮廓曲线保存在L1中。
如果由于照片中人脸图像的头发将发迹线全部遮盖根本找不到,将不满足上述的(c)的条件,这时就维持初始值L0不变;
(2)下巴高度的确定:下巴的垂直位置是下巴的浅色区域(光照较强)与颈部的深色(光照较弱)的交接处,判断步骤是:
(a)在人脸区域矩形ABCD内,纵向提取面部中间1/3的区域,自下向上取1/10的区域B2。
(b)对区域B2中的每一行的像素灰度级求和,和值最小的那一行对应的就是下巴的高度位置。
(c)根据下巴的垂直位置,伸缩调整L1,修正后的轮廓曲线保存在L2中。
(3)左右脸颊的确定
(a)除掉人脸区域矩形ABCD内纵向中间1/3的部分,两个区域为B31和B32。
(b)对区域为B31和B32的各列像素的灰度级进行求和;
(c)搜索左侧区域B31的左边的W/15宽度的区域和右侧区域B32的右边的W/15宽度的区域内各列像素灰度级之和的最小值,得到左右两侧脸颊的横坐标位置。
(d)根据脸颊的水平位置,水平伸缩调整L2,修正后的轮廓曲线保存在L3中。
步骤(三):脸型分类
获得脸型轮廓曲线后,可以利用现有的方法进行分类。
上述步骤(二)中,还可以包括(4)腮部形状的修订,其具体步骤是:
(a)单独取出人脸区域ABCD的下半部分来提取人脸腮部的图像;
(b)利用Canny方法进行边缘检测,在腮部获得一些不连续的轮廓边缘;
(c)找出腮部诸多轮廓边缘线条中长度最长的线条l,保存这根线条的所有点的坐标(xj,yj),j=1,2,...,P;
(d)采用下面函数拟合出蛋形脸模型的腮部曲线数据,
xi=0.5sinαi+k(sinβi)0.4
yi=0.5·i/N
其中k=1,i=0,1,2,...,N,N=M/4-1,由此获得一组α和β。然后,在该函数中仅需调节k值即可改变腮部曲线曲率,形成各型腮部形状;
(e)利用上述的函数,使k值从-0.1向0.1变化,寻找与(c)中找到的线条l最吻合的曲线,使得在各个高度上,该曲线与线条l的水平距离均方差最小,该线条即为腮部最佳边缘曲线;
(f)根据最佳边缘曲线,替换L3中的对应坐标,修正后的轮廓曲线保存在L中。
上述步骤(三)中,所采用的分类方法具体是:根据人脸轮廓结果计算特征参数,然后将特征参数与分类门限进行比较,最终获得脸型类别最具代表性的特征参数:脸高与脸宽之比H2W_RATIO,下巴宽与脸宽之比XB_RATIO,额头宽与脸宽之比ET_RATIO,两腮宽与脸宽之比LS_RATIO,下巴曲率YJ_RATIO2,利用这些特征值进行统计,可获得具体的分类门限参数,在下面的表中给出一个简单的脸型分类的判断条件
脸型名称 |
条件(与的关系) |
长形脸 |
H2W_RATIO>=1.43 |
蛋形脸 |
H2W_RATIO>=1.33H2W_RATIO<1.40 |
圆脸 |
H2W_RATIO<1.30 |
方脸 |
LS_RATIO+ET_RATIO>=1.51ET_RATIO>0.7LS_RATIO>0.76 |
心形脸 |
XB_RATIO<0.48LS_RATIO<=0.69ET_RATIO>=0.75YJ_RATIO2<-0.03 |
洋梨 |
XB_RATIO>=0.55LS_RATIO>=0.80ET_RATIO<=0.67LS_RATIO-ET_RATIO>=0.13LS_RATIO-ET_RATIO>0.25 |
钻形脸 |
XB_RATIO<0.52LS_RATIO<0.75ET_RATIO<0.7LS_RATIO+ET_RATIO<=1.40LS_RATIO+ET_RATIO<1.34 |
当某个脸型不满足任何一个条件组合时,他/她可能介于某两种脸型之间。
上述步骤(一)中,所述脸部区域检测方法是Harr方法
上述步骤(二)中,对称曲线Lm的坐标序列为(xi,yi),i=1,2,...,M,M越大精度越高。
与现有技术相比,本发明的优点是:
本发明提出一种检测任意图像中人脸外型轮廓的方法,该方法首先从图像中定位出人脸的位置,然后确定出一个完整、连续、光滑的脸型轮廓,最后对人脸外型轮廓的类型进行分类。本发明可以为形象设计、美容、美发、服装、首饰、化妆、娱乐等诸多行业提供有效的自动图像处理手段,为各种应用行业提供自动化、客观的技术支持。同时,还可帮助广大群众进行自我脸型判定,根据规律进行自我形象设计。
具体实施方式:
下面将结合附图对本发明做详细地说明。
本发明的目的是要从一幅图像中检测到人脸的位置,得到其脸部外型轮廓,最终给出分类结果。参见图4,实施步骤分为三步,即人脸定位、人脸轮廓检测和脸型分类。
步骤(一):人脸定位,
采用现有的Harr检测方法可有效检测出任意图像中一幅或多幅人脸的位置,并给出脸部的矩形区域顶点的坐标。在后面的叙述中,我们仅以一幅人脸图像为例来解释。当原始图像片中有多于一幅人脸时,该方法可以逐一检测出每幅人脸的位置和范围。
参见图1,定义检测出的人脸区域的四个角的坐标分别为A,B,C,D,其中A的坐标为(Xa,Ya),C的坐标为(Xc,Yc),中心点为O((Xa+Xc)/2,(Ya+Yc)/2)。
步骤(二):人脸轮廓检测,过程参见图5,其中包括在脸部区域的坐标内分别对额头的高度、下巴的高度、左右脸颊最靠边的横坐标位置,腮部形状进行修订后合成最终的脸型轮廓。
当获得脸部区域的坐标后,寻找脸型轮廓的图像处理工作就局限在该区域附近。为了使获得的脸型轮廓是一个光滑、连续、封闭的曲线,我们采用以下方法:
首先设定脸型轮廓的基本模型为由若干个点组成矢量封闭对称曲线Lm,其坐标序列为(xi,yi),i=1,2,..,M,采用图3中蛋形脸作为基本模型,图7给出该脸型及其各个顶点的示意图。
本实施例中给出采用一个左右对称的,由M=72个点构成蛋形脸的轮廓作为基本模型。令(xi,yi)坐标的高度等间隔变化,这样仅需确定各点的横坐标就可以确定脸型轮廓。定义该轮廓中心轴的横坐标为0,并以脸宽作归一化,即脸宽为1,高度随比例来定。下面给出本发明采用的一组轮廓中的一半36个点的坐标如下(左右对称),横坐标的顺序为从下巴到额头:
xi=[0.0000 0.2501 0.3025 0.3549 0.3889 0.4153 0.4346 0.4524 0.4672
0.4759 0.4850 0.4907 0.4938 0.5000 0.4999 0.4996 0.4990 0.4979
0.4958 0.4914 0.4826 0.4776 0.4675 0.4557 0.4447 0.4308 0.4157
0.3939 0.3709 0.3459 0.3168 0.2792 0.2376 0.1834 0.1459 0.0000]
yi=H/35·(i-1),i=1,2,...,36
H=Yc-Ya
W=Xc-Xa
由于我们已知脸部的大致范围ABCD,因此可以将矢量曲线Lm的中心与脸部中心点O重合,以脸部范围大小为基准,以O为参考点,对Lm作矢量伸缩,使得Lm的上下左右顶点K1,K2,K3,K4分别贴上脸部范围ABCD的各个边沿,将此时的各个曲线坐标作为脸型轮廓的初始值L0。
在初始轮廓L0的基础上,需要对脸部的各个部位的细节进行修正,其中包括:额头的高度、下巴的高度、左右脸颊最靠边的横坐标位置,腮部形状等。确定这几项参数的方法可以通过对图像灰度级的分析来获得。我们在通过对大量的照片的观察与统计实验后,获得了一套十分有效的方法,在图8中给出实施步骤流程,根据人脸的定位结果,可以大致获得人脸范围顶点坐标,根据此再精确定位额头高度、下巴高度,左右侧脸颊的水平顶点位置,腮部曲线,最终合成脸型轮廓。具体方法在下面作详细介绍。在这几个参数的确定过程中,原来的初始值L0会根据修订结果进行调整,所得结果将逐渐逼近真实脸型轮廓L。
额头的高度确定
额头的顶部一般是较浅的额头皮肤和较深的头发的交接处,即发迹线。找到发迹线的垂直位置,就可以用来进一步修正脸型轮廓初始值L0最上部顶点的精确位置。
确定额头发迹线的困难之处在于,并不是每张照片都把发迹线清晰地裸漏在外面,有时候是一部分,有时候就几乎看不到。头发的遮挡成为主要困难。为此采取以下方法:
首先,我们已经有初始值L0最上部顶点的位置。如果发迹线根本就找不到,我们就不修改初始值L0。如果有一部分漏出来,那么我们就有可能对发迹线进行检测,修正初始值L0。
判断发迹线的方法是:
(a)如图7所示,在人脸区域矩形ABCD内,取出上1/4区域的中间1/2的区域B1,以阴影来表示,这部分图像中下半部分应该为额头,上半部分应该为头发。
(b)确定发迹线的检测准则。将区域B1内各个点处的象素点灰度级Gxy分为N个区间(例如,N=10)。在这一部分,头发的黑色与额头的黄色所对应的灰度级像素点应当所占比例较高,而发迹线处的灰度级象素点相比占少数。因此,我们统计所有象素点的灰度级,寻找数目最小的象素点区间,以此区间的中值作为发迹线象素的灰度级门限GT。
(c)在区域B1中,自下向上,统计所取图像中每行各个像素的灰度级高于门限GT的点的数目。当某一行中,高于门限GT的像素点的数目与该行像素点的总数目的比例高于1/7时(经验值),认为该行所处的垂直位置就是发迹线,即额头的顶端。
(d)根据额头顶端的垂直位置,伸缩调整L0,修正后的轮廓曲线保存在L1中。
下巴高度的确定
参见图1,下巴的垂直位置是下巴的浅色区域(光照较强)与颈部的深色(光照较弱)的交接处。具体的判断方法是:
(a)参见图7,在脸部区域中,纵向提取面部中间1/3的区域,自下向上取1/10的区域B2。
(b)对区域B2中的每一行的像素灰度级求和,和值最小的那一行对应的就是下巴的高度位置。
(c)根据下巴的垂直位置,伸缩调整L1,修正后的轮廓曲线保存在L2中。
左右脸颊的确定
左右脸颊横坐标位置的确定受到耳朵、头发、光线照射、背景因素的影响,确定起来比较困难。具体的判断方法是:
(a)如图8所示,除掉人脸范围纵向中间三分之一的部分,这样做会把耳朵部分的影响去掉。两个区域为B31和B32。
(b)对区域为B31和B32的各列像素的灰度级进行求和;
(c)根据人脸的形状特点,在绝大部分照片中,搜索左侧区域B31的左边的W/15宽度的区域和右侧区域B32的右边的W/15宽度的区域内各列像素灰度级之和的最小值,就可以得到左右两侧脸颊的横坐标位置。
(d)根据脸颊的水平位置,水平伸缩调整L2,修正后的轮廓曲线保存在L3中。
由于以上一直采用的是一个基本的脸型模型,在此基础上只是简单地进行高低胖瘦的变化,这样做对大部分脸型基本可以满足要求。
但对一些如方脸、心形脸等,就不能很好的逼近。这时我们需要对腮部(整个脸型轮廓下部1/2的曲线)进行重新调整。
腮部形状的修订
具体实施步骤如下:
(a)提取人脸腮部的图像,如图1所示,我们单独取出区域ABCD的下半部分。
(b)利用Canny方法进行边缘检测。这样我们会获得一些断断续续的边缘。如图2中虚线所示的区域,这里面会有一些线条是腮部轮廓的线条,而许多线条则不是。
(c)找出腮部诸多线条中长度最长的线条l,这根线条一般就是人脸轮廓,保存这根线条的所有点的坐标(xj,xj),j=1,2,...,P。
(d)采用下面函数拟合出蛋形脸模型的腮部曲线数据,
xi=0.5sinαi+k(sinβi)0.4
yi=0.5·i/N
其中k=1,i=0,1,2,...,N,N=M/4-1,由此获得一组α和β。然后,在该函数中仅需调节k值即可改变腮部曲线曲率,形成各型腮部形状。例如,当M=72时,我们可以得到
α=[1.5708 1.6297 1.6887 1.7482 1.8083 1.8693 1.9315 1.9952 2.0608
2.1287 2.1997 2.2745 2.3545 2.4414 2.5384 2.6516 2.7969 3.14159]
β=[0.0000 0.0057 0.0201 0.0435 0.0763 0.1188 0.1718 0.2361 0.3131
0.4042 0.5119 0.6390 0.7906 0.9736 1.2002 1.4947 1.9200 3.14159]
腮部曲线是脸型轮廓曲线L的前半部分,左右对称,计算一边即可,共18个点。
(d)利用上述函数,使k值从-0.1向0.1变化,寻找与线条l最吻合的曲线,使得在各个高度上,该曲线与线条l的水平距离均方差最小,该线条即为腮部最佳边缘曲线。
(e)根据最佳边缘曲线,替换L3中的对应坐标,修正后的轮廓曲线保存在L中。
(f)脸型轮廓计算结束。
步骤(三);脸型分类
参见图9。首先根据人脸轮廓结果计算特征参数,然后将特征参数与分类门限进行比较,最终获得脸型类别。
为了区分不同的脸型,确定了以下几个最具代表性的特征参数:脸高与脸宽之比,下巴宽与脸宽之比,额头宽与脸宽之比,两腮宽与脸宽之比,下巴曲率。通过对这些参数单项进行统计,然后进行门限设定与比较,就可以实现对每幅脸型进行分类,分类参数如下:
(a)脸高与脸宽之比H2W_RATIO
(b)下巴宽与脸宽之比XB_RATIO
(c)额头宽与脸宽之比ET_RATIO
(d)两腮宽与脸宽之比LS_RATIO
(e)下巴曲率YJ_RATIO2
利用这些特征值进行统计,可获得具体的分类门限参数,在下面的表中给出一个简单的脸型分类的判断条件。
脸型名称 |
条件(与的关系) |
长形脸 |
H2W_RATIO>=1.43 |
蛋形脸 |
H2W_RATIO>=1.33H2W_RATIO<1.40 |
圆脸 |
H2W_RATIO<1.30 |
方脸 |
LS_RATIO+ET_RATIO>=1.51ET_RATIO>0.7LS_RATIO>0.76 |
心形脸 |
XB_RATIO<0.48LS_RATIO<=0.69ET_RATIO>=0.75YJ_RATIO2<-0.03 |
洋梨 |
XB_RATIO>=0.55LS_RATIO>=0.80 |
|
ET_RATIO<=0.68LS_RATIO-ET_RATIO>=0.13LS_RATIO-ET_RATIO>0.25 |
钻形脸 |
XB_RATIO<0.52LS_RATIO<0.75ET_RATIO<0.7LS_RATIO+ET_RATIO<=1.40LS_RATIO+ET_RATIO<1.34 |
当某个脸型不满足任何一个条件组合时,他/她可能介于某两种脸型之间。这种情况可以根据用户的需求进行处理。
当自动脸型轮廓检测完成后,用户还可以自行作小范围修改,以便达到最佳效果。
以图10中的人脸为例,进一步完整描述本发明的各个步骤。
首先,对图像中的人脸进行定位。Harr检测方法可以利用Intel的开源计算机视觉库OpenCV中的人脸定位函数实现,具体函数名称为cvHaarDetectObjects。利用该函数就可以获得人脸在图像中的位置、范围和数目。有关该函数的使用在C语言中如下描述。
cvHaarDetectObjects(m_plmg,cascade,storage,1.2,2,CV_HAAR_DO_CANNY_PRUNING,cvSize(0,0));
定位结果如图10(a)所示。这时一个矩形的边框,确定了大致的人脸范围,并使得该范围一定将所有人脸部分包含在内;
第二,以脸型位置为依据,采用蛋型脸的模型作为初始轮廓,这时的轮廓偏差比较大,无论大小,还是与真实脸型的贴近程度都不能满足使用要求。
第三,对脸型部分的额头位置进行调整。按照我们提出的方法,额头的位置得到有效的调整,参见图10(b)的额头位置,这时可以看到,额头的位置得到很好的调整,基本与实际位置吻合。
第四,对脸型部分的下巴位置进行调整,参见图10(c),下巴位置得到精确定位后,与真实位置十分贴近。
第五,对脸颊位置进行调整,参见图10(d),这时脸颊的位置已经与真实位置吻合。
第六,对腮部曲线进行计算,参见图10(e),位置与上部基本一致,因为原来的就基本合适了。
第七,进行脸型分类。按照定义,各个特征参数的结果如下:
(a)脸高与脸宽之比H2W_RATIO=1.45
(b)下巴宽与脸宽之比XB_RATIO=0.51
(c)额头宽与脸宽之比ET_RATIO=0.70
(d)两腮宽与脸宽之比LS_RATIO=0.68
(e)下巴曲率YJ_RATIO2=0.01
按照上述判决条件,该脸型为长脸型,与我们目视的结果十分吻和。