其中,*表示而为卷积操作,tH(x,y)用以表示向右方向上的亮度增长,tV(x,y)用以表示向下方向上的亮度增长。
在图像的每一个像素点上,所得到的梯度近似值可以组合起来,得到梯度强度,即:
Sobel算子的实现代码见ImageProcessing.cpp文件中的Sobel_edge_operator函数。
3.3.3 两种边缘检测方法的比较
为了便于比较,下面同时给出两种算子的效果图:
图3.6 Robert算子边缘检测效果图
图3.7 Sobel算子边缘检测效果图
从图中可以明显看出,Sobel算子的检测效果要好于Robert算子。因为获取图像光线较暗,Sobel算子在光强较小的情况下要比Robert算子更加敏感,更能突出边缘特征。
3.4 图像的二值化
只有两个灰度级的图像称为二值图像,典型的图像处理、识别软件中最终处理的都是二值图像,因为二值图像数据简单明了,处理速度快,只要能正确的分割出图像感兴趣的部分,对于二值图像处理的误差也要小得多。在后来的模扳匹配中也可以发现:用二值化之后的图像进行模板匹配,速度要快得多,误差也小。总之,二值图像在图像处理中占据很重要的位置。关于图像二值化的方法,种类繁多,简单二值化,波形分析法,判别函数法,综合法、P-参数法、最小误差法等等,但是如果从全局阈值还是局部阈值来划分,则只有两大类:全局阈值法,局部阈值法。无论是波形分析法,还是判别函数法,还是综合法等等,都属于全局阈值,最终的目的都是确定一个阈值用来进行全局阈值分割,因为光源固定、摄像机固定,这个阈值我们总是可以通过多次试验而得到,所以并无必要花费很多的精力去研究、分析每个方法的优劣。因此,本课题中只打算给出三种易于实现的全局阈值方法实现代码。
3.4.1 简单二值化
最常用的分割方法是利用灰度值的大小进行二值化。设原始图像为f(x,y),以一定的准则确定一个灰度值t作为分割阐值,然后将大于等于t值的像素判为对象并用1来表示,而将小于t值的像素判为背景并用0来表示。二值化的结果将灰度图像变成二值图像。
或者反之,对象与背景像素的大小关系对调。
3.4.2 大津法二值化
大津法又称最大类间方差法[8]。原理为:取某个灰度值,以它为分界将图像分为灰度值大小两类,分别计算这两类中的像素点数及灰度平均值。然后计算它们的类间方差,最后取所有灰度的类问方差中的最大值对应的灰度为阈值。类间方差的计算公式如下:
其中,n1(i)、n2(i)分别为灰度小于i的像素与大于等于i的像素的数目,v1(i)、v2(i)分别为它们的平均值。
此式的意思是,取w(i)中的最大值时的下标作为处理结果,作为二值化的分割阈值。w(i)实际上是一个以灰度值为自变量的函数,求阈值就是找出函数值取最大值的位置。大津法二值化的具体实现代码见ImageProcessing.cpp文件中的Otsu_threshold函数。
3.4.3 自动阈值分割
自动阈值分割是一种不需人工参与、自动确定阈值的图像二值化分割方法,算法描述如下[16]:
(1)求出图像中的最小灰度值Zl和最大灰度值Zk,取初始阈值T0为:
(2)根据阈值T将图像分割成目标和背景两部分,求出两部分的平均灰度值ZO和ZB,其中ZO和ZB分别为:
式中Z(i,j)图像上(I,j)点的灰度值,N(i,j)是(i,j)点的权重因子,一般取N(i,j)=1。
(3)求出新阈值:
(4)判断TK=TK+1是否成立,不成立转步骤2,否则TK+1就是最佳阈值。 VC++晶片内部缺陷处理+文献综述(7):http://www.751com.cn/jisuanji/lunwen_3066.html