机器视觉中常用图像处理算法机器视觉就是用机器代替人眼来做测量和判断。
机器视觉系统是指通过机器视觉产品(即图像摄取装置,分CMOS 和CCD 两种)将被摄取目标转换成图像信号,传送给专用的图像处理系统,得到被摄目标的形态信息,根据像素分布和亮度、颜色等信息,转变成数字化信号;图像系统对这些信号进行各种运算来抽取目标的特征,进而根据判别的结果来控制现场的设备动作。
机器视觉是使用计算机(也许是可移动式的)来模拟人的视觉,因此模拟才是计算机视觉领域的最终目标,而真正意义上的图像处理侧重在“处理”图像:如增强,还原,去噪,分割,等等,如常见的Photoshop就是功能强大的图像处理软件。
大部分的机器视觉,都包含了图像处理的过程,只有图像处理过后,才能找到图像中需要的特征,从而更进一步的执行其它的指令动作。
在我们实际工程应用中研究的一些图像算法,实际上是属于机器视觉,而不是纯粹的图像处理。
总的来说,图像处理技术包括图像压缩,增强和复原,匹配、描述和识别3个部分,在实际工程中,这几块不是独立的,往往是环环相扣、相互辅助来达到实际效果。
接下来简单介绍一下机器视觉中常用的图像处理算法。
一、滤波滤波一般在图像预处理阶段中使用,改善图像信息,便于后续处理,当然,这不是绝对的,在图像算法过程中如果有需要,随时可以进行滤波操作。
比较常用的滤波方法有以下三种:1、均值滤波均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。
线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(,)x y,选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(,)g x y,即x y,作为处理后图像在该点上的灰度值(,)波方法可以平滑图像,速度快,算法简单。
但是无法去掉噪声,只能减弱噪声。
2、中值滤波中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。
其实现过程为:1)从图像中的某个采样窗口取出奇数个数据进行排序2)用排序后的中值作为当前像素点的灰度值在图像处理中,中值滤波常用来保护边缘信息,是经典的平滑噪声的方法,该方法对消除椒盐噪声非常有效,在光学测量条纹图像的相位分析处理方法中有特殊作用。
3、高斯滤波高斯滤波是一种线性平滑滤波,适用于滤除高斯白噪声,已广泛应用于图像处理的预处理阶段。
对图像进行高斯滤波就是对图像中的每个点的像素值进行计算,计算准则是,由该点本身灰度值及其邻域内的其他像素灰度值加权平均所得,而加权平均的权系数由二维离散高斯函数采样并归一化后所得。
离散的高斯卷积二、图像分割图像分割就是把图像分成若干个特定的、具有独特性质的区域并提取出感兴趣目标的技术和过程。
它是由图像处理到图像分析的关键步骤。
现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。
图像分割后提取出的目标可以用于图像语义识别、图像搜索等领域。
1、阈值分割法最常用的阈值分割方法有最大类间方差法(OTSU)、最小误差法、最大熵法等方法,其中,OSTU算法应用最多。
最大类间方差法OTSU算法又称为大津算法,是在判决分析最小二乘法原理的基础上,推导得出的自动选取阈值的二值化方法,其基本思想是将图像直方图用某一灰度值分割成两组,当被分割成的两组方差最大时,此灰度值就作为图像二值化处理的阈值。
OSTU阈值法有较好的鲁棒性,使用范围比较广,不论图像的直方图有无明显的双峰,都能得到比较满意的分割效果。
设灰度图像(,)f x y 的灰度级为0:L ,灰度级i 的像素数为i n ,则图像中总像素数为0L i i N n ==∑,灰度级i 出现的概率为i i p n N =,0i p ≥,01Li i p ==∑,总的灰度平均值为0Li i ip μ==∑。
设阈值k 将灰度级分为两组0C 、1C ,分别代表背景和目标:00:C k =,11:C k L =+,则有:0C 产生的概率:00ki k i p ωω===∑1C 产生的概率:111L i k i k p ωω=+==-∑ 0C 的均值:000k ik i k ip μμωω===∑,其中0k k i i ip μ==∑ 1C 的均值:1111L ik i k kip μμμωω=+-==-∑ 则两组间的数学期望为:0011ωμωμμ+=按照模式识别理论,可求出这两类的类间方差为:以类间方差2()k σ作为衡量不同阈值导出的类别分离性能的测量准则,极大化2()k σ的过程就是自动确定阈值的过程,因此,最佳阈值h T 为:20arg max ()h k LT k σ≤≤= 因方差是灰度分布均匀性的一种度量,方差值越大,说明构成图像的两部分差别越大,当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小,因此类间方差最大的分割意味着错分概率最小。
2、基于区域的分割法区域增长法是一种比较普遍的方法,在没有先验知识可以利用时,可以取得最佳的性能,可以用来分割比较复杂的图像,如自然景物。
但是,区域增长方法是一种迭代的方法,空间和时间开销都比较大。
区域生长的基本思想是将具有相似性质的像素集合起来构成区域。
具体先对每个需要分割的区域找一个种子像素作为生长起点,然后将种子像素和周围邻域中与种子像素有相同或相似性质的像素(区域内像素的相似性度量可以包括平均灰度值、纹理、颜色等信息)合并到种子像素所在的区域中。
将这些新像素当作新的种子继续上面的过程,直到没有满足条件的像素可被包括进来。
这样一个区域就生长成了。
除此之外还有区域分裂合并的方法,基本思想是先确定一个分裂合并的准则,即区域特征一致性的测度,当图像中某个区域的特征不一致时就将该区域分裂成4个相等的子区域,当相邻的子区域满足一致性特征时则将它们合成一个大区域,直至所有区域不再满足分裂合并的条件为止。
当分裂到不能再分的情况时,分裂结束,然后它将查找相邻区域有没有相似的特征,如果有就将相似区域进行合并,最后达到分割的作用。
在一定程度上区域生长和区域分裂合并算法有异曲同工之妙,互相促进相辅相成的,区域分裂到极致就是分割成单一像素点,然后按照一定的测量准则进行合并,在一定程度上可以认为是单一像素点的区域生长方法。
区域生长比区域分裂合并的方法节省了分裂的过程,而区域分裂合并的方法可以在较大的一个相似区域基础上再进行相似合并,而区域生长只能从单一像素点出发进行生长(合并)。
一致性准则的选择及阈值设定是影响区域分割算法的关键因素。
3、活动轮廓的分割法最经典、使用最广的活动轮廓模型是Snake模型,它以构成一定形状的一些控制点为模板(轮廓线),通过模板自身的弹性形变,与图像局部特征相匹配达到调和,即某种能量函数极小化,完成对图像的分割。
再通过对模板的进一步分析而实现图像的理解和识别。
Snake模型首先需要在感兴趣区域的附近给出一条初始曲线,接下来最小化能量泛函,让曲线在图像中发生变形并不断逼近目标轮廓。
其中第1项称为弹性能量是v的一阶导数的模,第2项称为弯曲能量,是v的二阶导数的模,第3项是外部能量(外部力),在基本Snakes模型中一般只取控制点或连线所在位置的图像局部特征例如梯度:三、特征提取1、HOG特征方向梯度直方图(Histogram of Oriented Gradient ,HOG )特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。
它通过计算和统计图像局部区域的梯度方向直方图来构成特征。
HOG 特征结合SVM 分类器已经被广泛应用于图像识别中,尤其在行人检测中获得了极大的成功。
HOG+SVM 进行行人检测的方法是法国研究人员Dalal 在2005的CVPR 上提出的,如今虽然有很多行人检测算法不断提出,但基本都是以HOG+SVM 的思路为主。
HOG 特征的提取过程如下:图像中像素点(,)x y 的梯度为:(,)(1,)(1,)(,)(,1)(,1)x y G x y I x y I x y G x y I x y I x y =+--=+-- ,其中,(,)x G x y 、(,)y G x y 和(,)I x y 分别表示输入图像中像素点(,)x y 处的水平方向梯度、垂直方向梯度和像素值。
像素点(,)x y 处的梯度幅值和梯度方向分别为:这一步的目的是为局部图像区域提供一个编码。
将图像分成若干个“单元格cell”,例如每个cell为6*6个像素。
假设采用9个bin的直方图来统计这6*6个像素的梯度信息。
也就是将cell的梯度方向360度分成9个方向块,如图所示:例如:如果这个像素的梯度方向是20-40度,直方图第2个bin的计数就加上这个像素的梯度幅值,这样,对cell内每个像素用梯度方向在直方图中进行加权投影(映射到固定的角度范围),就可以得到这个cell的梯度方向直方图了,就是该cell对应的9维特征向量(因为有9个bin)。
4)把细胞单元组合成大的块(block),块内归一化梯度直方图由于局部光照的变化以及前景-背景对比度的变化,使得梯度强度的变化范围非常大。
这就需要对梯度强度做归一化。
归一化能够进一步地对光照、阴影和边缘进行压缩。
方法是:把各个细胞单元组合成大的、空间上连通的区间(blocks)。
这样,一个block内所有cell的特征向量串联起来便得到该block的HOG特征。
这些区间是互有重叠的,这就意味着:每一个单元格的特征会以不同的结果多次出现在最后的特征向量中,归一化之后的块描述符(向量)就称之为HOG描述符。
5)收集HOG特征最后一步就是将检测窗口中所有重叠的块进行HOG特征的收集,并将它们结合成最终的特征向量供分类器使用。
2、SIFT特征SIFT特征是具有尺度不变性的局部特征检测算法。
整个算法分为以下几个部分:1)构建尺度空间这是一个初始化操作,通过生成尺度空间来创建原始图像的多层表示以保证尺度不变性。
高斯卷积核是实现尺度变换的唯一线性核,一幅二维图像的尺度空间定义为:中间的检测点和它同尺度的8个相邻点和上下相邻尺度对应的9×2个点共26个点比较,以确保在尺度空间和二维图像空间都检测到极值点。
一个点如果在DOG 尺度空间本层以及上下两层的26个领域中是最大或最小值时,就认为该点是图像在该尺度下的一个特征点。
在极值比较的过程中,每一组图像的首末两层是无法进行极值比较的,为了满足尺度变化的连续性,在每一组图像的顶层继续用高斯模糊生成 3 幅图像,所以,高斯金字塔有每组S+3层图像,DOG 金字塔每组有S+2层图像。
3) 除去不好的特征点这一步本质上要去掉DoG 局部曲率非常不对称的像素。
通过拟和三维二次函数精确确定关键点的位置和尺度(达到亚像素精度),同时去除低对比度的关键点和不稳定的边缘响应点(因为DoG 算子会产生较强的边缘响应),以增强匹配稳定性、提高抗噪声能力,使用近似Harris 角点检测器。