为此,本文在Hsu R L方法的基础上,提出了一种基于单幅图像自身肤色分布特征的新的检测算法。该新算法即考虑到肤色在某个特定的肤色空间中所具有的统计特征,同时又考虑到光线变化的影响。
本肤色检测算法主要是针对单幅图像中人脸的肤色分布来进行区域分割,同时结合肤色信息,自动选取类似的区域作为肤色区域,从而克服了传统通过大量肤色样本统计得到的肤色模型来进行肤色检测容易导致的过检测问题。该检测算法的流程图如图3所示。
3 新算法的实现
新算法的具体实现步骤可以分为颜色空间变换。
3.1 颜色空间变换
新算法首先将图像的色度空间由RGB转换为YCbCr空间,并按式(1)~(4)进行非线性变换。这是因为非线性变换后的颜色空间Cb′Cr′受到亮度的影响较小,能更好地利用色彩空间的颜色信息进行建模。
3.2 CbCr二维直方图
统计每个像素的Cb′Cr′值并取其对数值,以形成一个Cb′Cr′值的二维直方图。通过实验发现,由于正常光照下的某个特定人脸的绝大部分区域的颜色都具有很强的一致性,其肤色点Cb′Cr′分量的二维直方图通常都呈一定的峰状。
3.3 标记及直方图分割
提取二维直方图中的峰值时,为便于消除干扰,应引入一个参数K:
其中,S表示从峰值到邻近峰谷的最短距离,H表示峰值的高,图4所示是进行标记的示意图。
做标记时,首先检测二维直方图中的各个峰值区域,并将参数K大于阈值的峰值作为标记(阈值为10%),以便于下一步的肤色检测。
本文采用了一种水平面下移的方法来对二维直方图区域进行分割,即将二维直方图看成位于水平面以下的峰谷,然后调整水平面,使之逐步下移,这样,各个山峰便依次显露出来。通常可先设定水平面高度H,然后下调水平面d,对高于水平面(H-d)的峰值点分配一个唯一的标记,再接着调整水平面的高度,检测位于H-2d与H-d之间的像素值。若该像素是一个新的峰值点,则分配新的标记;否则,在其周围寻找距离最近且已经标记过的像素,并给它分配相同的标记。直到给定高度上所有像素都分配到一个标记为止。图5所示是水平面下移算法流程图。
3.4 肤色分割