一、基本概念与原理
1.图像的组成:指的是图像的光学组成概念。图像是由很多具备色彩种类、亮度等级信息的基本像素点组成的,是二维图像用有限数字数值像素的表示。而数字图像又称为数码图像、数位图像。
2.基本过程:
图像识别通常有轮廓识别、特征识别、色彩识别、物体识别等,其中轮廓识别是重中之重。而图像识别的基本流程为:信息获取图像采集->图像预处理得到特征数据->训练过程->识别。
3.几个基本概念:
3.1模式识别:大致分为结构方法和决策理论方法(又称统计方法)。常用方法之一是模板匹配,即在输入图像上不断切割出临时图像,再与模板图像进行匹配。
3.2支持向量机(SVM):SVM是从线性可分情况下的最优分类超平面发展而来的。它是一种分类器,是一种可训练的、基于结构风险最小化原则的通用机器学习方法,时线性化和升维的过程。
3.3OpenCV:基于BSD许可证授权发行的跨平台计算机视觉库。
3.4LIBSVM:一个简单、易于使用的SVM模式识别与回归软件包。
二、热门应用与方向:
图像识别主要经历了三个阶段:对文字信息的识别,对数字化信息的识别,和对物体的识别。图像识别经过这三个阶段不断发展,充分发挥自身特点与优势,逐步拓展至各个领域,与各行业技术相结合。图像识别技术的主要应用与发展方向有字符识别、机器视觉识别、图形图像识别、生物医学等。
在交通领域,图像识别技术主要应用于ITS系统中,在道路识别、车辆车牌检测等方面展现出巨大优势;在安防领域,基于图像识别技术的视频智能分析系统能够实现人脸识别、人脸支付、智能自动化监控等;在医学领域,CT技术实际上就是图像识别技术的拓展应用,微创手术中的手术导航技术也运用了图像识别技术,同时,在心脏、脑结构等器官识别方面也有着不可替代的地位;而在农业领域,图像识别技术在病虫害诊断、检测农作物生长等方面也发挥了巨大总用。下面将主要对从智能识别车牌和人脸识别所用到的图像识别技术进行阐述。
1.智能识别车牌
1.1图像特征提取
1.1.1像素特征提取:将图像像素点黑白二值化(黑色为1,白色为0)。对1和0进行排列,通过维数和像素点个数确定对应的向量矩阵。
1.1.2骨架特征提取:图像线条宽度会影响识别效果,所以要先对轮廓的宽度进行统一处理,再进行骨架特征提取,得到对应的特征向量矩阵。
1.1.3图像特征点提取:主要方法有梯度统计、弧度统计、角点提取等。原理是将字符均分为8个模块,计算黑色像素点个数作为8个象限的特征。
1.2图像分割
1.2.1灰度转化:对256色位图图像进行灰度化处理,转化为灰度图像。
1.2.2二值化:将灰度图像中像素进行灰度值获取分化,处理为黑白二色,结合阈值法得到转化后的图像。
1.2.3梯度锐化处理:常用方法为微分法和高通滤波法。利用微分法求得梯度,利用差分运算近似值计算图像边缘的像素值,可以使边缘模糊的图像清晰化。
1.2.4噪声处理:图像处理时有明显的信号集中时,扫描周边信号,若信号强烈且在一定范围内,则认为是非离散信号;若周边信号较弱,则认为是离散信号,需要去除。
1.2.5车牌字符分割算法:主要有垂直投影法、静态边界法及连通区域法。垂直投影法利用字符块块在垂直方向上的投影的特点展开;静态边界法利用车牌的模板进行分割;连通区域法利用字符连通域的特点对车牌字符进行分割。
1.2.6同一图像中对不同尺寸、位置的字符进行归一处理:通过等比例缩放、归一处理等方法,将不同的字符图像转化为相对统一的字符,提高识别准确率。
2.人脸识别
人脸识别技术主要可以分为三类:基于几何特征的方法、基于模板的方法和基于模型的方法。
2.1基于几何特征的方法
是最早、最传统的方法,需与其它算法相结合才有较好效果。几何特征最早用于人脸侧面轮廓的描述与识别。首先根据侧面轮廓曲线确定若干显著点,并由这些点导出一组用于识别的特征度量(如距离、角度)。
可变模型法可视为几何特征方法的一种改进。其思想是设计一个参数可变的器官模型。定义一个能量参数,通过调整模型参数使能量函数最小化,此时的模型参数即作为该器官的几何特征。
2.2特征脸法
又称为基于主成分分析(PCA)的人脸识别方法。其基本思想是从统计的观点,寻找人脸图像分布的基本元素,即人脸图像样本集协方差矩阵的特征向量,以此近似的表征人脸图像。
2.3基于弹性模型的方法
Lades等人针对畸变不变形的物体识别提出了动态链接模型。将物体用稀疏图形来描述,应用塑形图形匹配技术来寻找最近的已知图形。Nastar将人脸图像建模成可变形的3D网格表面,将人脸匹配的问题转化为可变性曲面的弹性匹配问题。Lanitis等提出灵活表现模型方法,通过定位人脸的显著特征点将人脸编码为83个模型参数,并利用辨别分析的方法进行基于形状信息的人脸识别。
弹性图匹配技术是一种基于几何特征和对灰度分布信息进行小波纹理分析相结合的识别算法,由于该算法较好的利用了人脸的结构和灰度分布信息,而且还具有自动精确定位面部特征点的功能,因而具有良好的识别效果,适应性强识别率较高,该技术在FERET测试中若干指标名列前茅,其缺点是时间复杂度高,速度较慢,实现复杂。
2.4神经网络方法
神经网络算法可以通过学习的过程获得对这些规律和规则的隐性表达,它通过需要将人脸作为一个一维向量输入,因此识别的一个重要目标就是降维处理。
Valentin提出一种方法,首先提取人脸的 50个主元,然后用自相关神经网络将它映射到 5维空间中,再用一个普通的多层感知器进行判别,对一些简单的测试图像效果较好;Intrator等提出了一种混合型神经网络来进行人脸识别,其中非监督神经网络用于特征提取,而监督神经网络用于分类。Lee等将人脸的特点用六条规则描述,然后根据这六条规则进行五官的定位,将五官之间的几何距离输入模糊神经网络进行识别,效果较一般的基于欧氏距离的方法有较大改善,Laurence等采用卷积神经网络方法进行人脸识别,由于卷积神经网络中集成了相邻像素之间的相关性知识,从而在一定程度上获得了对图像平移、旋转和局部变形的不变性,因此得到非常理想的识别结果,Lin等提出了基于概率决策的神经网络方法 (PDBNN),其主要思想是采用虚拟 (正反例 )样本进行强化和反强化学习,从而得到较为理想的概率估计结果,并采用模块化的网络结构 (OCON)加快网络的学习。
三、主要算法
1.斑点检测原理与举例:
1.1 LoG与DoH
斑点检测的方法主要包括利用高斯拉普拉斯算子检测的方法(LOG),以及利用像素点Hessian矩阵(二阶微分)及其行列式值的方法(DOH)。
利用高斯拉普通拉斯(Laplace of Gaussian,LOG)算子检测图像斑点是一种十分常用的方法,对于二维高斯函数:
它的规范化高斯拉普变换为:
因为二维高斯函数的拉普拉斯核很像一个斑点,所以可以利用卷积来求出图像中的斑点状的结构。
DoH方法就是利用图像点二阶微分Hessian矩阵:
以及它的行列式的值DoH(Determinant of Hessian):
Hessian矩阵行列式的值,同样也反映了图像局部的结构信息。与LoG相比,DoH对图像中的细长结构的斑点有较好的抑制作用。
1.2 SIFT
该算法大概可以归纳为三步:1)高斯差分金字塔的构建;2)特征点的搜索;3)特征描述。
在第一步中,它用组与层的结构构建了一个具有线性关系的金字塔结构,让我们可以在连续的高斯核尺度上查找特征点。它比LoG高明的地方在于,它用一阶高斯差分来近似高斯的拉普拉斯核,大大减少了运算量。
在第二步的特征点搜索中,主要的关键步骤是极值点的插值,因为在离散的空间中,局部极值点可能并不是真正意义上的极值点,真正的极植点可以落在了离散点的缝隙中。所以要对这些缝隙位置进行插值,然后再求极值点的坐标位置。
最后一步,即为特征点的特征描述。特征点的方向的求法是需要对特征点邻域内的点的梯度方向进行直方图统计,选取直方图中比重最大的方向为特征点的主方向,还可以选择一个辅方向。在计算特征矢量时,需要对局部图像进行沿主方向旋转,然后再进邻域内的梯度直方图统计(4x4x8)。
1.3 SURF
2006年,Bay和Ess等人基于SIFT算法的思路,提出了加速鲁棒特征(SURF),该算法主要针对于SIFT算法速度太慢,计算量大的缺点,使用了近似Harr小波方法来提取特征点,这种方法就是基于Hessian行列式(DoH)的斑点特征检测方法。通过在不同的尺度上利用积分图像可以有效地计算出近似Harr小波值,简化了二阶微分模板的构建,搞高了尺度空间的特征检测的效率。SURF算法在积分图像上使用了盒子滤波器对二阶微分模板进行了简化,从而构建了Hessian矩阵元素值,进而缩短了特征提取的时间,提高了效率。
其中和为利用盒子滤波器获得的近似卷积值。如果大于设置的门限值,则判定该像素点为关键字。然后与SIFT算法近似,在以关键点为中心的像素邻域内进行非极大值抑制,最后通过对斑点特征进行插值运算,完成了SURF特征点的精确定位。而SURF特征点的描述,则也是充分利用了积分图,用两个方向上的Harr小波模板来计算梯度,然后用一个扇形对邻域内点的梯度方向进行统计,求得特征点的主方向。
2.角点检测与举例
2.1 Harris角点特征提取
Harris角点检测是一种基于图像灰度的一阶导数矩阵检测方法。检测器的主要思想是局部自相似性/自相关性,即在某个局部窗口内图像块与在各个方向微小移动后的窗口内图像块的相似性。在像素点的邻域内,导数矩阵描述了数据信号的变化情况。假设在像素点邻域内任意方向上移动块区域,若强度发生了剧烈变化,则变化处的像素点为角点。定义的Harris矩阵为:
其中,和分别为点在和方向上的强度信息的一阶导数,为对应位置的权重。通过计算Harris矩阵的角点响应值R来判断是否为角点。其计算公式为:
其中,det和trace为行列式和迹的操作符,是取值为0.04~0.06的常数。当角点响应值大于设置的门限,且为该点邻域内的局部最大值时,则把该点当作角点。
2.2 FAST角点特征提取
基于加速分割测试的FAST算法可以快速地提取出角点特征。该算法判断一个候选点是否为角点,依据的是在一个像素点为圆心,半径为3个像素的离散化Bresenllam圆周上,在给定阈值的条件下,如果在圆周上有个连续的像素灰度值大于或小于。针对于上面的定义,我们可以用快速的方法来完成检测,而不用把圆周上的所有点都比较一遍。首先比较上下左右四个点的像素值关系,至少要有3个点的像素灰度值大于或小于,则为候选点,然后再进一步进行完整的判断。
3.二进制字符串特征描述子
特征描述是实现图像匹配与图像搜索必不可少的步骤。到目前为止,人们研究了各种各样的特征描述子,比较有代表性的就是浮点型特征描述子和二进帽字符串特征描述子。
3.1 BRIEF算法
BRJEF算法的主要思想是:在特征点周围邻域内选取若干个像素点对,通过对这些点对的灰度值比较,将比较的结果组合成一个二进制串字符串用来描述特征点。最后,使用汉明距离来计算在特征描述子是否匹配。
3.2 BRISK算法
BRISK算法在特征点检测部分没有选用FAST特征点检测,而是选用了稳定性更强的AGAST算法。在特征描述子的构建中,BRISK算法通过利用简单的像素灰度值比较,进而得到一个级联的二进制比特串来描述每个特征点,这一点上原理与BRIEF是一致的。BRISK算法里采用了邻域采样模式,即以特征点为圆心,构建多个不同半径的离散化Bresenham同心圆,然后再每一个同心圆上获得具有相同间距的N个采样点。
由于这种邻域采样模式在采样时会产生图像灰度混叠的影响,所以BRISK算法首先对图像进行了高斯平滑图像。并且使用的高斯函数标准差与各自同心圆上点间距成正比。
3.3 ORB算法
ORB算法使用FAST进行特征点检测,然后用BREIF进行特征点的特征描述,但是我们知道BRIEF并没有特征点方向的概念,所以ORB在BRIEF基础上引入了方向的计算方法,并在点对的挑选上使用贪婪搜索算法,挑出了一些区分性强的点对用来描述二进制串。
3.4 FREAK算法
Fast Retina KeyPoint,即快速视网膜关键点。根据视网膜原理进行点对采样,中间密集一些,离中心越远越稀疏。并且由粗到精构建描述子,穷举贪婪搜索找相关性小的。42个感受野,一千对点的组合,找前512个即可。这512个分成4组,前128对相关性更小,可以代表粗的信息,后面越来越精。匹配的时候可以先看前16bytes,即代表精信息的部分,如果距离小于某个阈值,再继续,否则就不用往下看了。
四、主流工具库比较
1.OpenCV
功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善,操作手册很详细,手册首先给大家补计算机视觉的知识,几乎涵盖了近10年内的主流算法;然后将图像格式和矩阵运算,然后将各个算法的实现函数。该库显示图像极其方便,但不大稳定,对32F和16S、8U的图像数据支持上bug重重。支持CVS。另外该库用的是IPL矩阵库,速度较快。
2.CxImage
该开发包完全开放源代码,图像封装为一个类,功能极为强大,与Windows、MFC支持极好,支持图像的多种操作(线性滤波、中值滤波、直方图操作、旋转缩放、区域选取、阈值处理、膨胀腐蚀、alpha混合等等),支持从文件、内存或者win32api定义的位图图像格式中读取图像,支持将图像显示在任意窗口,而且对像素的操作很方便,另外还有一个界面很强的demo,可以直接在上面进行二次开发。但该库速度稍慢,不如后面提到的freeimage。
3. CImg
就一个.h文件所以用起来很简明,但功能上不如CxImage全面,可以与CxImage配合使用。CImg提供了基于lapack的矩阵运算函数和完善的线性滤波卷积函数,使用其做像素运算较为方便。另外,独有Display类可以方便的实现各种显示,包括显示图像、打字、画线等等。
4. FreeImage
C语言的体系,大量使用指针运算速度可以保证,内含先进的多种插值算法。另外独有的支持meta exif信息的读取。该库最大的特点就是比较简练,只把重点放在对各种格式图像的读取写入支持上,没有显示部分,实际编程的时候还是需要调用API函数进行显示。
参考文献: