当前位置:文档之家› 基于OpenCv的图像识别

基于OpenCv的图像识别

基于OpenCv的图像识别
基于OpenCv的图像识别

基于2DPCA的人脸识别算法研究

摘要

人脸识别技术是对图像和视频中的人脸进行检测和定位的一门模式识别技术,包含位置、大小、个数和形态等人脸图像的所有信息。由于近年来计算机技术的飞速发展,为人脸识别技术的广泛应用提供了可能,所以图像处理技术被广泛应用了各种领域。该技术具有广阔的前景,如今已有大量的研究人员专注于人脸识别技术的开发。本文的主要工作内容如下:

1)介绍了人脸识别技术的基础知识,包括该技术的应用、背景、研究方向以及

目前研究该技术的困难,并对人脸识别系统的运行过程以及运行平台作了简单的介绍。

2)预处理工作是在原始0RL人脸库上进行的。在图像的预处理阶段,经过了图

象的颜色处理,图像的几何归一化,图像的均衡化和图象的灰度归一化四个过程。所有人脸图像通过上述处理后,就可以在一定程度上减小光照、背景等一些外在因素的不利影响。

3)介绍了目前主流的一些人脸检测算法,本文采用并详细叙述了Adaboost人脸

检测算法。Adaboost算法首先需要创建人脸图像的训练样本,再通过对样本的训练,得到的级联分类器就可以对人脸进行检测。

4)本文介绍了基于PCA算法的人脸特征点提取,并在PCA算法的基础上应用了

改进型的2DPCA算法,对两者的性能进行了对比,得出后者的准确度和实时性均大于前者,最后将Adaboost人脸检测算法和2DPCA算法结合,不仅能大幅度降低识别时间,而且还相互补充,有效的提高了识别率。

关键词:人脸识别 2DPCA 特征提取人脸检测

2DPCA Face Recognition Algorithm Based

on The Research

Abstract:Face recognition is a technology to detect and locate human face in an image or video streams,Including location, size, shape, number and other information of human face in an image or video streams.Due to the rapid development of computer operation speed makes the image processing technology has been widely applied in many fields in recent years. This paper's work has the following several aspects:

1)Explained the background, research scope and method of face recognition,and introduced the theoretical method of face recognition field in general.

2)The pretreatments work is based on the original ORL face database. In the image preprocessing stage, there are the color of the image processing, image geometric normalization, image equalization and image gray scale normalization four parts. After united processing, the face image is standard, which can eliminate the adverse effects of some external factors.

3)All kinds of face detection algorithm is introduced, and detailed describing the Adaboost algorithm for face detection. Through the Adaboost algorithm to create a training sample,then Training the samples of face image,and obtaining the cascade classifier to detect human face.

4)This paper introduces the facial feature points extraction based on PCA ,and 2DPCA is used on the basis of the PCA as a improved algorithm.Performance is compared between the two, it is concluds that the real time and accuracy of the latter is greater than the former.Finally the Adaboost face detection algorithm and 2DPCA are combined, which not only can greatly reduce the recognition time, but also complement each other, effectively improve the recognition rate.

Key words:Face recognition 2DPCA Feature extraction Face detection

目录

第1章前言 (1)

1.1 人脸识别的应用和研究背景 (1)

1.2 人脸识别技术的研究方向 (2)

1.3 研究的现状与存在的困难 (3)

1.4 本文大概安排 (4)

第2章人脸识别系统及软件平台的配置 (4)

2.1 人脸识别系统概况 (4)

2.1.1 获取人脸图像信息 (5)

2.1.2 检测定位 (5)

2.1.3 图像的预处理 (5)

2.1.4 特征提取 (6)

2.1.5 图像的匹配与识别 (6)

2.2 OpenCV (6)

2.2.1 OpenCV简介 (6)

2.2.2 OpenCV的系统配置 (7)

2.3 Matlab与图像处理 (8)

第3章图像的检测定位 (8)

3.1 引言 (8)

3.2 人脸检测的方法 (8)

3.3 Adaboost算法 (9)

3.3.1 Haar特征 (10)

3.3.2 积分图 (10)

3.3.4 级联分类器 (11)

第4章图像的预处理 (13)

4.1 引言 (13)

4.2 人脸图像库 (13)

4.3 人脸预处理算法 (14)

4.3.1 颜色处理 (14)

4.3.2几何归一化 (15)

4.3.3直方图均衡化 (16)

4.3.4灰度归一化 (18)

4.4 本章小结 (19)

第5章图像的特征提取与识别 (19)

5.1 引言 (19)

5.2 图像特征提取方法 (20)

5.2.1基于几何特征的方法 (20)

5.2.2基于统计的方法 (20)

5.2.3弹性图匹配(elastic graph matching) (21)

5.2.4神经网络方法 (21)

5.2.5支持向量机(SVM)方法 (22)

5.3 距离分类器的选择 (22)

5.4 PCA算法的人脸识别 (24)

5.5 二维主成分分析(2DPCA) (25)

5.5.1 2DPCA人脸识别算法 (25)

5.5.2 特征提取 (27)

5.5.3 分类方法 (27)

5.5.4 基于2DPCA的图像重构 (28)

5.6 实验分析 (28)

第6章总结与展望 (33)

6.1 本文总结 (33)

6.2 未来工作展望 (33)

致谢 (34)

参考文献: (35)

第1章前言

1.1 人脸识别的应用和研究背景

随着社会科学技术的发展进步,特别是最近几年计算机的软硬件技术高速发展,以及人们越来越将视野集中到快速高效的智能身份识别,使生物识别技术在科学研究中取得了重大的进步和发展。由于生物之间的生物特征具有很好的自身稳定性以及个体差异性,因此身份识别就是利用生物体内在的属性也就是生物特征作为依据[1]。当然人脸上的所具有的特征也是特别有用的生物特征,因为人脸特征具有被动识别、易于用户接受和方便友好等特点,被广泛用来进行身份的识别和验证等领域[2]。

对于人类而言,对其他个体进行识别是件非常容易的事情,人脸识别属于我们一种无意识的本能行为。但是对于计算机而言,要想对人脸进行检测并识别出具体的目标却具有非常大的难度。人脸识别涉及了多个领域的相关知识,包括图像处理、模式识别、心理学、认知学、生理学等。

与人的指纹和虹膜等特征类似,每个人都有唯一的一张脸,因此就像身份证一样用来识别人们的身份。早在1888年就已经提出了人脸识别的概念[3],可是直到20世纪80年代末,人脸识别技术才成为人们研究的热点。而现在该技术已经取得了重大的突破,可谓百家争鸣,很多研究机构都已提出了自己的人脸识别算法。目前,部分人脸识别技术已经应用于产品中,给人们生活带来了极大的便利。

同其它生物特征识别技术相比,如指纹识别,语音识别,虹膜识别,DNA识别和步态识别等,它具有被动、友好和方便的优点。其应用范围非常广泛,可应用于下面的几个应用[4]:

·嫌疑犯照片的识别匹配

·信用卡、护照、个人身份和驾驶执照的识别

·商场、银行安全系统

·公众场合的监控

·计算机登录、门禁系统控制

·专家身份识别系统

·基于目击者的人脸重构

·嫌疑犯的电子照片簿

·基于残留人脸的人脸重构

·基于父母人脸的小孩脸的推导生成

·随着年龄增长的人脸估算

1.2 人脸识别技术的研究方向

通过匹配人脸的特征点的过程就是人脸识别技术,它是分别通过对人脸进行特征提取和特征识别,属于模式识别技术中的一种。以下是目前人们公认的几个研究方向[5]:

(1)图像的信息检测:图像的信息检测:该技术即是在不同的环境条件下,对人脸的信息进行检测,包括人脸在图像中的具体位置。虽然在很多情况下,人脸的信息在人为参与下可以很容易的获得,如身份证、学生证上的照片等。然而在大部分应用中,外界的条件并不单一,人脸的位置是无法预测的,因此实际中的人脸的位置具有很大的不确定性。人们只有知道了外界环境中需要的人脸信息,才能通过各种各样的技术来有效识别人脸。可是外界环境对人脸识别的影响是巨大的,因而要进行人脸采集需要克服许多未知的难度。

