采用如图行列方式标记物体;若遇到(1,1)像素为物体 A,依次判断该像素点的右上点(0,2),正上(0,1),左上(0,0)及左前(1,0)是否为该物体,优先级依次降低的顺序为右上点(0,2),正上点(0,1),左上点(0,0)及左前点(1,0),(0,2)的优先级最高,而左前(1,0)的优先级最低;
若右上点为物体,则当前点跟右上点.并标记和右上点相同的值,如:当前点(9,3),则其右上点(8,4)为物体,所以当前点为(9,3)标记与右上点(8,4)相同的值;
图 5.2.3.1物体图像区域标志图
(2)面积测量
工件的面积由区域包含的像素个数决定,可以根据整幅图像的物理大小与像素个数计算出工件的物理面积。对于一幅二值图像,区域的面积(或零阶矩)由下式给出:
(5-3)
B[i,j]为二值图像的像素,n、m 表示像素的范围。
在前面区域标记的基础上,通过对图像内每个标记操作(标号)的区域进行计算,求得总区域的数目,并求得每个区域的像素个数。当二值图像的某区域面积(像素数)在阈值以下时,则消去该区域,全部置为 255(白),由此得到新图像,图像上就只有所要处理的主要区域。
图 5.2.3.2 工件面积计算过程
(3)周长测量
周长(P)是围绕一个区域的所有像素的外界的长度,它可以简单地从链码表示中得到。垂直与水平的步幅为单位长度,在 8—连通下的对角步幅的长度为2 。在 4—连通下的边界会更长些,其中对角步幅包含两个直角步,总长度为 2。本文中采用的是 8—连通方式,在对像素进行标记后,采用边界跟踪法,跟踪各个封闭区域边界线(轮廓线)的每个黑像素的标号,记录二值图像物体边界的坐标序列。边界线跟踪采用左手和搜索法,它将白区域视为平面,黑区域视为建筑物,然后一边让左手接触建筑物的壁面一边前进,最后返回出发点的一种跟踪方法,效果如下图 。
图5.2.3.3周长计算效果图
5.2.4 Hough变换检测圆周
Hough 变换除了可以检测直线外,还可以用来检测圆周,以按圆的大小进行检测其是否合格。Hough 变换可以用来检测满足方程 f (x,c) = 0 形式的各类曲线,并把曲线上的点连接起来。这里 x 是一个坐标矢量在 2—D 图像中的 2—D 矢量;c 是一个系数矢量,它可以根据曲线的不同从 2--D、3--D、4--D……。圆的方程一般为:
(5-4)
公式中有三个参数 a、b、r。可见参数空间为三文空间,且公式是一个直立三文圆锥。图像空间中的圆对应着参数空间中的一个点而图像空间中的一个点对应着参数空间中的一个三文直立圆锥,该点约束了通过该点一簇圆的参数。对于图像空间中的一个圆,它的半径是固定不变的,圆周上的各个点组成的集合在参数空间中就表现为一组圆锥面的集合,这些圆锥簇相交于参数空间上某一点(a0,b0,r0),这点恰好对应于图像平面的圆心坐标及圆的半径,所以需要在参数空间里建立一个 3--D 的累加数组 A,其元素可写为A (a,b,r)。可以让 a 和 b 依次变化而根据上式计算出 r,并对 A 累加:A (a,b,r) = A (a,b,r) + 1。
在累加过程中由于不知道圆心在什么地方,所以对于每一点(x,y)需要检查以此点为圆心的圆周上的所有点来确定圆心的位置,因而会耗费更多的计算时间和系统资源,这样的检测效率很低。 Matlab生产自动化实验系统机器视觉单元设计+CAD图纸(16):http://www.youerw.com/zidonghua/lunwen_276.html