基于DSP的人脸检测
一、目标
利用VisualDSP++ 5.0、仿真器、EBF-561实验平台实现该算法,了解人脸检测常用方法,掌握模板匹配算法实现人脸检测的基本原理,并在 DSP 实验板上实现一般环境图像中单个正面人脸的检测,并在实验板的 LCD 显示屏进行显示。
二、实现方案
实验原理
本实验所探讨的是一般环境图像中单个正面端正人脸的检测问题。这种条件下的人脸检测的方法主要有模板匹配方法、可变形模板方法等。概括的说,基于模板匹配的方法是在图形灰度上直接比较目标模板和候选图像区域之间的相似性,而基于特征匹配的方法是比较从图像中抽取的一定特征的相似性。
本实验主要用到两种模板:双眼模板和不同长宽比的模板。在检测时首先使用双眼模板进行粗筛选,然后使用不同长宽比的人脸模板确定出区域的位置和范围,接着通过确定出来的位置和匹配模板的相似度程度来确定是否是人脸。
模板生成,我们在人脸检测中使用了6个模板:一个用于初筛选的双眼模板,五个用于检测不同长宽比的人脸模板。采用多个人脸模板是为了适应不同人脸部的不同长宽比。模板是通过对多个样本平均构造出来的。首先在选取的样本图像上用手工画出人脸的区域作为人脸样本。由于各个样本的尺度大小和灰度分布不同,因此首先对他们进行尺度和灰度标准化,然后将所用样本取灰度平均值并压缩到需要的尺度作为原始模板。拷贝原始模板的眼睛部分,进行灰度分布标准化后作为双眼模板,对原始模板分别按照1:0.9、1:1、1:1.、1:2、1:1.3的宽长比变形,进行灰度分布标准化后作为人脸模板。
在模板生成中最主要的工作是图像的尺度变换和灰度分布标准化,尺度变换主要是基于线性插值的重采样方法。将图像看成一个二维矩阵 D[W][H],其中 W 和 H 分别表示图像的宽和高。
(1)图像的灰度值
(2)灰度分布的方差
(3)灰度均衡化
对于输入的每个样本图像,为了将其灰度平均值和方差变换到事先设定的灰度平均值和方差,从而将样本中每个像素点的灰度值进行如下变换:
假设人脸模板的灰度矩阵为 T[M][N],输入图像区域的灰度矩阵为 R[M][N],灰度均值,那么他们之间的相关系数 r(T,R)和对应像素灰度值的平均偏差d(T,R)分别为:
r(T,R)越大表示模板与输入图像区域的匹配程度越高;而d(T,R)正相反。将他们综合起来作为匹配程度的度量:
其中权重系数我们取经验值35.0。
实验步骤
(1)初始化最大匹配度,设当前图像
(2)设当前扫描点(x,y)为图像起始点(0,0)
(3)检测扫描区域是否为双眼区,(即计算区域灰度均方值是否大于20)若不是则转(6)
(4)检测相应区域是否为人脸(即计算R与模板T的相关系数是否大于0.3),是则求出当前区域与人脸的匹配度D,否则转(6)
(5)若 D>Dmax,记录当前区域的位置和大小,并令 Dmax=D
(6)若 x+24<W,x=x+1,转(3)
(7)若 y+31<H,x=0,y=y+1 转(3)
三、核心代码
1 | /*********计算相关系数********/ |