(2)图像的信息表示:即是人们需要用怎样的方式在计算机系统内能有效的表示人脸的各种不同信息。目前的这些图像信息可以被计算机技术有效的表征出来,人们常用的表征方式有:曲率、角度、欧氏距离、特征脸、固定特征模板等。

(3)图像的信息鉴别:该过程是先处理人脸的图像信息,然后在预先训练的库内和图像信息进行匹配,这就是人脸识别的过程。在整个过程当中,选择人脸特征的表征方式和对应的匹配方式是图像信息鉴别的关键,这将直接影响到人脸识别的效果。

(4)人脸的面部表情研究:即分析人脸的表情,比如:喜、怒、哀、乐、

哭等这些能直接体现到人脸上的信息,并通过分析这些信息,抓住这些表情的稳定性特征,对其进行有效的识别。

人脸识别有狭义和广义的概念之分,人脸识别的狭义是指从下面的几个方面构建人脸识别系统,即是:人脸检测,人脸特征点提取和人脸的鉴别。本文分别对这三个部分进行了深入的研究和探讨,其中人脸特征点提取是本文的重点,将会进行详细的介绍和实验结果的描述。

1.3 研究的现状与存在的困难

到目前为止,国内外有多种多样的人脸识别的方法,并且新的研究成果不断涌现。然而,因为人脸识别技术是相当复杂的,要想建立一个能完全实现全自动的人脸识别系统是相当困难的,这包括了计算机视觉、人工智能、计算机网络、数字图像处理和通讯等多个学科领域的知识。而目前人们在该领域的主要研究课题,仍然是在某种应用背景下或者解决特定环境下的人脸识别的问题[6][7]。

尽管人脸识别已经取得了很多重大的突破,但以下几个内容仍然是今后人们研究人脸识别的主要难点所在,这将会影响人脸识别走向实用化的重大因素。1)人脸本身的特点

人脸的姿态的多样性以及表情的丰富性是人脸本身的两个最重要的特点。其中人脸姿态主要是在自然条件下,获取的人脸图像并不都是完整的,人脸的俯仰或者偏转都可能造成面部信息的部分丢失,在精确提取人脸图像的特征点时造成了不小的困难;而人脸并不是一成不变的,其丰富且变化的表情是复杂且细微的。所以,建立一个人脸的情绪和表情模型的分类,把人脸的面部特征的变化和人脸的表情描述联系起来,通过计算机对人脸的变化进行抽象的概括,这也是一个相当重要的问题。

2)环境的影响

因为受到距离、光照、尺度、光源和旋转等不确定的因素影响,人脸采集系统在获取人脸图像时将是非常复杂的。在光照不确定的环境中,环境中的各种因素将会影响到每隔像素的亮度:光照的颜色、亮度、位置和周围物体的影响。在目前的人脸识别研究中,很多识别方法都需要对光照有一定的

依赖,偏光、过暗或过亮现象都可能影响识别率。所以,在对人脸图像进行特征点提取和分类之前都要作预处理操作。

3)计算机本身的限制

如果想要把三维人脸投影到二维的图像上,虽然将会有信息的缺失,但这仍将是一种具有高维数的非常复杂的视觉信息,其中包括大量的像素数据,而且每一个像素都携带了非常多的信息。怎样利用计算机来正确处理巨大的数据量,并能保证人脸识别系统实时性的要求将会是人脸识别研究的主要难点之一。

1.4 本文大概安排

这篇文章主要是由以下几个部分构成:

1)人脸识别技术的研究背景及基本的理论知识,这个主要体现在文章的前面两章。第一章介绍了人脸识别技术的应用和研究背景、研究方向及研究现状和存在的困难。第二章对人脸识别系统的组成进行了分析说明,对识别过程进行了归纳总结,并介绍了人脸识别的开发环境。

2)本文主要的研究内容,是在第三章到第五章里,对人脸识别的主要算法进行了深入的分析和研究。第三章深入分析和研究了图像的检测定位技术。介绍各种人脸检测的方法,研究并实现了AdaBoost人脸检测算法,包括Haar特征,积分图,Adaboost算法,用Adaboost算法进行简单分类器和强分类器的训练,最后进行级联强分类器的设计。第四章深入研究图像预处理的四个过程,其中包括颜色处理、几何归一化、直方图均匀化和灰度归一化。

第五章首先讨论了人脸图像分类函数的选择,并最终选择了欧氏距离分类函数。最后分别对主成分分析算法、二维主成分分析算法进行了全面的阐述和比较,得出它们的优缺点。并且在ORL人脸库的实验基础上,阐明了本文算法的有效性,同时对PCA算法和2DPCA算法进行了全面的实验分析和对比。本文最后对人脸识别技术的一个总结和期望。

第2章人脸识别系统及软件平台的配置

2.1 人脸识别系统概况

模式识别技术是当今社会的学术研究热点问题,而人脸识别是模式识别中的一个重要的组成部分,它是通过用计算机作为平台,对人脸图像进行分析处理和分类,并从人脸图像信息中获取能表征人脸特征的有效特征信息来进行有效的识别。人脸识别技术是一种可以用来进行身份识别的计算机技术。人们越来越受到重视和认可这种技术。人脸识别系统由四个组成部分组成,包括人脸图像的采集及检测、人脸图像预处理、人脸图像的特征提取以及人脸图像的识别。其中最重要的是人脸特征的提取和人脸图像的识别。

2.1.1 获取人脸图像信息

不同的人脸图像都能通过摄像镜头采集下来,比如静态图像、动态图像、不同的位置、不同表情等方面都可以得到很好的采集。当用户在采集设备的拍摄范围内时,采集设备会自动搜索并拍摄用户的人脸图像。可是怎样将图像转换成计算机能自动辨别的信息,这就需要把人脸图像转换成数据矩阵,通过这样的转换,就能使计算机有效的进行人脸图像的处理,最终达到对人脸图像进行识别的效果。可以将这样一个过程称为人脸图像的信息获取的过程,通过这种方式,可以把人脸图像转换成计算机能识别的信息。

2.1.2 检测定位

人脸检测在实际中主要用于人脸识别的预处理,即在图像中准确标定出人脸的位置和大小。人脸图像中包含的模式特征十分丰富,如直方图特征、颜色特征、模板特征、结构特征及Haar特征等。人脸检测就是把这其中有用的信息挑出来,并利用这些特征实现人脸检测。主流的人脸检测方法基于以上特征采用Adaboost学习算法,Adaboost算法是一种用来分类的方法,它把一些比较弱的分类方法组合在一起,得到新的具有很好分类能力的分类方法。

2.1.3 图像的预处理

人脸图像预处理:对于人脸的图像预处理是基于人脸检测结果,对图像进行处理并最终服务于特征提取的过程。系统获取的原始图像由于受到各种条件的限制和随机干扰,往往不能直接使用,必须在图像处理的早期阶段对它进行灰度校正、噪声过滤等图像预处理。对于人脸图像而言,其预处理过程主要包括人脸图

像的光线补偿、灰度变换、直方图均衡化、归一化、几何校正、滤波以及锐化等。

2.1.4 特征提取

人脸图像特征提取:人脸识别系统可使用的特征通常分为视觉特征、像素统计特征、人脸图像变换系数特征、人脸图像代数特征等。人脸特征提取就是针对人脸的某些特征进行的。人脸特征提取,也称人脸表征,它是对人脸进行特征建模的过程。人脸特征提取的方法归纳起来分为两大类:一种是基于知识的表征方法;另外一种是基于代数特征或统计学习的表征方法。基于知识的表征方法主要是根据人脸器官的形状描述以及他们之间的距离特性(即几何特征)来获得有助于人脸分类的特征数据;基于代数方法的人脸表征包括模板匹配法和基于几何特征的方法两种。

2.1.5 图像的匹配与识别

人脸图像匹配与识别:提取的人脸图像的特征数据与数据库中存储的特征模板进行搜索匹配,通过设定一个阈值,当相似度超过这一阈值,则把匹配得到的结果输出。人脸识别就是将待识别的人脸特征与已得到的人脸特征模板进行比较,根据相似程度对人脸的身份信息进行判断。这一过程又分为两类:一类是确认,是一对一进行图像比较的过程,另一类是辨认,是一对多进行图像匹配对比的过程。

