基于OpenCV的人脸识别论文_郑天成,徐汇川

基于OpenCV的人脸识别论文_郑天成,徐汇川

贵州大学电气工程学院电气工程及其自动化2013级 贵州 贵阳 550025

摘要:介绍了在OpenCV环境下,利用计算机摄像头捕获捕获图像,将RGB格式的图像转换为YUV格式,得到灰阶图像,利用Surf算法,分析其特征梯度,识别出其中人脸所在区域并将其圈出。

关键词:OpenCV YUV编码 Sift算法 Surf算法 边缘检测

数字识别目前已成为计算机视觉研究领域最活跃的课题之一。而数字识别的基础则是边缘检测。所谓边缘就是是检测图像局部变化显著变化的最基本的运算,是指图像局部亮度变化函数的极值,图像识别中提取图像特征的第一步往往就是边缘检测。

图像边缘有方向和幅值两个特征,通常沿边缘走向的像素灰度变化平缓,垂直边缘走向的像素灰度变化剧烈,根据灰度变化的特点,可分为阶跃型,房顶型,凸缘型三种,这些变化对应图像中的不同景物【1】。图像梯度最重要的性质是:梯度方向在图像灰度最大变化率上,他恰好可以反映图像边缘上的灰度变换【2】。

一.FUV编码

在图像处理中最常用的的是YUV编码格式而非传统的RGB格式,传统的RGB编码通过对三原色即红(R)、绿(G)、蓝(B)三种颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,但是在YUV编码中,红绿蓝三个参数分别被代表明亮度,也就是灰阶值的Y和代表色度的UV替代,UV的作用是描述图像的色彩和饱和度,用于表示特定像素的颜色【3】。

YUV格式可以直接有RGB格式直接转码而来,但在实际处理中,为了提高运算速度,简化运算,往往用以下如下近似公式 :

在YUV编码中,通常采用的三种编码方式分别为YUV 4:4:4、YUV 4:2:2、YUV 4:2:0,而三种方式的区别在于UV采样是否被压缩减少,YUV 4:4:4表示每一个像素点均采集YUV三者的值,即每一个点的色度值(UV)和亮度值(Y)都被采集,这种采样方式和24bpp的RGB格式相同;而YUV 4:2:2则表示两个点共用一个UV值,同时这两个点各自拥有表征自己亮度的Y值;而YUV 4:2:0 则是压缩率最高的一种采样方式,它并不代表着少采一种分量,而是指跨行采集,比如第一行四个点都采集Y分量,然后两个点共用一个U分量,不采集V分量,第二行与第一行类似但是每两个点公用一个V分量而不采集U分量,这使得每一个像素占用的空间被压缩到了6bits或10bits。

YUV编码相较于RGB编码的优点在于:传输YUV编码所需要的频宽极少,因为YUV编码不需要像RGB编码一样必须要有三个独立的视频信号同时传输,而且,在YUV格式中,即便只有单独的Y分量输出,依然可以得到得到一幅灰度级别的图像,即黑白图像,相较于RGB编码,YUV编码所需要处理的数据相对较少,YUV格式在计算机图像处理问题中的到广泛应用还有很重要的一个原因便是其在在边缘检测算法过程中,可以避免格式转换所耗费的计算量。

二.SURF算法

Surf算法是对Sift算法的一种改进,而Sift算法是在由 David Lowe在1999年所发表,2004年完善总结。其应用领域包含物体辨识、机器人地图感知与导航、影像缝合、3D手势辨识、影像追踪、模型建立和动作比对【4】。Sift算法最大的优点便是其具有尺度不变形,也就是说即使图像亮度或拍摄视角发生变化,亦或者旋转角度发生变化,Sift算法的检测结果不变。

2.1 Sift算法

Sift算法的三大步骤为:

.提取关键点;

.对关键点附加详细的信息;

.通过两两比较两方特征点找出相互匹配的若干对特征点。

其中,提取关键点的过程就Sift特征的求解过程,也就是在多幅图像中对得到的特征点进行过滤得到不随尺度、亮度等变化量无关的特征向量。

Sift特征的生成一般包括以下几个步骤:

(1).构建尺度空间,检测极值点,获得尺度不变性;

(2).特征点过滤并进行精确定位;

(3).为特征点分配方向值;

(4).生成特征描述子。

在通过Sift算法处理得到两幅图像的向量特征之后,便可以欧式距离来比较两幅图种某两个关键点之间的相似性,在两幅图像中的某一幅中任取一关键点,再遍历另一张图像找出图像距离最近的两个关键点,将次近距离除以最近距离得到相似参数,与某一阈值相比,如果小于阈值,则认为这两个点为一对匹配点。

2.2 SURF算法

SURF算法的核心是Hessian矩阵,根据Hessian矩阵的定义得到的判别式如下:

由于其判别式求解困难,顾采用方框滤波近似代替二阶高斯滤波计算待选特征点及周围点的Hessian值,这样可以利用积分图进行快速计算,得到近似值:

【5】

