Viola-Jones人脸检测算法由剑桥大学的Paul Viola和Michael Jones于2001年最早提出,是最为成功、并且能满足实时要求的可实用人脸检测算法。Viola-Jones人脸检测算法使用Haar特征值进行目标检测:通过Adaboost算法生成级联分类器,直接对图像的一小块区域进行特征匹配,从而判断该区域内是否有人脸存在。该算法包括训练和检测两部分:训练部分使用Adaboost算法从预先收集的正负样本中提取特征值进行计算,最终生成一个级联分类器。检测部分使用级联分类器,通过检测窗口的移动和缩放,对图像上的人脸进行检测。由于训练部分可脱机执行,对实时要求并不高。因此,本书只讨论算法的检测部分在GPU上的实现和优化。
如图7-1所示,Viola-Jones使用Haar特征值计算特征。Haar特征值共使用了三种类型四种形式的特征模板,每种特征模板内包含黑色和白色两种矩形,该模板的特征值定义为白色矩形像素和减去黑色矩形像素和。
图7-1所示的特征模板称为“特征原型”,“特征原型”在图像窗口中平移伸缩而得到的特征称为“矩形特征”,“矩形特征”的值称为“特征值”。在检测过程中,特征模板可以以任意尺寸放置在图像窗口上的任意位置。从而形成各种形态,每一种形态称为一个特征。这样,通过改变特征模板大小和在图像中的位置,可在图像窗口中穷举出海量特征。
图7-1 Haar特征模板
图7-2显示了人脸检测中的haar特征值在样本窗口中的位置。对于一个24×24的图像样本而言,矩阵特征的数目可达160000,这是非常庞大的计算量。而且随着图像尺寸的不断增大,特征数目也会快速增长,这就对计算能力提出了严峻挑战。同时如果每次Haar特征值的计算,都要统计矩形中所有像素的和,庞大的计算量无疑会降低检测的速度。为此,Viola与Jones引入了积分图作为输入图像的一种中间表达形式。在完成图像的积分图运算后,通过图像积分图来完成Haar特征值的计算。因此,积分图生成算法的性能对于人脸检测算法的性能也至关重要。然而,这超出了本书的讨论范围,关于积分图生成算法的GPU移植,已有大量的研究工作,并且已经非常成熟。(www.daowen.com)
图7-2 人脸检测中的haar特征
图7-3显示了Viola-Jones人脸检测算法的主要流程,Viola-Jones人脸检测算法通过定义检测窗口遍历整幅图像,使用Adaboost方法构建的级联分类器检测窗口中的人脸。值得注意的是,通过使用级联分类器可明显加快检测速度。检测流程具体如下:首先,为了检测出图像中包含的不同大小的所有人脸,需要按照一定大小的缩放因子缩放图像;其次,使用级联分类器对检测窗口进行检测:将检测窗口交给第一级分类器,如果检测窗口检测为未包含人脸,则分类器将此检测窗口丢弃并停止检测,如果当前探测窗口被判为疑似包含人脸,则进入下一级分类器继续检测。最后,只有通过所有分类器检测的窗口才被判定为包含人脸。在级联分类器中,分类器的复杂度是逐层增加的,层数越深,检测要求越高,与之相对应的计算量也越来越大。
图7-3 Viola-Jones人脸检测算法
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。