2.2 OpenCV

2.2.1 OpenCV简介

OpenCV(Open Source Computer Vision Library)即开源计算机视觉库,由Intel在1999年建立,而现在是由Willow Garage提供的后台支持。OpenCV使用C/C++语言编写,可以运行在多个操作系统上,包括Mac、Windows、Linux等。它还提供了如MATLAB、Ruby、C++ Builder、VC、Python 等语言的接口,因此OpenCV通过大量的通用的算法实现了计算机视觉处理和图像处理方面完美的结合在一起。

OpenCV开发构建了一个相当简易的计算机视觉框架,其目的是为了帮助开发人员更加方便地设计计算机视觉方面的相关应用。在OpenCV函数库里,有500

多视觉函数,包括医学成像、工厂产品检测、用户界面、信息安全、机器人视觉、摄像机标定和立体视觉等多个领域。由于机器学习和计算机视觉处理是密切相关的,因此OpenCV还有机器学习库。OpenCV库自带的人脸级联分级器具有很好的人脸检测效果,因此在本文中,人脸检测与人脸预处理部分均在OpenCV中完成。

2.2.2 OpenCV的系统配置

本文采用的编译环境是Visual C++6.0,要进行人脸识别的相关处理,需要调用OpenCV1.0函数库,并对它进行相关的配置。步骤如下:

1)配置函数库的路径

C:\Program Files\OpenCV\cxcore\include

C:\Program Files\OpenCV\cv\include

C:\Program Files\OpenCV\cvaux\include

C:\Program Files\OpenCV\ml\include

C:\Program Files\OpenCV\otherlibs\highgui

C:\Program Files\OpenCV\otherlibs\cvcam\include

配置源文件的路径:

C:\Program Files\OpenCV\cv\src

C:\Program Files\OpenCV\cxcore\src

C:\Program Files\OpenCV\cvaux\src

C:\Program Files\OpenCV\otherlibs\highgui

C:\Program Files\OpenCV\otherlibs\cvcam\src\windows

3)设置环境变量:

Path:= C:\Program Files\OpenCV\bin

4)每创建一个将要使用OpenCV的VC工程,都需要给它指定需要的lib。菜

单:Project(工程)->Settings(设置),然后将Setting for(设置)选为All Configurations(所有配置),然后选择右边的link(连接)标签,在Object/library modules(对象/库模块)附加上 cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib。如果不需要这么多lib,可以只添加需要的lib。

2.3 Matlab与图像处理

MATLAB主要面对科学计算、可视化和交互式程序设计的高科技计算环境。它将矩阵计算、数值分析、非线性动态系统以及科学数据可视化的建模和仿真等众多强大功能集成在一个易于使用的视窗环境中,为工程设计、科学研究以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并且在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。Matlab在处理信息时可以用很常用的数学表达式解决,且Matlab的运算速度快,它具有专门的图像处理工具箱。因此,本文中的特征点提取和人脸分类是应用Matlab完成的。

第3章图像的检测定位

3.1 引言

人脸识别和人脸检测是人脸识别系统中最核心的部分,经过人们多年的深入研究和发展,出现了许多的算法。整个人脸识别系统的性能怎样,直接决定于选取和使用哪种算法。本章首先简单介绍了人脸检测的相关方法,然后详细介绍了本文使用的算法Adaboost人脸检测算法。该算法的检测精度并不高,但是关于算法带来的问题将在后续过程中得到很好的解决,消除了算法带来的影响。3.2 人脸检测的方法

人脸检测是人脸识别的基础,检测得到的结果对后续相关工作有着非常大的影响,是整个人脸识别系统优先解决的问题。经过几十年的发展,人脸检测涌现出了大量的方法。由表征方式的差异,通常可以分为基于特征的检测方法,基于统计的方法和模板匹配法[8]。

(1)基于特征的检测方法。这种方法是最原始的人脸检测方法。有这种方法的人脸检测系统里,一般需要先检测出人脸图像中的重要特征点(如鼻子、眼睛等)的相对位置和、特征点之间的相对距离和它们的形状等参数,然后要用这些参数构成一个表征人脸的特征向量,通常,特征向量的分量包括了两点间的欧氏距离、角度和曲率等。

基于几何特征的人脸检测的方法的优点如下:1)与人脸的机理相符合,比较容易理解;2)仅需存储一些特征矢量,它的存储量非常小; 3)对光照的变化不是很敏感。但是该方法也具有缺点:它只描述了一些重要特征的相对位置之间的关系和形状,而忽略了那些比较细微的局部特征,因此更适合用来进行粗分类。

(2)模板匹配法。模板匹配法需要首先建立一些作为参考标准的人脸模板,其中包括人脸的正面或是单独的鼻子、嘴唇、眼睛等。然后通过一些正确的算法来检测各待测区域与标准的人脸模板的相关度(或称相似度),通过利用检测的数据来判断该区域是否是人脸。

该方法的优点是当被检测人脸的大小不一样或在允许范围内有偏转时,由于模板匹配法使用的是可调的弹性模板,所以被测人脸都可以被检测出来。模板匹配方法的缺点是检测前设计的模板轮廓必须取决于待检测人脸的形状,所以局限性比较大,影响了收敛的效果;并且在对待测图像作全局搜索时,需要计算能量的函数和动态的调整参数,从而导致计算时间过长。

(3)基于统计的人脸检测方法。这种方法从整个目标人脸出发,充分运用统计学的方法,利用大量的人脸图像来提取人脸共有的一些规律,就可以运用这些规律检测人脸了。因为人脸图像是相当复杂的,要想描述人脸的特征时非常困难,所以人们越来越青睐基于统计的人脸检测方法。本文就是采用基于统计的方法(即Adaboost人脸检测算)。Adaboost算法是一种基于积分图和矩形特征的算法,将在下文中详细介绍这种方法。

3.3 Adaboost算法

Adaboost算法属于一种迭代算法。它主要有三个步骤:1)首先需要提取待测

图像中的特征点,经过训练从中选出最优的特征点;2)然后再将选取出的特征变换为相应的简单分类器;3)最后将全部得到的简单分类器通过优化和组合,产生合成级联分类器,即可以用于人脸的检测[9]。从上面可以看出,Adaboost 算法的基础是特征的计算和选取。而选取的特征即是特征矩阵(Haar 特征),计算的方法是积分图[10][11]。

3.3.1 Haar 特征 Haar 特征就是白色矩形和黑色矩形在图像子窗口中对应区域的灰度级总和之差,它反映了图像局部的灰度化。常用的Haar 特征有三种,如图3-1:

图3-1:三种Haar 特征

每个特征是由2个或者3个矩形组成,它们分别用来检测中心特征、边界和细线,这些矩形内的特征值可表示为:

∑*=N

