环境:Windows XP+MATLAB 2010b
基本思路:
1)将基于彩色空间的RGB模型转换为YCbCr模型(考虑到人脸的生理特征,只采取了Cr分量作为辅助)
2)阈值分割,根据多次实验发现,正常黄种人的Cr分量大约在140~·160之间
3)滤波,本实验采用性能较好的中值滤波
4)特征区域提取,利用matlab的bwlabel函数
5)对标记的特征区域利用高宽度之比和面积两个指数来进一步简化特征区域
具体实验代码及原理讲解
1)rgb->ycbcr
%公式 Y = 0.2990*R + 0.5780*G + 0.1140*B + 0 %公式 Cr = 0.5000*R - 0.4187*G - 0.0813*B + 128 %公式 Cb = -0.1687*R - 0.3313*G + 0.5000*B + 128
(参见http://en.wikipedia.org/wiki/YCbCr)
本实验直接采用mtalab自带函数rgb2ycbcr()转换就OK了。
2)阈值分割
3)中值滤波器(本实验采用的是5x5的子模板)
4)利用bwlabel进行特征区域提取
关于matlab函数bwlabel:[L, num] = bwlabel(BW, n);
根据领域的链接性质,将整个区域分为num个子区域,L为一矩阵,其中每个子区域在此矩阵中的值为子区域的序号。值得注意的是,序号为0的情况(我理解为背景,直接弃之不用)。n指的是领域性质,4邻域or8邻域。
举个例子,
BW =