机器视觉学习笔记(七)-- 图像分割

        在前述章节中,我们已经看到了将一幅图像变换为另一幅图像的操作。这些操作不能为我们提供图像中所包含物体的信息。为得到图像中的物体信息,我们必须进行图像分割,即提取图像中与感兴趣物体相对应的那些区域。描述的更正式些,分割操作以一幅图像作为输入而返回一个或多个区域或亚像素轮廓作为输出。


3.4.1  阈值分割

        最简单的分割算法是图像的阈值分割。阈值分割操作被定义为:

S = \left \{ (r,c)\in R|g_{min}\leqslant f_{r,c}\leqslant g_{max} \right \}

        因此,阈值分割将图像ROI R内灰度值处于某一指定灰度值范围内全部点选到输出区域S中。如果光照能保持恒定,上下阈值能在系统设置时被选定且永远不用被调整。既然阈值分割是基于灰度值自身的,所以只要被分割的物体和背景之间存在非常显著的灰度差时,都能使用阈值分割。

        固定阈值仅在物体的灰度值和背景的灰度值不变时效果很好。但是,这种情况发生的频率比期望的要少,比如,照明变化后物体和背景的灰度值就会发生变化。即便使用的照明是恒定不变的,相似物体间不同的灰度值分布也会使固定阈值分割的结果不理想。

        因此,理想情况下我们希望有一种能够自动确定阈值的方法,这可以基于图像的灰度值直方图来实现。如果希望以鲁棒的方法选定与最小值对应的阈值,就必须先对直方图进行平滑处理,即将直方图与一个一维高斯滤波器进行卷积来完成平滑处理。

        尽管在多数情况下使用基于直方图计算得到的阈值效果很好,但在直方图中存在双峰的假设不满足时,使用这种方法的效果就不好了。不均匀的照明使我们无法进行阈值分割处理,因为不能找出一个对整幅图像都适用的固定阈值。但值得庆幸的是在局部区域中感兴趣的物体经常要比背景更亮或更暗。因此,我们希望指定一个像素必须比其所处的背景量多少或暗多少,而不是指定一个全局阈值。唯一的问题就是我们如何确定局部区域的灰度值。

        因为使用均值、高斯或中值滤波器进行平滑处理就可以计算出以当前像素为中心的窗口内的平均灰度值。所以我们可以使用滤波器处理的输出结果作为对背景灰度值的估计。将图像与其局部背景进行比较的操作被称为动态阈值分割处理。

        在动态阈值分割处理中,平滑滤波器的尺寸决定了能被分割出来的物体的尺寸。如果滤波器尺寸太小,那么在物体的中心估计处的局部背景将不理想。凭经验,均值滤波器的宽度必须大于被识别物体的宽度。这一规则同样适用于中值滤波器。对高斯滤波器也存在类似的关系。此外,总的说来如果均值滤波器或高斯滤波器的尺寸越大,那么滤波后的结果越能更好地代表局部背景。例如,亮物体滤波后会变得暗些。对于中值滤波就不仅仅是变暗了,因为当中值滤波器的半径大于被提取物体宽度时,滤波操作将会在结果图中完全消除此物体。因此,当滤波器足够大时,滤波后的灰度值就能代表局部背景。如果平滑后图像的灰度值能够更好地代表局部背景,我们就能选定一个更大的阈值,这样能够在分割中更好地抑制噪声。但滤波器的掩码窗口也不能无限的大,因为相邻近的物体可能对滤波结果产生不利的影响。最后应该注意的是动态阈值分割的结果不仅包括比局部背景更亮或更暗的物体,也包括亮区域或暗区域的边缘。