在图像处理中,往往使用图像金字塔来描述尺度空间,一般使用高斯金字塔,是这是对输入图像进行多次与高斯函数的的核卷积并对其反复进行二次抽样的一种方法,通常使用Sift算法实现,但由于每一层图像都是由上一层图像计算而来,所以后面的特征分量的计算对选取的主方向依赖严重,存在误差放大的可能性。但是Surf算法相较于Sift算法,Surf算法通过 Hessian矩阵求解得到的局部最值非常稳定,而且Surf算法可以对尺度空间多层图像同时处理,不需要二次抽样,所以Surf算法在运算速度上优于Sift算法。

三.OpenCV

OpenCV是一个由Inter所资助的开源计算机视觉库。它是由一系列C函数和少量C++类构成,实现图像处理和计算机视觉方面的很多通用算法【6】。

期刊文章分类查询,尽在期刊图书馆

OpenCV包括300多个C/C++函数跨平台的中、高层API。它不依赖其他外部库,但是兼容某些外部库。

OpenCV具有以下特征:

(1).开源的计算机视觉库采用C/C++编写

(2).使用目的是开发实时应用程序

(3).独立于操作系统、硬件和图形管理器

(4).具有通用的图像、视频载入,保存和获取模块

(5).具有底层和高层的应用开发包

OpenCV的CV模块包含基本的图像处理函数和高级的计算机视觉算法。ML是机器学习库,包含一些基于统计的分类和聚类工具。HighGUI包含图像和视频输入/输出的函数。CXCore包含OpenCV的一些基本数据结构和相关函数。

OpenCV提供了对摄像头和视频流进行操作与使用的模块CVCAM。CVCAM是一个处理和操作摄像头和视频流的跨平台模块。在Windows下它被封装成一个动态链接库DLL;在Linux下它成为一个共享对象库SO的形式,并且提供一个方便的API接口,可以读取和控制视频流、处理每一帧及渲染结果。对视频流的处理包括以下几步:

通知模块CVCAM要处理的摄像头,其语句如下:

cvcamSetProperty (YouCamere,CACAM_PROP_RENER,CVCAMTRUE);

选择窗口并设置窗口属性,实现语句如下:

cvcamWindow mywin=...;

cvcamSetProperty (YouCamere,CACAM_PROP_WINDOW,&mywin);

设置输出视频的宽度和高度,实现语句如下:

int width=320;

int height=240;

cvcamSetProperty (YouCamere,CACAM_PROP_REDWIDTH,&width);

cvcamSetProperty (YouCamere,CACAM_PROP_REDHEIGHT,&height);

为了处理捕捉到的每一帧图像,需要编写调回函数callback,通过制定调回函数属性CACAM_PROP_CALLBACk实现。

四.简单人脸识别

利用OpenCv通过调用计算机摄像头,将摄像头所拍摄到的景象传回,在通过分析得到人脸所在区域并将其圈出,surf算法部分代码如下:

for( i = 0; i < (int)ptpairs.size(); i + = 2 )

{

Cv SURFPoint* r1 = (Cv SURFPoint*)cv Get Seq Elem( object Keypoints,

ptpairs[i] );

Cv SURFPoint* r2 = (Cv SURFPoint*)cv Get Seq Elem( image Keypoints,

ptpairs[i+1] );

if

(abs(r1->pt.x-r2->pt.x)>0.08*object->width||abs(r1->pt.y-r2->pt.y)>0.08*object->heigh

t)

{

cv Line( correspond, cv Point From32f(r1->pt),

cv Point(cv Round(r2->pt.x), cv Round(r2->pt.y+object->height)),

colors[1] );

ptpairs.erase(ptpairs.begin()+i);

ptpairs.erase(ptpairs.begin()+i);

i- = 2;

}

else

{

cv Line( correspond, cv Point From32f(r1->pt),

cv Point(cv Round(r2->pt.x), cv Round(r2->pt.y+object->height)),

colors[8] );

}

}

参考文献:

[1].李浩然, 孙维国. 《数字图像轮廓特征提取过程研究》[J]. 《微计算机应用》, 2010, (11): 52-56

[2].蒋婷. 基于图像处理的自动对焦理论和技术研究[D]. 武汉理工大学: 2008.

[3].王绘. 基于颜色线索的图像彩色化研究[D]. 中南大学 2011.

[4].张德全, 董世存. 改进SIFT算法在图像数据相似性匹配中的应用研究[J]. 计算机科学, 2014, (z1): 122-146

[5].史露, 苏刚, 韩飞. 基于SIFT和SURF图像拼接算法的改进算法[J]. 计算机应用与软件, 2013, (6): 72-78

[6].贾小军, 喻擎苍. 基于开源计算机视觉库OpenCV的图像处理[J]. 计算机应用与软件, 2008, (4): 276-278

论文作者:郑天成,徐汇川

论文发表刊物:《科技中国》2016年9期

论文发表时间:2016/12/8

标签:;  ;  ;  ;  ;  ;  ;  ;  

基于OpenCV的人脸识别论文_郑天成,徐汇川
下载Doc文档

猜你喜欢