机器视觉中常用图像处理算法
机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统是指通过机器视觉产品(即图像摄取装置,分 CMOS 和CCD 两种)将被摄取目标转换成图像信号,传送给专用的图像处理系统,得到被摄目标的形态信息,根据像素分布和亮度、颜色等信息,转变成数字化信号;图像系统对这些信号进行各种运算来抽取目标的特征,进而根据判别的结果来控制现场的设备动作。机器视觉是使用计算机(也许是可移动式的)来模拟人的视觉,因此模拟才是计算机视觉领域的最终目标,而真正意义上的图像处理侧重在“处理”图像:如增强,还原,去噪,分割,等等,如常见的Photoshop就是功能强大的图像处理软件。大部分的机器视觉,都包含了图像处理的过程,只有图像处理过后,才能找到图像中需要的特征,从而更进一步的执行其它的指令动作。在我们实际工程应用中研究的一些图像算法,实际上是属于机器视觉,而不是纯粹的图像处理。总的来说,图像处理技术包括图像压缩,增强和复原,匹配、描述和识别3个部分,在实际工程中,这几块不是独立的,往往是环环相扣、相互辅助来达到实际效果。接下来简单介绍一下机器视觉中常用的图像处理算法。 一、 滤波
滤波一般在图像预处理阶段中使用,改善图像信息,便于后续处理,当然,这不是绝对的,在图像算法过程中如果有需要,随时可以进行滤波操作。比较常用的滤波方法有以下三种:
1、均值滤波
均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。线性滤波的基本原理是用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y),选择一个模板,该模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y),作为处理后图像在该点上的灰度值g(x,y),即
g(x,y)?1?f(x,y),m为该模板中包含当前像素在内的像素总个数。这种滤m波方法可以平滑图像,速度快,算法简单。但是无法去掉噪声,只能减弱噪声。
2、中值滤波
1
中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。其实现过程为:
1) 从图像中的某个采样窗口取出奇数个数据进行排序 2) 用排序后的中值作为当前像素点的灰度值
在图像处理中,中值滤波常用来保护边缘信息,是经典的平滑噪声的方法,该方法对消除椒盐噪声非常有效,在光学测量条纹图像的相位分析处理方法中有特殊作用。
3、高斯滤波
高斯滤波是一种线性平滑滤波,适用于滤除高斯白噪声,已广泛应用于图像处理的预处理阶段。对图像进行高斯滤波就是对图像中的每个点的像素值进行计算,计算准则是,由该点本身灰度值及其邻域内的其他像素灰度值加权平均所得,而加权平均的权系数由二维离散高斯函数采样并归一化后所得。离散的高斯卷积核H:(2k?1)?(2k?1)维,其元素计算方法为: Hi,j?12??e2?(i?k?1)2?(j?k?1)22?2 其中?为方差,k确定核矩阵的维数。 二、 图像分割
图像分割就是把图像分成若干个特定的、具有独特性质的区域并提取出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。图像分割后提取出的目标可以用于图像语义识别、图像搜索等领域。
1、 阈值分割法
最常用的阈值分割方法有最大类间方差法(OTSU)、最小误差法、最大熵法等方法,其中,OSTU算法应用最多。
最大类间方差法OTSU算法又称为大津算法,是在判决分析最小二乘法原理的基础上,推导得出的自动选取阈值的二值化方法,其基本思想是将图像直方图用某一灰度值分割成两组,当被分割成的两组方差最大时,此灰度值就作为图像二值化处理的阈值。OSTU阈值法有较好的鲁棒性,使用范围比较广,不论图
2
像的直方图有无明显的双峰,都能得到比较满意的分割效果。
设灰度图像f(x,y)的灰度级为0:L,灰度级i的像素数为ni,则图像中总像素数为N??ni,灰度级i出现的概率为pi?niN,pi?0,?pi?1,总的灰
i?0i?0LL度平均值为???ipi。
i?0L设阈值k将灰度级分为两组C0、C1,分别代表背景和目标:C0?0:k,
C1?k?1:L,则有:
C0产生的概率:?0??pi??k
i?0LkC1产生的概率:?1?ki?k?1?pi?1??k
k?k,其中?k??ipi C0的均值:?0????ki?0i?0?0ipiC1的均值:?1?i?k?1??Lipi1????k 1??k则两组间的数学期望为:?0?0??1?1??
按照模式识别理论,可求出这两类的类间方差为:
?2(k)??0(?0??)2??1(?1??)2 ??0?1(?1??0)2?[??(k)??(k)]2(?(k)[1??(k)]) 以类间方差?2(k)作为衡量不同阈值导出的类别分离性能的测量准则,极大化?2(k)的过程就是自动确定阈值的过程,因此,最佳阈值Th为:
Th?arg max?2(k)
0?k?L因方差是灰度分布均匀性的一种度量,方差值越大,说明构成图像的两部分差别越大,当部分目标错分为背景或部分背景错分为目标都会导致两部分差别变小,因此类间方差最大的分割意味着错分概率最小。
3
2、 基于区域的分割法
区域增长法是一种比较普遍的方法,在没有先验知识可以利用时,可以取得最佳的性能,可以用来分割比较复杂的图像,如自然景物。但是,区域增长方法是一种迭代的方法,空间和时间开销都比较大。
区域生长的基本思想是将具有相似性质的像素集合起来构成区域。具体先对每个需要分割的区域找一个种子像素作为生长起点,然后将种子像素和周围邻域中与种子像素有相同或相似性质的像素(区域内像素的相似性度量可以包括平均灰度值、纹理、颜色等信息)合并到种子像素所在的区域中。将这些新像素当作新的种子继续上面的过程,直到没有满足条件的像素可被包括进来。这样一个区域就生长成了。
除此之外还有区域分裂合并的方法,基本思想是先确定一个分裂合并的准则,即区域特征一致性的测度,当图像中某个区域的特征不一致时就将该区域分裂成4 个相等的子区域,当相邻的子区域满足一致性特征时则将它们合成一个大区域,直至所有区域不再满足分裂合并的条件为止。当分裂到不能再分的情况时,分裂结束,然后它将查找相邻区域有没有相似的特征,如果有就将相似区域进行合并,最后达到分割的作用。在一定程度上区域生长和区域分裂合并算法有异曲同工之妙,互相促进相辅相成的,区域分裂到极致就是分割成单一像素点,然后按照一定的测量准则进行合并,在一定程度上可以认为是单一像素点的区域生长方法。区域生长比区域分裂合并的方法节省了分裂的过程,而区域分裂合并的方法可以在较大的一个相似区域基础上再进行相似合并,而区域生长只能从单一像素点出发进行生长(合并)。一致性准则的选择及阈值设定是影响区域分割算法的关键因素。
3、 活动轮廓的分割法
最经典、使用最广的活动轮廓模型是Snake模型,它以构成一定形状的一些控制点为模板(轮廓线),通过模板自身的弹性形变,与图像局部特征相匹配达到调和,即某种能量函数极小化,完成对图像的分割。再通过对模板的进一步分析而实现图像的理解和识别。
Snake模型首先需要在感兴趣区域的附近给出一条初始曲线,接下来最小化能量泛函,让曲线在图像中发生变形并不断逼近目标轮廓。
4
Kass等人提出的原始Snakes模型由一组控制点:v(s)?[x(s),y(s)], s?[0,1]组成,这些点首尾以直线相连构成轮廓线。其中x(s)和y(s)分别表示每个控制点在图像中的坐标位置。s是以傅立叶变换形式描述边界的自变量。在Snakes的控制点上定义能量函数(反映能量与轮廓之间的关系): Etotal??2??(?v(s)??2v(s)?Eext(v(s)))ds, ?s?ss22其中第1项称为弹性能量是v的一阶导数的模,第2项称为弯曲能量,是v的二阶导数的模,第3项是外部能量(外部力),在基本Snakes模型中一般只取控制点或连线所在位置的图像局部特征例如梯度:
Eext(v(s))?P(v(s))???I(v), 2也称图像力。(当轮廓C靠近目标图像边缘,那么C的灰度的梯度将会增大,那么上式的能量最小,由曲线演变公式知道该点的速度将变为0,也就是停止运动了。这样,C就停在图像的边缘位置了,也就完成了分割。那么这个的前提就是目标在图像中的边缘比较明显了,否则很容易就越过边缘了。) 弹性能量和弯曲能量合称内部能量(内部力),用于控制轮廓线的弹性形变,起到保持轮廓连续性和平滑性的作用。而第三项代表外部能量,也被称为图像能量,表示变形曲线与图像局部特征吻合的情况。内部能量仅跟Snake的形状有关,而跟图像数据无关。而外部能量仅跟图像数据有关。在某一点的?和?的值决定曲线可以在这一点伸展和弯曲的程度。 选取适当的参数?和?,将能量函数Etotal极小化,所对应的v(s)就是对物体的分割。在能量函数极小化过程中,弹性能量迅速把轮廓线压缩成一个光滑的圆,弯曲能量驱使轮廓线成为光滑曲线或直线,而图像力则使轮廓线向图像的高梯度位置靠拢。基本Snakes模型就是在这3个力的联合作用下工作的。因为图像上的点都是离散的,所以用来优化能量函数的算法都必须在离散域里定义,求解能量函数Etotal极小化是一个典型的变分问题。 三、 特征提取
1、 HOG特征
5