i i j r ctSum feature 1)(Re ω (3-1)

式中:

)(Re i r ctSum 是矩阵i r 所围图像的灰度积分,N 为组成j feature 的矩阵的个数,i ?是矩阵的权。

3.3.2 积分图

Haar 特征值的计算量是非常大的,当图像的像素比较大时,如果直接用图像的灰度值后再计算特征值,达不到人脸识别系统实时性的要求。基于这种考虑,Paul Vilola 等人提出用积分图的计算方法,通过积分图,)(Re i r ctSum 计算的速度大大加快了。积分图的原理是用空间换取时间,该方法是把从图像的起点开始到其它位置所构成的矩形区域的像素之和作为一个数组存储起来,当计算某个区

域的)(Re i r ctSum 时,就直接运用这些数组来计算,而不必再计算这片区域的像素,从而节省了时间,加快了计算速度。

3.3.3 Adaboost 算法 Adaboost 算法就是通过训练分类器,属于一种分类算法。它是通过利用许多分类能力弱的简单分类器按照特定的方式进行叠加(Boost ),然后构成一个分类能力很强的强分类器[9]。

(1)简单分类器的训练。

下面是第j 个特征点的简单分类器的表达式:

?

??<=其他,0)(,1)(j j j j j p x f p x h θ (3-2) 其中j h 是简单分类器的值;j θ是阀值;j p 是不等号的方向,规定只能取1±;)(x f j 为特征值。

从公式(3-2)可以得出,一个弱分类器是由对应的阈值j θ和特征)(x f j 决定的,训练一个弱分类器,就是在当前权重的分布情况下,找到最优的阈值,使得该弱分类器对所有训练样本的分类误差最低。

(2) 强分类器的训练。

强分类器的特征与简单分类器是一一对应的。Adaboost 分类器中包括了非常多的简单分类器,如果按照一定的权重和方法就可以把这些简单分类器串联起来,就可以形成对应的强分类器。经过T 训练,就能得到T 个最优的简单分类器,然后将这T 个简单分类器按照公式(3-3)就可以形成一个强分类器[9]:

??

???≥=∑∑==其他,021)(,1)(11T t T t t t t j a x h a x h 式中:t t a β1lg = (3-3) 3.3.4 级联分类器

虽然由多个简单分类器按一定的方式组合而来的强分类器拥有很好的检测效率,但是它消耗的检测时间比较长,达不到人脸识别系统的实时性的要求,所以Micheal Jones与Paulviola等人就提出了基于Adaboost算法的人脸检测级联分类器,不仅使人脸检测具有很好的识别效果,还从根本上解决了人脸识别的速度上的问题。

从整体上来说,级联分类器是一个多层次的结构,就是一个退化的决策树。让待检测的人脸图像按一定的次序经过多个简单分类器,如果该图像可能是人脸,就会通过检测,否则就会被判断为错误图像,结束对该图像的检测,接着检测其它窗口[9]。如下图所示:

图3-2:级联分类器结构图

(1)待测图像(2)检测结果

图3-3:人脸检测示意图

级联分类器能在减少检测时间的同时又能提高人脸的检测率。为了提高图像检测的效率,最开始的几层分类器可以用相对简单的强分类器,这些强分类器通常仅有一两个简单分类器所构成,即只有一到两个矩形特征。然而这些简单的强

分类器具有很高的人脸检测率。尽管这种强分类器所检测出来的结构还达不到人脸检测的要求,但是至少因为它自身的特征很简单,可以迅速的减少大量的非人脸的图像,因此可以大大地减少后面的工作量。图3-3是用级联分类器作人脸检测的结果。

第4章图像的预处理

4.1 引言

模式识别的过程中一个非常重要的步骤就是预处理。输入的图像在从实际的景物转变为数字图像的信息时,因为设备或者条件的不同,比如设备性能的好坏与光照的亮度等,所以会有在对比度不够或存在噪声等不足。另外,焦距大小、距离远近等又会让人脸在整幅图像中的大小和位置不确定。因此为了确保所提取的特征脸在图像里的位置、偏斜和大小不变,以及对光照的不敏感,必须在提取特征之前对图像作预处理工作[12]。

本节的预处理工作是在原始0RL人脸库上进行的。主要的预处理工作包括:图象的颜色处理,图像的几何归一化,图像的均衡化与图象的灰度归一化这四部分。经过统一处理后,人脸图像就比较标准了,可以消除一些外在因素的不利影响[12]。

4.2 人脸图像库

要开发一个人脸识别系统,都需要有一个自己的包含图像系列或人脸图像的数据库。人脸库的设计对人脸识别系统的识别率起决定性的作用,数据库中的不同表情、姿态和光照变化即使是背景的微小变化都会严重影响系统的系别率,因此人们就建立了能适应不同要求的人脸数据库。

1、FERET人脸库[13]

FERET人脸数据库由美国军方建立,是当今最大的一个人脸库,其中包括没人八张图像,三张从右到左的从不同侧面角度拍摄的图像,两张正面照,有些人还具有更多不同表情和不同视角的照片。这个数据库中的人脸都没有戴眼镜,拍摄的条件也是有限制的,图片中的人脸放置在规定大小的范围内。FERET人脸数

据库中的图像数目仍在不断地增加,但是到目前为止,该人脸库仍未添加语音信息也未提供运动图像的系列。非美研究机构在获取该数据库是很不方便的,这也是该数据库的最大缺点。

2、ORL人脸库[14]

ORL人脸库是由Ohvertti实验室拍摄的一系列人脸图像组成,它是一个美国的专门从事人脸图像研究的实验室,这个数据库内共有40个不同性别、不同种族和不同年龄的人,每个人有十幅图像。ORL人脸数据库里的图像都是灰色的,尺寸为92

112 ,背景也是灰色的。图像的人脸上的细节和表情都是不一样的,并且都是不断变化的,比如不哭与哭,有没有戴帽子,有没有头发等。人脸的姿态也是有变化的,比如抬头与不抬头,人脸尺寸也有10%以下的变化。相对FERET 人脸库来说,ORL人脸库中的人脸信息时很容易获得的,以前研究工作者的大量实验数据也包含在里面,正是基于这一优点,所以该人脸库就作为了本文实验的人脸数据库。

3、Yale耶鲁人脸库[15]

Yele人脸数据库中含有15个人,每个人具有11张人脸图像,总共165张图片,这些图像的差异就在于人脸表情的不断变化,光照条件是否一致,是否佩戴眼镜等。该人脸库的最大特点就是光照变化很明显,而且人脸部分被遮掩。

4、AR人脸库[12]

该数据库是由Purdue大学建立的人脸数据库。AR数据库分别采集了间隔14天两个不同时间段,都是以白色作为拍摄背景的同一批人的人脸图像,包括56女70男总共126人,由每人共有28张彩色的正面图像组成。他们在眼镜、装饰物、服饰、发型或者化妆方面都没有具体的限制。每人两组不同时间段的照片里都含有微笑、愤怒、尖叫和中立等不同的面部表情,双侧光照、左侧光照和右侧光照的不同的光照条件,甚至还有用围巾遮挡部分面部或者佩戴太阳镜。本文的人脸识别率的实验主要是基于ORL人脸库。

4.3 人脸预处理算法

4.3.1 颜色处理

人脸特征点的提取是人脸识别系统中一个重要的步骤,但是提取人脸特征点信息只能在灰度图像上,所以,图像预处理的第一步就是要先对图像进行灰化处理,获得灰度图像。彩色都是由三种最基本的颜色通过一定的比例形成的,即RGB(Red 、Green 、Blue)。从生活中获取的图像都是彩色的。灰度图像图像只有亮度而没有彩色信息,它和生活中黑白照是一样的。同时,灰度图像是有变化的,比如从暗到亮之间的变化过程。在图像处理的领域中,人们一般都把亮度作了量化处理,将它划分为从0到255总共256个级别。其中255代表全白,0代表全黑。与彩色图像相比,灰度图像只有亮度的信息,因此它更容易进行归一化,操作也更加简单。由图像的理论知识可以得到二者的转换公式:

????

????????????????----=??????????B G R V U Y 100.0515.0615.0437.0289.0148.0114.0587.0299.0 (4-1) 在这个公式中,Y 变量代表颜色的亮度,U 和V 变量都表示色调。后文的计算都是针对Y 变量展开的。

4.3.2几何归一化

图像的几何归一化是指在人脸图像中,人脸的关键部位在图像中的位置是否都是一致的。在没有经过任何处理的原始图像中,人脸的关键部位在图像中的位置会有所偏移,当采用基于整体灰度统计的人脸识别方法时(如2DPCA ),会对人脸的正确识别产生很大的影响。所以,输入的人脸图像都需要进行校正,才能把不同情况的人脸图像处理成像素大小一致,人脸的关键部位也一致的标准图像

[12]。

几何归一化由三部分构成,即图像剪切、图像缩放和图像旋转[16][17]。图像旋转就是把人脸图像在平面内进行旋转处理,目的是为了让人脸上的双眼之间的连线能保持在水平位置。图像剪切就是讲人脸双眼的距离固定起来,然后通过这样来剪切图像,从而确保人脸位置的稳定性并在某种程度上可以克服背景和头发的干扰,进而体现人脸在图像平面中的平移的不变形[12]。

图像裁剪的比例示意图如下图4-1。设o 点是l r E E 的中点,并且l r E E d =。

经过裁剪,在d d 22?的图象内,可以保证o 点固定于)(d d .5.0处。

图4-1:图像裁剪比例示意图

图像的缩放就是把输入的图像中的人脸缩放到规定的像素大小,根据的是人眼之间的坐标。假如规定的图像的大小是128

128?,那么缩放的倍数就是β。只要固定了人眼之间的坐标,就可以确保其他重要部位如嘴、脸颊、=

128

2d

/

鼻等的位置都保持相对准确的位置。这也体现出了人脸在图像的平面内尺度的不变性[12]。

图像的缩放主要有两种方法:一种是用灰度插值的方式来缩小输入图像[17],二是利用小波变换来进行图像的分解[18][19]。本文中的实验就采用灰度插值的方法来进行图象的缩放[12]。

灰度插值常用的方法有双线性插值法、三次插值发和最邻近插值法。虽然最邻近插值法简单,但是有很大的失真。三次插值法虽然精度高,但是运算量很大。所以在本文实验中选取了效果较好,速度较好的双线性插值法[12][17]。对ORL人脸库中的一人脸作图象预处理的结果如图4-2。

(1)原始图像(2)旋转后的图像(3)剪切后的图像(4)缩放后的图像

图4-2:图像预处理示意图

4.3.3直方图均衡化

对于人脸图像需要对其进行直方图均衡化,它的原理是:将原始图像的像素

图像处理opencv代码

#include "stdafx.h" #include "mymfc.h" #include "mymfcDlg.h" #include "afxdialogex.h" #include #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CmymfcDlg 对话框

CmymfcDlg::CmymfcDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CmymfcDlg::IDD, pParent) , TheImage(NULL) , rePath(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CmymfcDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CmymfcDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_ReadImg, &CmymfcDlg::OnBnClickedReadimg) ON_BN_CLICKED(IDC_EdgeDetect, &CmymfcDlg::OnBnClickedEdgedetect) ON_BN_CLICKED(IDC_Refresh, &CmymfcDlg::OnBnClickedRefresh) ON_BN_CLICKED(IDC_GrayProcess, &CmymfcDlg::OnBnClickedGrayprocess) ON_BN_CLICKED(IDC_Sobel, &CmymfcDlg::OnBnClickedSobel) ON_BN_CLICKED(IDC_Laplace, &CmymfcDlg::OnBnClickedLaplace) ON_BN_CLICKED(IDC_FFT2, &CmymfcDlg::OnBnClickedFft2) ON_BN_CLICKED(IDC_CImage, &CmymfcDlg::OnBnClickedCimage) ON_BN_CLICKED(IDC_Mirror, &CmymfcDlg::OnBnClickedMirror) ON_BN_CLICKED(IDC_CColor, &CmymfcDlg::OnBnClickedCcolor) ON_BN_CLICKED(IDC_MedianBlur, &CmymfcDlg::OnBnClickedMedianblur) ON_BN_CLICKED(IDC_Gaussian, &CmymfcDlg::OnBnClickedGaussian) ON_BN_CLICKED(IDC_BothSide, &CmymfcDlg::OnBnClickedBothside) ON_BN_CLICKED(IDC_Equally, &CmymfcDlg::OnBnClickedEqually) ON_BN_CLICKED(IDC_Corrosion, &CmymfcDlg::OnBnClickedCorrosion) ON_BN_CLICKED(IDC_Dilate, &CmymfcDlg::OnBnClickedDilate) END_MESSAGE_MAP() // CmymfcDlg 消息处理程序 BOOL CmymfcDlg::OnInitDialog() { CDialogEx::OnInitDialog();

