关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 基于OpenCV的人脸识别设计方案

基于OpenCV的人脸识别设计方案

作者:时间:2012-07-17来源:网络收藏

3.4.2 身份阶段

新的图片时,具体的操作方法流程如下:

(1) 前面得到的M 个特征脸,将新采集的图片投影到各个特征脸,计算得到一个权重集合(权重向量)。

(2) 判断新图片是否是一幅图像,即通过判断图像是否足够靠近空间。

(3) 如果是人脸图像,则根据前面计算的权重集合(权重向量),利用权重模式将这个人脸分类划归到初始时计算得到的各个个体或者是成为一个新 的个体照片。简单而言,就是计算新权重到原来各个个体权重的距离,选择最近的,认为是成这个个体;如果最近的距离超出阈值,则认为是一个新的个体。

(4) 更新特征脸或者是权重模式。

(5) 如果一个未知的人脸,出现了很多次,也就意味着,对这个人脸没有记录,那么计算它的特征权重(向量),然后将其添加到已知人脸中[6]。

实现调用cvRead《datatype》()加载训练结果XML 文件,调cvEigenDecomposite()将采集图片映射至PCA 子空间,利用最近距离匹配方法SquaredEuclidean Distance,计算要识别图片同每一个训练结果的距离,找出距离最近的即可。

3.5 脸部表情识别

脸部运动跟踪利用了Camshift 算法,该算法利用目标的颜色直方图模型将图像转换为颜色概率分布图,初始化一个搜索窗的大小和位置,并根据上一帧得到的结果自适应调整搜索窗口的位置和大小, 从而定位出当前图像中目标的中心位置。

Camshift 能有效解决目标变形和遮挡的问题,对系统资源要求不高,时间复杂度低,在简单背景下能够取得良好的跟踪效果。

Camshift 的 实现分以下几步:

(1)调用cvCvtColor()将色彩空间转化到HSI 空间,调用cvSplit()获得其中的H 分量。

(2) 调用cvCreateHist()计算H 分量的直方图,即1D 直方图。

(3) 调用cvCalcBackProject()计算Back Projection.

(4) 调用cvCamShift()输出新的Search Window 的位置和面积。

我们利用光流算法评估了两帧图像的之间的变化,Lucas–Kanade 光流算法是一种两帧差分的光流估计算法。它计算两帧在时间t 到t +δt 之间每个每个像素点位置的移动。是图像信号的泰勒级数,就是对于空间和时间坐标使用偏导数。

首先要用到shi-Tomasi 算法,该算法主要用于提取特征点,即图中哪些是我们感兴趣需要跟踪的点,对应函数为cvGoodFeaturesToTrack(),可以自定义第一帧特征点的数目,函数将输出所找到特征值。接下来是cvCalcOpticalFlowPyrLK 函数, 实现了金字塔中Lucas-Kanade 光流计算的稀疏迭代版本。 它根据给出的前一帧特征点坐标计算当前视频帧上的特征点坐标。输入参数包括跟踪图像的前一帧和当前帧,以及上面函数输出的前一帧图像特征值,自定义的迭代标准,输出所找到的当前帧的特征值点。这些点可以确定面部局部区域的特征 如眼部,鼻子高度与宽度,嘴部两侧与底部的夹角等等,利用与前一帧的特征比较,可得出反应脸部动态变化的参数,这些数据可以与脸部的一些简单表情相关联。下面图4 为跟踪眼睛上下眨动的图像。


图4 跟踪眼部上下眨动图像

4 总结

本文以 图像处理库为核心,以QT 库所提供的界面框架为基础,提出了人脸识别系统,实验证明本具有较好的实用性,可移植性。但仍有许多不足之处,如身份与表情识别部分可以通过引入神经网络或支持向量机SVM 进行分类,可以使识别准确率与识别种类数得到提高,这些也是后续工作中步需要改进的。

c++相关文章:c++教程


cvt相关文章:cvt原理


全息投影相关文章:全息投影原理

上一页 1 2 3 4 下一页

评论


相关推荐

技术专区

关闭