人脸识别应用

在之前讲到的人脸测试后,提取出人脸来,并且保存下来,以供训练或识别是用,提取人脸的代码如下:
void GetImageRect(IplImage* orgImage, CvRect rectInImage, IplImage* imgRect,double scale)  
{  
    //从图像orgImage中提取一块(rectInImage)子图像imgRect  
    IplImage *result=imgRect;  
    CvRect size;  
    size.x=rectInImage.x*scale;  
    size.y=rectInImage.y*scale;  
    size.width=rectInImage.width*scale;  
    size.height=rectInImage.height*scale;  
      
    //result=cvCreateImage( size, orgImage->depth, orgImage->nChannels );  
    //从图像中提取子图像  
    cvSetImageROI(orgImage,size);  
    cvCopy(orgImage,result);  
    cvResetImageROI(orgImage);  
}  

人脸预处理

现在你已经得到一张人脸,你可以使用那张人脸图片进行人脸识别。然而,假如你尝试这样简单地从一张普通图片直接进行人脸识别的话,你将会至少损失10%的准确率!

在一个人脸识别系统中,应用多种预处理技术对将要识别的图片进行标准化处理是极其重要的。多数人脸识别算法对光照条件十分敏感,所以假如在暗室训练,在明亮的房间就可能不会被识别出来等等。这个问题可归于“lumination dependent”,并且还有其它很多例子,比如脸部也应当在图片的一个十分固定的位置(比如眼睛位置为相同的像素坐标),固定的大小,旋转角度,头发和装饰,表情(笑,怒等),光照方向(向左或向上等),这就是在进行人脸识别前,使用好的图片预处理过滤器十分重要的原因。你还应该做一些其它事情,比如去除脸部周围的多余像素(如用椭圆遮罩,只显示其内部的人脸区域而不是头发或图片背景,因为他们的变化多于脸部区域)。

为简单起见,我展示给你的人脸识别系统是使用灰度图像的特征脸方法。所以我将向你说明怎样简单地把彩色图像转化为灰度图像,并且之后简单地使用直方图均衡化(Histogram Equalization)作为一种自动的标准化脸部图像亮度和对比度的方法。为了得到更好的结果,你可以使用彩色人脸识别(color face recognition,ideally with color histogram fitting in HSV or another color space instead of RGB),或者使用更多的预处理,比如边缘增强(edge enhancement),轮廓检测(contour detection),手势检测(motion detection),等等。

你可能感兴趣的:(人脸识别应用)