图像分割是一种将图像划分为若干个子区域或不同对象的技术。分割的细致程度取决于我们要解决的具体问题。也就是说,一旦检测到了应用场景中感兴趣的对象或区域,分割过程就应该停止。
对于非简单图像的分割,是图像处理领域中最艰巨的任务之一。分割的准确性直接决定了计算机分析程序的最终成败。通常,我们采用两种方法进行分割:一种是检测图像中的不连续性并连接边缘以形成区域(称为基于边缘的分割),另一种是根据灰度级检测像素间的相似性(称为基于阈值的分割)。
从数学角度来看,我们可以这样定义分割问题。设 $R$ 表示图像所占据的整个空间区域。图像分割的目标是将区域 $R$ 划分为子区域 $R1, R2, …. R_n$,使其满足以下条件:
- $\bigcup{i=1}^{n}R{i}=R$
- $R_i$ 是一个连通集合,其中 $i =1,2,….,n$。
- 对于所有 $i$ 和 $j$, $R{i}\bigcap R{j}=\phi$ (即区域不相交)。
- 对于 $i = 1,2,…,n$, $Q(Ri) = TRUE$。
- 对于任何相邻的区域 $Ri$ 和 $Rj$, $Q(Ri \cup Rj) = FALSE$。
在这里,$Q(Ri)$ 是定义在集合 $Ri$ 中区域上的逻辑谓词,而 $\phi$ 代表空集。
阈值处理
阈值处理是一种分割技术,它通过一个阈值值将给定的灰度图像分离成两个区域,从而生成二值图像(二值图像是指像素值只有 0 和 1 的图像,因此只需一位即可存储像素强度)。因此,强度值大于该阈值的像素在输出图像中将被视为白色或 1,而其他像素将被视为黑色或 0。
假设上图是图像 $f(x,y)$ 的直方图。我们可以看到在 40 级附近有一个峰值,在 180 处有另一个峰值。这意味着主要有两组像素:一组由较暗的像素组成,另一组由较亮的像素组成。这表明可能有一个感兴趣的对象设置在背景中。如果我们使用一个合适的阈值,比如 90,就可以将整个图像分成两个不同的区域。
换句话说,如果我们有一个阈值 $T$,那么分割后的图像 $g(x,y)$ 的计算方式如下所示:
$g(x,y) = 1$ 如果 $f(x,y) > T$,并且 $g(x,y) = 0$ 如果 $f(x,y) \leq T$。
因此,输出的分割图像只有两类像素——一类值为 1,另一类值为 0。
如果在处理整个图像区域时阈值 $T$ 是常数,则称之为全局阈值处理。如果 $T$ 随图像区域变化,我们称之为可变阈值处理。
多重阈值处理将图像分为三个区域——例如背景上有两个不同的对象。在这种情况下,直方图显示三个峰值,以及它们之间的两个波谷。可以使用两个适当的阈值 $T1$ 和 $T2$ 来完成图像分割。
$g(x,y) = a$ 如果 $f(x,y) > T2$,并且 $g(x,y) = b$ 如果 $T1 < f(x,y) \leq T2$,并且 $g(x,y) = c$ 如果 $f(x,y) \leq T1$
其中 $a$、$b$ 和 $c$ 是三个不同的强度值。
根据上述讨论,我们可以直观地推断,强度阈值处理的成功与否直接与直方图模式之间波谷的宽度和深度有关。进而,影响波谷特性的关键因素是峰值之间的间距、图像中的噪声含量以及对象和背景的相对尺寸。直方图中的两个峰值分得越开,阈值处理以及图像分割算法的效果就越好。图像中的噪声通常会破坏这种分离良好的双峰直方图分布,导致难以进行有效的阈值处理和分割。当存在噪声时,最好使用某种滤波器对图像进行清理,然后再应用分割。对象的相对尺寸也起着决定分割准确性的作用。
全局阈值处理
!<a href="https://media.geeksforgeeks.org/wp-content/uploads/20221205133850/globalthresholding.png">image
当对象和背景的强度分布足够明显时,就可以在整个图像上使用单个或全局阈值。基本的全局阈值算法通过迭代来找到最佳的阈值值以进行分割。
该算法的解释如下。
- 选择一个阈值 $T$ 的初始估计值。
- 使用 $T$ 对图像进行分割,形成两组 $G1$ 和 $G2$: $G1$ 包含所有强度值 $> T$ 的像素, $G2$ 包含所有强度值 $\leq T$ 的像素。
- 计算组 $G1$ 和 $G2$ 的平均强度值 $m1$ 和 $m2$。
- 计算阈值 $T$ 的新值,即 $T = (m1 + m2) / 2$。
- 重复步骤 2 到 4,直到连续迭代中的 $T$ 值之间的差小于预设参数 $\Delta T$ 为止。
这个简单的算法在很多情况下都出奇地有效,尤其是当图像直方图呈现出明显的双峰特性时。