基于线性规划的图像分割中连续最大流模型的求解示例
我将为你讲解一个在医学图像分割或计算机视觉中常用的算法——基于连续最大流(Continuous Max-Flow)模型的图像分割方法,其核心是一个精心构造的线性规划(或凸优化)问题。
题目描述
假设我们有一幅二维灰度图像,每个像素点有一个灰度值。我们的目标是将图像前景(例如,图像中的某个器官)与背景分开。对于每个像素点 \(i\),我们需要决策一个变量 \(x_i \in [0, 1]\),它表示像素 \(i\) 属于前景的概率(1代表完全前景,0代表完全背景)。这就是一个“连续”分割模型。
现在,我们如何构造一个线性规划问题来实现分割呢?其思想是:将图像视为一个图,每个像素是一个节点,相邻像素之间有边连接。分割任务可以类比为在网络中寻找一个“最小割”,将源点(代表前景)和汇点(代表背景)分开。而“连续最大流”模型是这个思想在连续域上的优雅表述。
问题建模与线性规划形式
-
变量定义:
- 分割变量:对于每个像素 \(i\),定义 \(x_i\)(如前所述)。
- 流变量:
- 源流 \(p_i^s\):从源点(前景终端)流入像素 \(i\) 的流量。约束:\(0 \le p_i^s \le C_i^s\)。
- 汇流 \(p_i^t\):从像素 \(i\) 流入汇点(背景终端)的流量。约束:\(0 \le p_i^t \le C_i^t\)。
- 空间流(散度流) \(\vec{q}_i\):一个二维向量 \((q_i^x, q_i^y)\),表示在像素 \(i\) 处(与相邻像素之间)的空间流量。通常约束其欧几里得范数 \(||\vec{q}_i||_2 \le \lambda\),其中 \(\lambda > 0\) 是一个平滑参数。注意:这个范数约束不是线性的。为了使问题成为线性规划,我们通常采用 \(L^1\) 范数近似或将其转化为一系列线性约束(例如,使用多面体范数近似 \(L^2\) 范数),但标准的连续最大流模型本身是一个凸优化问题。为了严格遵循你的要求(线性规划),我们将采用一种简化:使用各向异性全变差(TV),即用 \(|q_i^x| + |q_i^y| \le \lambda\) 来代替 \(L^2\) 范数约束,这样可以通过引入非负变量使其线性化。不过,为了让你理解原算法的精髓,我先讲解原始模型的思想,再说明如何精确线性化。
-
流守恒约束(关键约束):
在每个像素 \(i\) 处,流入的净流量必须等于零(类似基尔霍夫电流定律)。数学表达式为:
\[ \text{div} \ \vec{q}_i + p_i^t - p_i^s = 0, \quad \forall i \]
这里,$ \text{div} \ \vec{q}_i $ 是向量场 $ \vec{q} $ 在像素 $ i $ 处的离散散度,近似于 $ \frac{\partial q^x}{\partial x} + \frac{\partial q^y}{\partial y} $。在离散网格上(如4邻域),它可以写为:
\[ \text{div} \ \vec{q}_i = q_{i \rightarrow right}^x - q_{i \rightarrow left}^x + q_{i \rightarrow down}^y - q_{i \rightarrow up}^y \]
流变量 $ q $ 是在像素之间的边(或面)上定义的。为了简化建模,我们可以将每个像素中心的 $ \vec{q}_i $ 看作是代表从该像素流出的净流量矢量。在离散化时,通常会在对偶网格上定义 $ \vec{q} $,但我们可以理解为一种差分形式。一个更易于线性化的表达是:对于每个像素 $ i $ 和它的一个邻域像素 $ j $,定义一个无向流量 $ f_{ij} $(可以分解为从 $ i $ 到 $ j $ 和从 $ j $ 到 $ i $ 的分量)。然而,标准模型直接使用矢量 $ \vec{q}_i $。
-
容量约束:
- \(C_i^s\) 和 \(C_i^t\) 是预先计算的、与数据相关的容量。
- \(C_i^s\) 大表示像素 \(i\) 的灰度更接近前景的典型灰度,因此从源点到它的“管道”更粗,允许更多流量通过。
- \(C_i^t\) 大表示像素 \(i\) 的灰度更接近背景的典型灰度。
通常,\(C_i^s = D(F_i)\), \(C_i^t = D(B_i)\),其中 \(D(\cdot)\) 是一个距离或相似度函数(例如,负对数似然),\(F_i\) 和 \(B_i\) 是像素 \(i\) 属于前景和背景的代价。
- \(C_i^s\) 和 \(C_i^t\) 是预先计算的、与数据相关的容量。
-
目标函数:
我们希望最大化从源点到汇点的总流量。由于流守恒,这等于所有汇流的总和(也等于所有源流的总和)。因此,线性规划的目标函数为:
\[ \max \sum_i p_i^t \]
或等价地 $ \max \sum_i p_i^s $。
综合起来,原始的连续最大流模型(凸优化形式)是:
\[\begin{aligned} \max_{p^s, p^t, \vec{q}} \quad & \sum_i p_i^t \\ \text{s.t.} \quad & \text{div} \ \vec{q}_i + p_i^t - p_i^s = 0, \quad \forall i \\ & 0 \le p_i^s \le C_i^s, \quad \forall i \\ & 0 \le p_i^t \le C_i^t, \quad \forall i \\ & ||\vec{q}_i||_2 \le \lambda, \quad \forall i \end{aligned} \]
最后一个约束 \(||\vec{q}_i||_2 \le \lambda\) 是二阶锥约束(或欧几里得范数球约束),这使得问题成为一个二阶锥规划(SOCP),而不仅仅是线性规划。
如何转化为严格的线性规划(LP)
为了得到一个纯粹的线性规划,我们可以将各向同性的 \(L^2\) 范数约束 \(||\vec{q}_i||_2 \le \lambda\) 替换为各向异性的 \(L^1\) 范数约束 \(|q_i^x| + |q_i^y| \le \lambda\)。然后,通过引入辅助变量将其线性化。
具体步骤如下:
-
引入非负变量:对于每个像素 \(i\),将每个有正负可能的分量 \(q_i^x\) 和 \(q_i^y\) 分解为非负部分:
- 令 \(q_i^{x+} \ge 0\) 和 \(q_i^{x-} \ge 0\) 满足 \(q_i^x = q_i^{x+} - q_i^{x-}\),且 \(|q_i^x| = q_i^{x+} + q_i^{x-}\)。
- 同理,令 \(q_i^{y+} \ge 0\) 和 \(q_i^{y-} \ge 0\) 满足 \(q_i^y = q_i^{y+} - q_i^{y-}\),且 \(|q_i^y| = q_i^{y+} + q_i^{y-}\)。
-
修改散度项:散度 \(\text{div} \ \vec{q}_i\) 现在需要用 \(q^{x+}, q^{x-}, q^{y+}, q^{y-}\) 表示。在标准中心差分离散化下,对于像素 \((i, j)\):
\[ \text{div} \ \vec{q}_{i,j} \approx (q_{i+1/2, j}^x - q_{i-1/2, j}^x) + (q_{i, j+1/2}^y - q_{i, j-1/2}^y) \]
其中每个 $ q_{...}^x $ 或 $ q_{...}^y $ 又可以分解为 “+” 和 “-” 部分。注意,这里的下标是半整数,表示边的中心。为了简化,我们可以将变量定义在像素上,并将散度近似为:
\[ \text{div} \ \vec{q}_i \approx (q_i^{x+} - q_i^{x-}) - (q_{i-left}^{x+} - q_{i-left}^{x-}) + (q_i^{y+} - q_i^{y-}) - (q_{i-up}^{y+} - q_{i-up}^{y-}) \]
这实质上是在4邻域系统上的后向差分。这样,每个像素 $ i $ 的流守恒方程就完全由该像素及其左邻、上邻的变量线性表示。
- 修改范数约束:各向异性 TV 约束变为:
\[ (q_i^{x+} + q_i^{x-}) + (q_i^{y+} + q_i^{y-}) \le \lambda, \quad \forall i \]
这是一个线性不等式。
最终,我们得到一个严格的线性规划(LP)模型:
\[\begin{aligned} \max_{p^s, p^t, q^{x+}, q^{x-}, q^{y+}, q^{y-}} \quad & \sum_i p_i^t \\ \text{s.t.} \quad & (q_i^{x+} - q_i^{x-} - q_{i-left}^{x+} + q_{i-left}^{x-}) + (q_i^{y+} - q_i^{y-} - q_{i-up}^{y+} + q_{i-up}^{y-}) + p_i^t - p_i^s = 0, \quad \forall i \\ & 0 \le p_i^s \le C_i^s, \quad \forall i \\ & 0 \le p_i^t \le C_i^t, \quad \forall i \\ & q_i^{x+} \ge 0, \quad q_i^{x-} \ge 0, \quad q_i^{y+} \ge 0, \quad q_i^{y-} \ge 0, \quad \forall i \\ & (q_i^{x+} + q_i^{x-}) + (q_i^{y+} + q_i^{y-}) \le \lambda, \quad \forall i \end{aligned} \]
其中,对于图像边界上的像素,不存在的邻居(如最左列的 \(i-left\))对应的 \(q\) 变量视为 0。
解题过程与后处理
-
求解线性规划:
- 使用标准的线性规划求解器(如单纯形法或内点法)求解上述 LP 问题。
- 得到最优解:\(p_i^{s*}, p_i^{t*}, q_i^{x+*}, q_i^{x-*}, q_i^{y+*}, q_i^{y-*}\)。
-
恢复分割结果:
- 在连续最大流模型中,有一个著名的对偶关系:该最大流问题的对偶问题恰好是一个最小化分割能量的 Rudin-Osher-Fatemi (ROF) 类型的模型,其中对偶变量就是我们要的分割变量 \(x_i\)。
- 具体来说,在线性规划的对偶理论中,与流守恒约束(\(\text{div} \ \vec{q}_i + p_i^t - p_i^s = 0\))对应的对偶变量就是 \(x_i\)。因此,在求解原 LP(最大流)时,求解器通常可以直接或间接给出对偶变量的值,即 \(x_i\)。
- \(x_i\) 的直观含义:它代表了像素 \(i\) 处的“压力”或“势能”。在最优情况下:
- 如果 \(x_i\) 接近 1,表示该点与源(前景)连接的压力高,更可能属于前景。
- 如果 \(x_i\) 接近 0,表示该点与汇(背景)连接的压力高,更可能属于背景。
- 最终分割:设定一个阈值(通常为 0.5),如果 \(x_i \ge 0.5\),则将像素 \(i\) 划分为前景;否则划分为背景。
算法总结
该算法将图像分割问题转化为一个网络最大流问题,并在连续(或离散化后)的 setting 下通过求解一个线性规划来实现。其优势在于:
- 全局最优:对于这个线性规划模型,可以求得全局最优解(对于给定的 \(L^1\) 平滑项)。
- 软分割:结果 \(x_i\) 是连续的,可以表示分割的不确定性或部分体积效应。
- 灵活性:可以通过修改容量 \(C_i^s\) 和 \(C_i^t\) 来融入各种先验知识(如用户交互、形状模型等)。
尽管我们为了满足“线性规划”的要求而使用了 \(L^1\) 范数近似,但原连续最大流模型(使用 \(L^2\) 范数)在实践和理论上更为流行,其求解通常使用更高效的基于一阶优化的原始-对偶算法(如Chambolle-Pock算法),而非通用的线性规划求解器。不过,这个线性规划形式清晰地揭示了图像分割与最大流/最小割之间的本质联系。