基于OpenCV识别库的面部图像识别系统的设计

基于OpenCV识别库的面部图像识别系统的设计 本系统采用J2EE技术并以OpenCV开源计算机视觉库技术为基础,实现一套具有身份验证功能的面部图像识别信息管理系统。系统使用MySQL数据库提供数据支撑,依托于J2EE的稳定性和Java平台的可移植性使得本系统可以在各个操作系统平台中运行,同时提供在互联网中使用面部识别技术的一套较为完备的解决方案。 标签:OpenCV;人脸识别;生物学特征 引言 随着信息技术的飞速发展以及互联网的深入普及,越来越多的行业和领域使用信息技术产品以提高工作效率和管理水平。但是由于人们隐私信息的保护意识薄弱,出现了许多信息安全的问题。在人们对于信息安全越来越重视的情况下,许多技术被应用到信息安全领域中来。较为先进的技术有虹膜识别技术、遗传基因识别技术以及指纹识别技术等。而论文采用的是当前热点的面部图像识别技术。 1 系统实现算法及功能分析 1.1 面部图像的生物学特征模型的建立 本系统是利用面部图形的生物学特征来识别不同的人。由于每个人的面部图像都有各自的特征但又具有一定的通性,需要应用生物学中相关知识加以解决。可以利用已有的生物学测量手段以及现有的算法构建人的面部图像生物学特征模型(简称:面部模型),并应用于系统中,面部模型的建立为面部图像识别的功能提供实现依据。 1.2 知识特征库及面部识别引擎的建立 在前述面部模型建立完成后,需要建立相应的知识库以及面部识别引擎方可进行身份的识别。可经过大量数据的采集和分析后建立知识库,并根据知识库的特点建立相应的识别引擎。此识别引擎对外开放,在本系统中提供其它外来程序的调用接口,其它系统能够通过本接口实现识别引擎的调用实现对于面部图形的识别,从而达到识别引擎的可复用性。在技术条件允许的情况下,提供知识库的智能训练以及半自动构建支持。 1.3 面部图像的采集与预处理 本系统中采用了预留API接口,利用USB图形捕获设备采集数据图像。经过USB设备的捕获,使用JMF(Java Media Framework)来处理已捕获的图像数据,对捕获的图像进行面部图行检测和实时定位跟踪。

opencv函数目录-Cv图像处理

目录 1 梯度、边缘和角点 1.1 Sobel 1.2 Laplace 1.3 Canny 1.4 PreCornerDetect 1.5 CornerEigenValsAndVecs 1.6 CornerMinEigenVal 1.7 CornerHarris 1.8 FindCornerSubPix 1.9 GoodFeaturesToTrack 2 采样、插值和几何变换 2.1 InitLineIterator 2.2 SampleLine 2.3 GetRectSubPix 2.4 GetQuadrangleSubPix 2.5 Resize 2.6 WarpAffine 2.7 GetAffineTransform 2.8 2DRotationMatrix 2.9 WarpPerspective 2.10 WarpPerspectiveQMatrix 2.11 GetPerspectiveTransform 2.12 Remap 2.13 LogPolar 3 形态学操作 3.1 CreateStructuringElementEx 3.2 ReleaseStructuringElement 3.3 Erode 3.4 Dilate 3.5 MorphologyEx 4 滤波器与色彩空间变换 4.1 Smooth 4.2 Filter2D 4.3 CopyMakeBorder 4.4 Integral 4.5 CvtColor 4.6 Threshold 4.7 AdaptiveThreshold 5 金字塔及其应用 5.1 PyrDown 5.2 PyrUp 6 连接部件 6.1 CvConnectedComp

图像管理方案计划opencv代码

/. #include "stdafx.h" #include "mymfc.h" #include "mymfcDlg.h" #include "afxdialogex.h" #include #ifdef _DEBUG #define new DEBUG_NEW #endif // 用于应用程序“关于”菜单项的CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CmymfcDlg 对话框

CmymfcDlg::CmymfcDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CmymfcDlg::IDD, pParent) , TheImage(NULL) , rePath(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CmymfcDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CmymfcDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_ReadImg, &CmymfcDlg::OnBnClickedReadimg) ON_BN_CLICKED(IDC_EdgeDetect, &CmymfcDlg::OnBnClickedEdgedetect) ON_BN_CLICKED(IDC_Refresh, &CmymfcDlg::OnBnClickedRefresh) ON_BN_CLICKED(IDC_GrayProcess, &CmymfcDlg::OnBnClickedGrayprocess) ON_BN_CLICKED(IDC_Sobel, &CmymfcDlg::OnBnClickedSobel) ON_BN_CLICKED(IDC_Laplace, &CmymfcDlg::OnBnClickedLaplace) ON_BN_CLICKED(IDC_FFT2, &CmymfcDlg::OnBnClickedFft2) ON_BN_CLICKED(IDC_CImage, &CmymfcDlg::OnBnClickedCimage) ON_BN_CLICKED(IDC_Mirror, &CmymfcDlg::OnBnClickedMirror) ON_BN_CLICKED(IDC_CColor, &CmymfcDlg::OnBnClickedCcolor) ON_BN_CLICKED(IDC_MedianBlur, &CmymfcDlg::OnBnClickedMedianblur) ON_BN_CLICKED(IDC_Gaussian, &CmymfcDlg::OnBnClickedGaussian) ON_BN_CLICKED(IDC_BothSide, &CmymfcDlg::OnBnClickedBothside) ON_BN_CLICKED(IDC_Equally, &CmymfcDlg::OnBnClickedEqually) ON_BN_CLICKED(IDC_Corrosion, &CmymfcDlg::OnBnClickedCorrosion) ON_BN_CLICKED(IDC_Dilate, &CmymfcDlg::OnBnClickedDilate) END_MESSAGE_MAP() // CmymfcDlg 消息处理程序 BOOL CmymfcDlg::OnInitDialog() { CDialogEx::OnInitDialog();

