人脸识别工程主要流程

来源:互联网 发布:wps数据透视表怎么做 编辑:程序博客网 时间:2024/06/04 19:57

功能:
首先将人脸入库,每个人采集10张人脸图像
然后可以检测某个人脸是否属于这个人脸库中的某个人

一.利用opencv打开摄像头并捕捉图像

二.图像预处理
1.图像灰度化
ptr[j*ColorImage->width+x]=
(char)( 0.072169*ColorImage->imageData[3*(j*ColorImage->width+x)]
+0.715160*ColorImage->imageData[3*(j*ColorImage->width+x)+1]
+0.212671*ColorImage->imageData[3*(j*ColorImage->width+x)+2]); //对RGB三个值加权平均
2.滤波去噪
它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值,
中值滤波常用来保护边缘信息,是经典的平滑噪声的方法
3.直方图均衡化(增强图像的对比度,用一个变换函数)
中心思想:将直方图从比较集中的灰度区间变换成全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,
重新分配图像像素值,使一定灰度范围内的像素数量大致相同。
解决曝光不足或者曝光过度问题,增强整体对比度。
三.人脸检测
调用opencv中的已经训练好的分类器(haar特征)
原理可以参考:
http://www.cnblogs.com/ello/archive/2012/04/28/2475419.html
四.人脸识别
采用PCA算法实现,其中矩阵的运算用的是Armadillo(高性能线性代数c++函数库)

PCA:
1.将所有样本图像读入M*N的矩阵中,M表示图像的个数,N表示图像的像素个数
2.求矩阵的每列的平均值并将原矩阵减去这个平均值得到差值矩阵
3.对差值矩阵求协方差矩阵N*N(协方差矩阵表示不同随机变量之间的关系,图像中即任意两个像素之间的关系)再求特征值和特征向量,
根据精度要求选择不同数量的特征向量p,得到特征脸N*P
4.将训练集进行降维M*N * N*P ,得到降维矩阵M*P (P远远小于N)
5.通过降维矩阵得到每个样例的特征脸(求平均值)
6.对测试图像也进行降维处理,与每个样例的特征脸进行欧氏距离比较,取最小值

原创粉丝点击