基于图割(Graph Cut)的图像分割算法
我将为您详细讲解基于图割(Graph Cut)的图像分割算法。这个算法是一种经典的交互式图像分割方法,它通过将图像分割问题转化为图的最小割(Min-Cut)问题来解决。
1. 算法核心思想
图割算法的基本思想非常直观:将一幅图像表示为一个图(Graph)结构。图中的节点(Nodes)代表图像的像素,而边(Edges)则连接着相邻的像素节点。边的权重(或称容量)反映了它所连接的两个像素之间的相似性或不相似性。此外,我们还会引入两个特殊的节点,称为“终端节点”(Terminal Nodes):一个代表“前景”(Source),一个代表“背景”(Sink)。
分割的目标是找到一种方式,将图“切割”成两个不相交的子集:一个子集与前景终端相连,代表被分割出来的前景物体;另一个子集与背景终端相连,代表图像的背景。而“切割”的代价,就是所有被切断的边的权重之和。图割算法的目标就是找到一个代价最小的切割(Min-Cut),这个最小割就对应着图像的最佳分割边界。
2. 图的构建
这是算法的关键步骤。我们构建的图 G = <V, E> 包含以下部分:
-
节点集合 V:
- 普通节点:图像中的每一个像素都对应图中的一个节点。
- 终端节点:两个特殊的节点,源点(Source, S)代表前景,汇点(Sink, T)代表背景。
-
边集合 E:
- n-链接(Neighborhood Links):这些边连接着相邻的像素节点(例如,采用4邻域或8邻域)。边的权重用于衡量相邻像素之间的不连续性。如果两个像素颜色(或灰度)非常相似,那么连接它们的边的权重就应该很大,因为切断两个相似像素的代价很高,算法会倾向于将它们划分到同一个区域(同为前景或同为背景)。反之,如果两个像素差异很大,权重就小,容易被切断。
- t-链接(Terminal Links):这些边连接着每个像素节点与两个终端节点(S和T)。
- 连接像素节点到源点(S)的边的权重,表示这个像素属于前景的代价(或概率的负对数)。这个权重越大,说明该像素越可能属于前景,算法越不愿意切断这条边(即倾向于将该像素划归前景)。
- 连接像素节点到汇点(T)的边的权重,表示这个像素属于背景的代价。权重越大,说明该像素越可能属于背景。
3. 能量函数的最小化
图割算法在数学上等价于最小化一个特定的能量函数 E(A)。这个函数通常由两部分组成:
-
区域项(Regional Term / Data Term):
R(A) = Σ R_p(A_p)- 这一项衡量的是单个像素被分配为标签 A(前景或背景)的代价。它来自于我们预先获得的先验知识。在交互式分割中,用户通常会用画笔标记出一些肯定是前景和肯定是背景的种子点(Seeds)。算法会根据这些种子点的颜色分布(例如,建立前景和背景的高斯混合模型 GMM),来计算其他未标记像素属于前景或背景的概率。
R_p(‘foreground’)就是这个像素属于背景的概率的负对数,它构成了该像素与汇点(T)的 t-链接 权重。同理,R_p(‘background’)构成与源点(S)的 t-链接 权重。
- 这一项衡量的是单个像素被分配为标签 A(前景或背景)的代价。它来自于我们预先获得的先验知识。在交互式分割中,用户通常会用画笔标记出一些肯定是前景和肯定是背景的种子点(Seeds)。算法会根据这些种子点的颜色分布(例如,建立前景和背景的高斯混合模型 GMM),来计算其他未标记像素属于前景或背景的概率。
-
边界项(Boundary Term / Smoothness Term):
B(A) = Σ B_{p, q} * δ(A_p, A_q)- 其中
δ(A_p, A_q) = 1 if A_p != A_q, otherwise 0。 - 这一项鼓励分割边界位于图像颜色(或纹理、梯度)变化剧烈的地方。它作用于相邻的像素对 (p, q)。
B_{p, q}衡量了像素 p 和 q 之间的差异性,它直接对应于 n-链接 的权重。如果两个相邻像素被赋予了不同的标签(一个前景,一个背景),即分割边界从它们之间穿过,那么δ=1,我们需要付出代价B_{p, q}。如果两个像素颜色相似,B_{p, q}会很大,那么算法就会尽量避免在这种情况下划分边界,因为代价太高。反之,如果它们颜色差异大,B_{p, q}小,在这里划分边界的代价就低。
- 其中
因此,总的能量函数为:E(A) = λ * R(A) + B(A) (λ 是一个用于平衡区域项和边界项重要性的参数)。
最小化这个能量函数,等价于在对应的图中寻找最小割。
4. 求解最小割
一旦图被构建起来,并且所有边的权重都已根据上述规则设定好,接下来的问题就是如何高效地找到最小割。这是一个经典的图论问题。
幸运的是,我们这个图是一种特殊的流网络(Flow Network),而最小割问题与最大流问题(Max-Flow)是等价的(根据最大流最小割定理)。因此,我们可以使用高效的最大流算法(如Ford-Fulkerson算法、Push-Relabel算法等)来求解最小割。这些算法能够在多项式时间内找到最优解。
5. 算法步骤总结
- 用户交互:用户在图像上涂抹,标记出明确的前景种子点和背景种子点。
- 建模:根据种子点的颜色信息,分别建立前景和背景的颜色概率模型(如高斯混合模型GMM)。
- 建图:
- 为每个像素创建一个节点。
- 创建源点 S 和汇点 T。
- 设置 t-链接 权重:
- 对于前景种子点:将其到 S 的权重设为无穷大,到 T 的权重设为0(强制其为前景)。
- 对于背景种子点:将其到 T 的权重设为无穷大,到 S 的权重设为0(强制其为背景)。
- 对于未标记像素:使用步骤2中的GMM模型计算其属于前景/背景的概率,并将概率的负对数作为其与 S/T 的连接权重。
- 设置 n-链接 权重:对于相邻的像素 p 和 q,权重
B_{p, q}通常定义为exp(-||I_p - I_q||^2 / (2σ^2)),其中I_p和I_q是像素的颜色向量,σ 是一个参数。这个公式确保了相似像素之间的连接权重很大。
- 计算最小割/最大流:使用最大流算法在构建的图上进行计算。算法会找到一条从 S 到 T 的路径,并饱和路径上的边(达到最大流),最终得到最小割。
- 得到分割结果:最小割将图分成两个部分。所有与 S 相连的像素被标记为前景,所有与 T 相连的像素被标记为背景。这就得到了最终的分割结果。
优点:
- 能够获得全局最优解(对于特定的能量函数形式)。
- 边界光滑,且倾向于在颜色梯度大的地方进行分割。
- 是一种非常强大和实用的交互式分割工具。
局限:
- 分割效果依赖于用户提供的种子点位置。
- 对于纹理复杂或前景/背景颜色相似的情况可能效果不佳。
- 计算成本相对较高,尤其是对于高分辨率图像。