基于OpenCv的图像识别

基于2DPCA的人脸识别算法研究 摘要 人脸识别技术是对图像和视频中的人脸进行检测和定位的一门模式识别技术,包含位置、大小、个数和形态等人脸图像的所有信息。由于近年来计算机技术的飞速发展,为人脸识别技术的广泛应用提供了可能,所以图像处理技术被广泛应用了各种领域。该技术具有广阔的前景,如今已有大量的研究人员专注于人脸识别技术的开发。本文的主要工作内容如下: 1)介绍了人脸识别技术的基础知识,包括该技术的应用、背景、研究方向以及 目前研究该技术的困难,并对人脸识别系统的运行过程以及运行平台作了简单的介绍。 2)预处理工作是在原始0RL人脸库上进行的。在图像的预处理阶段,经过了图 象的颜色处理,图像的几何归一化,图像的均衡化和图象的灰度归一化四个过程。所有人脸图像通过上述处理后,就可以在一定程度上减小光照、背景等一些外在因素的不利影响。 3)介绍了目前主流的一些人脸检测算法,本文采用并详细叙述了Adaboost人脸 检测算法。Adaboost算法首先需要创建人脸图像的训练样本,再通过对样本的训练,得到的级联分类器就可以对人脸进行检测。 4)本文介绍了基于PCA算法的人脸特征点提取,并在PCA算法的基础上应用了 改进型的2DPCA算法,对两者的性能进行了对比,得出后者的准确度和实时性均大于前者,最后将Adaboost人脸检测算法和2DPCA算法结合,不仅能大幅度降低识别时间,而且还相互补充,有效的提高了识别率。 关键词:人脸识别 2DPCA 特征提取人脸检测

2DPCA Face Recognition Algorithm Based on The Research Abstract:Face recognition is a technology to detect and locate human face in an image or video streams,Including location, size, shape, number and other information of human face in an image or video streams.Due to the rapid development of computer operation speed makes the image processing technology has been widely applied in many fields in recent years. This paper's work has the following several aspects: 1)Explained the background, research scope and method of face recognition,and introduced the theoretical method of face recognition field in general. 2)The pretreatments work is based on the original ORL face database. In the image preprocessing stage, there are the color of the image processing, image geometric normalization, image equalization and image gray scale normalization four parts. After united processing, the face image is standard, which can eliminate the adverse effects of some external factors. 3)All kinds of face detection algorithm is introduced, and detailed describing the Adaboost algorithm for face detection. Through the Adaboost algorithm to create a training sample,then Training the samples of face image,and obtaining the cascade classifier to detect human face. 4)This paper introduces the facial feature points extraction based on PCA ,and 2DPCA is used on the basis of the PCA as a improved algorithm.Performance is compared between the two, it is concluds that the real time and accuracy of the latter is greater than the former.Finally the Adaboost face detection algorithm and 2DPCA are combined, which not only can greatly reduce the recognition time, but also complement each other, effectively improve the recognition rate. Key words:Face recognition 2DPCA Feature extraction Face detection

基于opencv对图像的预处理

基于opencv 对图像的预处理 1.问题描述 本次设计是基于opencv 结合c++语言实现的对图像的预处理,opencv 是用于开发实时的图像处理、计算机视觉及模式识别程序;其中图像的预处理也就是利用opencv 对图像进行简单的编辑操作;例如对图像的对比度、亮度、饱和度进行调节,同时还可以对图像进行缩放和旋转,这些都是图像预处理简单的处理方法;首先通过opencv 加载一幅原型图像,显示出来;设置五个滑动控制按钮,当拖动按钮时,对比度、亮度、饱和度的大小也会随之改变,也可以通过同样的方式调节缩放的比例和旋转的角度,来控制图像,对图像进行处理,显示出符合调节要求的图像,进行对比观察他们的之间的变化。 2.模块划分 此次设计的模块分为五个模块,滑动控制模块、对比度和亮度调节模块、饱和度调节模块、缩放调节模块、旋转调节模块,他们之间的关系如下所示: 图一、各个模块关系图 调用 调用 调用 调用 滑动控制模块 对比度和亮度调节模块 饱和度调节模块 缩放调节模块 旋转调节模块

滑动控制模块处于主函数之中,是整个设计的核心部分,通过createTrackbar创建五个滑动控制按钮并且调用每个模块实现对图像相应的调节。 3.算法设计 (1)滑动控制: 滑动控制是整个设计的核心部分,通过创建滑动控制按钮调节大小来改变相应的数据,进行调用函数实现对图像的编辑,滑动控制是利用createTrackbar(),函数中包括了滑动控制的名称,滑动控制显示在什么窗口上,滑动变量的地址和它调节的最大围,以及每个控制按钮应该调用什么函数实现什么功能; (2)对比度和亮度的调节: 对比度和亮度的调节的原理是依照线性理论,它的公式如下所示:g(x)=a* f(x) +b,其中f(x)表示源图像的像素,g(x)表示输出图像的像素,参数a(需要满足a>0)被称为增益(gain),常常被用来控制图像的对比度,参数b通常被称为偏置(bias),常常被用来控制图像的亮度; (3)饱和度的调节: 饱和度调节利用cvCvtColor( src_image, dst_image, CV_BGR2HSV )将RGB 颜色空间转换为HSV颜色空间,其中“H=Hue”表示色调,“S=Saturation”表示饱和度,“V=Value ”表示纯度;所以饱和度的调节只需要调节S的大小,H 和V的值不需要做任何的改变; (4)旋转的调节: 旋转是以某参考点为圆心,将图像的个点(x,y)围绕圆心转动一个逆时针角度θ,变为新的坐标(x1,y1),x1=rcos(α+θ),y1=rsin(α+θ),其中r是图像的极径,α是图像与水平的坐标的角度的大小; (5)缩放的调节: 首先得到源图像的宽度x和高度y,变换后新的图像的宽度和高度分别为x1和y1,x1=x*f,y1=y*f,其中f是缩放因子; 4.函数功能描述 (1)主函数main()用来设置滑动控制按钮,当鼠标拖动按钮可以得到相应的数据大小,实现手动控制的功能,当鼠标拖动对比度和亮度调节是,主函数调用

OpenCV最基础的图像处理的例子