3.4.2  提取连通区域

        前一节中的分割算法返回一个区域作为分割的结果。通常情况下,分割后得到的区域所包含的多个物体在返回结果中应该是彼此独立的。通常情况下,我们所感兴趣的物体是由一些相互连通的像素集合而成。所以,为获得每一个区域,我们必须计算出分割后得到的区域内包含的所有连通区域(分支)。

        为了能够计算出连通区域,我们必须定义何时两个像素应被视为彼此连通。在一个矩形像素网格上,对于连通性有两种自然的定义。两个像素连通的第一种定义是这两个像素有共同的边缘,也就是说,一个像素在另一个像素的上方,下方,左侧或右侧,如图3.29(a)。由于每个像素有四个相连通的像素,此定义被称为4连通或者4邻域。第二种定义是第一种定义的扩展,将对角线上的相邻像素也包括进来,如图3.29(b)。此定义被称为8连通或8邻域。

        虽然上面的两个定义都很容易被理解,但当对前景和背景都是用同一个定义时,上面的定义就会引出问题。图3.30显示的是当对前景和背景都使用8连通定义时出现的问题。在3.30(a)中,很明显在前景中有一条线,这条线将背景分成两个连通区域。这是我们希望得到的结果。但如图3.30(b)所示,如果这条线稍微有些旋转,我们仍能在前景中得到一个连通区域,但此背景中也只有一个连通区域,这个结果是与我们的直觉不符的。图3.30(c)显示的是另一个怪异的现象。此图中前景仍是一个连通区域,直觉上,我们会说此区域包含一个懂,但背景也只是一个连通区域,这又表明区域中没有洞。解决此问题的唯一方法是对前景和背景使用不同的连通性定义。例如,如果在图3.30所有例子中使用4连通定义描述背景,所有问题都迎刃而解了。同理,如果4连通描述前景、8连通描述背景,所有的矛盾也被避免了。

        在用行程表示法描述的区域上计算连通区域,可以使用经典的深度优先搜索。我们反复搜索第一个未被处理的行程,然后再与此行程交叠的所有行程。判断两个行程是否交叠的依据就是连通性的定义。对于4连通,两交叠的行程中必须至少有一个像素位于同一列。对于8连通,两行程必须至少对角接触。深度优先搜索过程的例子见图3.31,用行程表示法描述的输入区域如图3.31(a)所示,使用8连通进行深度优先搜索时的搜索树如图3.31(b)所示。返回的连通区域结果如图3.31(c)所示。对于8连通,搜索后返回3个连通区域。如果使用4连通,搜索后返回4个连通区域。

        应该注意的是对于以二值图像表示的区域也可以计算连通区域。处理后输出的是一幅标记图像。因此,此处离也被称为标记或区域标记。

3.4.3  亚像素精度阈值分割

        到目前为止,我们已经讨论的所有阈值分割处理都是像素精度的。在大多数情况下,这种精度是足够的。但一些应用需要的准确度要高于像素级别。因此,有时需要能返回亚像素精度结果的算法。很明显,亚像素精度阈值分割处理的结果不能是一个区域,因为区域是像素精度的。为此,表示结果的适当数据结构应是亚像素精度轮廓。

        此轮廓表示图像中两个区域的边界,这两个区域中一个区域的灰度值大于灰度值阈值,而另一个区域的灰度值小于该阈值。为了获取这个边界,我们必须将图像的离散表示转换成一个连续函数。例如,使用双线性插值完成这种转换。一旦我们获得了表示图像的一个连续函数,从概念上,亚像素精度阈值分割处理的结果就可以用常量函数与图像函数相交得到。图3.33给出了经过双线性内插处理后的图像在一个由四个邻近像素的中心构成的 2 x 2局部。四个邻近像素的中心分别位于正方形的四个角上。图形底部显示的是在此 2 x 2区域中用常量灰度值100与图像相交得到的曲线。注意此曲线是双曲线上的一部分。但是因为双曲线使用起来不方便,所以我们仅用一条直线来替代它,直线是由双曲线进出此 2 x 2 区域的两个点连接而成的。此线段构成了我们感兴趣的亚像素轮廓的一部分。一般情况下,图像中的每个 2 x 2 的区域包含在零个、一个或两个这样的线段。如果一个 2 x 2 区域内两条轮廓相交于一点,那么将出现4条线段。为获取有意义的轮廓,这些线段要被连接起来。可以通过反复地选择图像中第一个未被处理的线段作为轮廓的第一段,然后跟踪邻近的线段知道轮廓闭合、到达图像边界或到达一个交点。此连线处理的结果通常是在图像内形成一个闭合的轮廓,此轮廓围绕的区域内部的灰度值大于或者小于阈值。注意如果这样的区域内包含孔洞,要为区域的外边界和孔洞的外边界分别建立轮廓。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值