?什么是OpenCV ?开源C/C++计算机视觉库. ?面向实时应用进行优化. ?跨操作系统/硬件/窗口管理器. ?通用图像/视频载入、存储和获取. ?由中、高层API构成. ?为Intel?公司的Integrated Performance Primitives (IPP) 提供了透明接口. ?特性: ?图像数据操作(分配,释放, 复制, 设定, 转换). ?图像与视频I/O (基于文件/摄像头输入, 图像/视频文件输出). ?矩阵与向量操作与线性代数计算(相乘, 求解, 特征值, 奇异值分解SVD). ?各种动态数据结构(列表, 队列, 集, 树, 图). ?基本图像处理(滤波, 边缘检测, 角点检测, 采样与插值, 色彩转换, 形态操作, 直方图, 图像金字塔). ?结构分析(连接成分, 轮廓处理, 距离转换, 模板匹配, Hough转换, 多边形近似, 线性拟合, 椭圆拟合, Delaunay三角化). ?摄像头标定 (寻找并跟踪标定模板, 标定, 基础矩阵估计, homography估计, 立体匹配). ?动作分析(光流, 动作分割, 跟踪). ?对象辨识 (特征方法, 隐马可夫链模型HMM). ?基本GUI(显示图像/视频, 键盘鼠标操作, 滚动条). ?图像标识 (直线, 圆锥, 多边形, 文本绘图) ?OpenCV 模块: ?cv - OpenCV 主要函数. ?cvaux - 辅助(实验性) OpenCV 函数. ?cxcore - 数据结构与线性代数算法. ?highgui - GUI函数. 资料链接 ?参考手册: ?/docs/index.htm ?网络资源: ?官方网页: https://www.doczj.com/doc/0e11407136.html,/technology/computing/opencv/?软件下载: https://www.doczj.com/doc/0e11407136.html,/projects/opencvlibrary/ ?书籍: ?Open Source Computer Vision Library by Gary R. Bradski, Vadim Pisarevsky, and Jean-Yves Bouguet, Springer, 1st ed. (June, 2006). ?视频处理例程(位于/samples/c/目录中): ?色彩跟踪: camshiftdemo ?点跟踪: lkdemo

opencv最基础的图像处理

openCV——几个实用函数 2010年12月20日星期一 09:18 1. cvSmooth:各种方法的图像平滑 void cvSmooth( const CvArr* src, CvArr* dst, int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0 ); src 输入图像. dst 输出图像. smoothtype 平滑方法: . CV_BLUR_NO_SCALE (简单不带尺度变换的模糊) - 对每个象素的param1×param2 领域求和。如果邻域大小是变化的,可以事先利用函数cvIntegral 计算积分图像。 . CV_BLUR (simple blur) - 对每个象素param1×param2邻域求和并做尺度变换 1/(param1.param2). . CV_GAUSSIAN (gaussian blur) - 对图像进行核大小为 param1×param2 的高斯卷积 . CV_MEDIAN (median blur) - 对图像进行核大小为 param1×param1 的中值滤波 (i.e. 邻域是方的). . CV_BILATERAL (双向滤波) - 应用双向 3x3 滤波,彩色 sigma=param1,空间 sigma=param2. 平滑操作的第一个参数. param2 平滑操作的第二个参数. 对于简单/非尺度变换的高斯模糊的情况,如果 param2的值为零,则表示其被设定为param1。 param3

对应高斯参数的 Gaussian sigma (标准差). 如果为零,则标准差由下面的核尺寸计算: sigma = (n/2 - 1)*0.3 + 0.8, 其中 n=param1 对应水平核, n=param2 对应垂直核. 对小的卷积核 (3×3 to 7×7) 使用如上公式所示的标准 sigma 速度会快。如果 param3 不为零,而 param1 和 param2 为零,则核大小有sigma 计算 (以保证足够精确的操作). 函数 cvSmooth 可使用上面任何一种方法平滑图像。每一种方法都有自己的特点以及局限。 没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换(与cvSobel和cvaplace相似)和32位浮点数到32位浮点数的变换格式。 简单模糊和高斯模糊支持 1- 或 3-通道, 8-比特和 32-比特浮点图像。这两种方法可以(in-place)方式处理图像。 中值和双向滤波工作于 1- 或 3-通道, 8-位图像,但是不能以 in-place 方式处理图像. 2.IplImage结构 由于OpenCV主要针对的是计算机视觉方面的处理,因此在函数库中,最重要的结构体是IplImage结构。IplImage结构来源于Intel的另外一个函数库Intel Image Processing Library (IPL),该函数库主要是针对图像处理。IplImage结构具体定义如下: typedef struct _IplImage { int nSize; /* IplImage大小 */ int ID; /* 版本 (=0)*/

OpenCV图像处理篇之图像平滑

OpenCV图像处理篇之图像平滑 图像平滑算法 图像平滑与图像模糊是同一概念,主要用于图像的去噪。平滑要使用滤波器,为不改变图像的相位信息,一般使用线性滤波器,其统一形式如下: 其中h称为滤波器的核函数,说白了就是权值。不同的核函数代表不同的滤波器,有不同的用途。 在图像处理中,常见的滤波器包括: 1.归一化滤波器(Homogeneous blur) 也是均值滤波器,用输出像素点核窗口内的像素均值代替输出点像素值。 2.高斯滤波器(Guassian blur) 是实际中最常用的滤波器,高斯滤波是将输入数组的每一个像素点与高斯内核卷积将卷积和当作输出像素值。高斯核相当于对输出像素的邻域赋予不同的权值,输出像素点所在位置的权值最大(对应高斯函数的均值位置)。二维高斯函数为,

3.中值滤波器(median blur) 中值滤波将图像的每个像素用邻域(以当前像素为中心的正方形区域)像素的中值代替。对椒盐噪声最有效的滤波器,去除跳变点非常有效。 4.双边滤波器(Bilatrial blur) 为避免滤波器平滑图像,去噪的同时,使边缘也模糊,这种情况下使用双边滤波器。关于双边滤波器的解释参见 https://www.doczj.com/doc/0e11407136.html,/rbf/CVonline/LOCAL_COPIES/MA NDUCHI1/Bilateral_Filtering.html 下面的程序将先给标准Lena图像添加椒盐噪声,分别使用4种不同的滤波器进行平滑操作,请注意观察不同滤波器对椒盐噪声的去噪效果! 程序分析及结果

上面程序的逻辑非常清晰: 1.读入灰度图,并添加椒盐噪声(6000个噪声点):

最新基于OpenCV与深度学习框架的物体图像识别

基于OpenCV与深度学习框架Caffe的物体图像识别 摘要:本文主要介绍深度神经网络中的卷积神经的相关理论与技术。研究采用OpenCV深度学习模块DNN与深度学习框架Caffe进行物体识别。采用OpenCV 中的DNN模块加载深度学习框架Caffe模型文件,对物体图像进行识别。实验结果表明,卷积神经网络在物体的识别方面具有较高的准确率。 一.概述 1.1 OpenCV简介 OpenCV于1999年由Intel建立,如今由Willow Garage提供支持。OpenCV 是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列C 函数和少量C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。其最新版本是3.2,于2016年12月23日发布。OpenCV致力于真实世界的实时应用,通过优化的C代码的编写对其执行速度带来了可观的提升,并且可以通过购买Intel的IPP高性能多媒体函数库(Integrated Performance Primitives)得到更快的处理速度。在其最新版3.2版本中,已经添加了深度神经网络模块,并支持深度学习框架Caffe模型(Caffe framework models)。 1.2 深度学习框架Caffe简介 Caffe(Convolutional Architecture for Fast Feature Embedding)是一个清晰而高效的深度学习框架,其作者是博士毕业于UC Berkeley的贾扬清,曾在Google 工作,现任Facebook研究科学家。Caffe是纯粹的C++/CUDA架构,支持命令行、Python和MATLAB接口;可以在CPU和GPU直接无缝切换。Caffe的优势

图像处理经典算法及OpenCV程序

基于opencv的use摄像头视频采集程序 (1) 基于opencv的两个摄像头数据采集 (3) 能激发你用代码做视频的冲动程序 (6) 图像反转(就是把黑的变白,白的变黑) (11) 图像格式的转换 (12) 从摄像头或者A VI文件中得到视频流,对视频流进行边缘检测 (13) 采用Canny算子进行边缘检测 (15) 角点检测 (18) 图像的旋转加缩放(效果很拽,用地球做就像谷歌地球似的) (21) Log-Polar极坐标变换 (22) 对图像进行形态学操作(图像的开闭,腐蚀和膨胀运算) (24) 用不同的核进行图像的二维滤波 (27) 图像域的填充 (30) 寻找轮廓实现视频流的运动目标检测(超推荐一下) (35) 采用金字塔方法进行图像分割 (40) 图像的亮度变换 (43) 单通道图像的直方图 (46) 计算和显示彩色图像的二维色调-饱和度图像 (48) 图像的直方图均匀化 (50) 用Hongh变换检测线段 (52) 利用Hough变换检测圆(是圆不是椭圆) (57) 距离变换 (59) 椭圆曲线拟合 (64) 由点集序列或数组创建凸外形 (68) Delaunay三角形和V oronoi划分的迭代式构造 (71) 利用背景建模检测运动物体(推荐) (78) 运动模板检测(摄像头) (81) 显示如何利用Camshift算法进行彩色目标的跟踪 (86) 基于opencv的use摄像头视频采集程序 准备工作:你得把opencv库装到电脑上,并把各种头文件,源文件,lib库都连到vc上,然后设置一下系统环境变量,这里这方面就不说了,好像我前面的文章有说过,不懂也可百度一下。 建立一个基于WIN32控制台的工程CameraUSB,在新建一个c++元文件,写代码: #include "cxcore.h" #include "cvcam.h" #include "windows.h" #include "highgui.h"

OPENCV图像处理常用函数

图像处理和图像识别中常用的OpenCV函数 2011-02-21 19:25:42|分类:默认分类|字号订阅 1、cvLoadImage:将图像文件加载至内存; 2、cvNamedWindow:在屏幕上创建一个窗口; 3、cvShowImage:在一个已创建好的窗口中显示图像; 4、cvWaitKey:使程序暂停,等待用户触发一个按键操作; 5、cvReleaseImage:释放图像文件所分配的内存; 6、cvDestroyWindow:销毁显示图像文件的窗口; 7、cvCreateFileCapture:通过参数设置确定要读入的AVI文件; 8、cvQueryFrame:用来将下一帧视频文件载入内存; 9、cvReleaseCapture:释放CvCapture结构开辟的内存空间; 10、cvCreateTrackbar:创建一个滚动条; 11、cvSetCaptureProperty:设置CvCapture对象的各种属性; 12、cvGetCaptureProperty:查询CvCapture对象的各种属性; 13、cvGetSize:当前图像结构的大小; 14、cvSmooth:对图像进行平滑处理; 15、cvPyrDown:图像金字塔,降采样,图像缩小为原来四分之一; 16、cvCanny:Canny边缘检测; 17、cvCreateCameraCapture:从摄像设备中读入数据; 18、cvCreateVideoWriter:创建一个写入设备以便逐帧将视频流写入视频文件; 19、cvWriteFrame:逐帧将视频流写入文件; 20、cvReleaseVideoWriter:释放CvVideoWriter结构开辟的内存空间; 21、CV_MAT_ELEM:从矩阵中得到一个元素;

基于qt+opencv数字图像处理实验一般步骤

基于QtCreator+openCV的数字图像处理实验一般步骤 一、新建Qt Widgets Application项目 二、设计应用界面 1.拖放所需控件 2.应用布局 3.修改界面各个对象的文本和名称 三、复制图像类型转换类单元文件到项目文件夹 Imageconversion是用于Qt图像对象类型与OpenCV图像对象类型直接的转换,是整理自网络,把这两个文件复制到项目文件夹下,方便使用。 四、在构建文件和有关文件头包含openCV库 1. 在项目文件“项目名称.pro”文件(*.pro 基本上是构建工程项目时由Qt 处理的第一个文件,这个文件称为Qt 项目文件,一个名为“qmake”的内部Qt 程序负责处理该文件最后添加如下指令语句: include(E:\openCV\opencv331.pri) 看起来是这样的:

其中opencv331.pri的文件含openCV包含路径和库文件路径,可以把这些路径信息直接一一写在Qt项目文件中,但是比较麻烦。把这些路径信息统一写在一个文件里面,方便使用。这个需要根据用户的实际安排情况调整,我的opencv331.pri文件内容如下: INCLUDEPATH+=E:\openCV\opencv331build\install\include LIBS+=E:\openCV\opencv331build\install\x86\mingw\bin\libopencv_core331.dll LIBS+=E:\openCV\opencv331build\install\x86\mingw\bin\libopencv_highgui331.dll LIBS+= E:\openCV\opencv331build\install\x86\mingw\bin\libopencv_imgcodecs331.dll LIBS+=E:\openCV\opencv331build\install\x86\mingw\bin\libopencv_imgproc331.dll LIBS+= E:\openCV\opencv331build\install\x86\mingw\bin\libopencv_features2d331.dll LIBS+=E:\openCV\opencv331build\install\x86\mingw\bin\libopencv_calib3d331.dll 2.在头文件中包含opencv、图像数据类型转换以及常用Qt控件 #include//Qt图像类,适用于屏显 #include//打开文件对话框 #include//文件信息类 #include//用于管理2D图形对象 #include//Qt字符串类 #include//弹出窗口类 #include//openCV头文件 #include//OpenCV头文件 #include"imageconversion.h"//图像数据类型转换 using namespace cv; 五、在mainwindow.h声明私有数据成员 1. 与图像读、写和显示有关的几个数据成员: QGraphicsScene sceneL,sceneR,scene;//与QgraphicsView配合显示图像 QPixmap pixmapL,pixmapR,pixmap; //用于读、写图像 //以后参数根据需要定义

基于OpenCV的图像处理

基于OpenCV的图像处理Image Processing Based On OpenCV 摘要:OpenCV是近年来最受欢迎的计算机视觉应用库。在其基础上编写图像处理代码效率得到有效提高。本文旨在对OpenCV进行一个快速全面简介,通过介绍其数据结构、HighGUI库,图像处理函数使读者能快速形成对OpenCV印象。文章详细介绍了2.4.4版本在VS2010中的安装测试说明。读者能够在此基础上架构自己代码。文章最后通过自适应阈值分割实例来介绍OpenCV的具体应用。 关键词:OpenCV VS2010 图像处理KeyWords: OpenCV VS2010 image processing Abstract: OpenCV is one of the most popular computer vision library in recent years. Prepared on the basis of its image processing code efficiency improved effectively. This paper aims to OpenCV for a rapid and comprehensive introduction, through the presentation of its data structures, HighGUI libraries, image processing functions so that readers can quickly form on the OpenCV impression. Finally, version 2.4.4 introduced in detail the installation in VS2010 test instructions. On this basis, the reader can structure their own code. Finally, the paper uses adaptive thresholding examples to introduce specific application of OpenCV. OpenCV诞生于Inter研究中心,采用C/C++编写,包含覆盖计

毕业设计:基于OpenCV的人脸识别算法(终稿)-精品

安徽工业大工商学院 毕业学士论文 基于OpenCV的人脸识别算法 姓名:陈滔 申请学位级别:学士专业:测控技术与仪器 指导教师:方挺

摘要 人脸在社会交往中扮演着十分重要的角色,是人类在确定一个人身份时所采用的最普通的生物特征,研究人脸跟踪识别及其相关技术具有十分重要的理论价值和应用价值。彩色图像序列的人脸检测、跟踪与识别技术是随着计算机技术的高速发展和视频监控等应用的需要在近几年才逐渐成为一个研究热点。本文着重构建一套人脸跟踪识别系统,致力于精确实时地对彩色视频中的人脸图像检测跟踪,并可以将跟踪到的人脸图片传输到识别端进行身份识别。系统分为客户端和服务器两部分。针对传统Camshifl跟踪算法进行形态学处理、分配多个跟踪器等改进后的算法应用于客户端进行多人脸的跟踪。服务器端首先将人脸图像按其主要特征进行分块,再对分块图执行Eigenface算法实现人脸身份的识别。这套系统完成了对多人脸的跟踪效果,可广泛的应用于各种安防系统之中如:ATM机监控系统,门禁系统等。

Abstract Human face is 0111"primary focus of attention in social intercourse playingamajor rolei conveying dentity and emotion.Researchonthe face tracking,recognition technology has great theoreticaland practical value.This paper focusesOilbuildingasetofhumanface recognition and trackingsystem tocommitted toaccurate and real-timecolorvideoimages,andcalltransmit the tracked human face image to the recognition part to identify the person’S status.Thesystem is divided into client and server parts.Thetracking algorithm whichcarrieson morphology processing after traditional track algorithm Camshifl and assignments severaltrackingdevices is applied to the client for duplex facetracking.Theserver—side first divides the person face image into blocksaccording to its chief feature,then the blocksuses the Eigenfacealgorithm separately to realize the person’S status recognition.The system implementation for multiple face trackingcallbe widelyused among the various security systems,suchas:ATM machine monitoring system,accesscontrol system.Keywords:Face DetectionFace TrackingFace Recognition Eigenface Camshift

相关主题
文本预览
相关文档 最新文档