如何用图形切割解决二进制标记?

时间:2013-09-26 16:11:33

标签: c++ algorithm graph

enter image description here

我有两段图像重叠区域的32段。我必须根据最低成本将每个段分配给其中一个图像。因此,它是二元标记问题,以上是能量最小化函数。

L是长度为32的向量(等于段的数量),并且每个元素的值取决于其对应于段号的索引。比如说,如果第3段被分配了图像1,则L(2)= 0,并且第14段被分配给图像2,因此L(13)= 1。那就是L [x]的值是0或1.因此,有2 ^ 32可能的L赋值。所以,我可以计算每个组合的E(L),在执行2 ^ 32计算后,我可以得到最小E(L),并使用该组合。这就是我的直觉所暗示的。但这是不切实际的,因为复杂性是指数级的。

但是,许多文献认为这个二元标记问题可以用最大流/最小切割算法的图切割问题来解决。但是,如何将此问题表述为最大流量/最小切割问题? 32个段是图的节点,但是边的权重是多少?什么是容量?

1 个答案:

答案 0 :(得分:1)

可以在"What Energy Functions Can Be Minimized via Graph Cuts?" by Vladimir Kolmogorov and Ramin Zabih中找到作为图论问题的表述以及“如果且是否”的关系的证明。

关键思想是在权重Vij(0,1)+ Vij(1,0)-Vij(0,0)-Vij(1,1)的i和j之间构造有向边。

如果Vij(1,0)-Vij(0,0)> 0,则还需要在权重Vij(1,0)-Vij(0,0)的源和i之间构造有向边。 否则,您需要在i和权重Vij(0,0)-Vij(1,0)的目标之间构造有向边。

类似地,如果Vij(0,1)-Vij(0,0)> 0,你还需要在权重Vij(0,1)-Vij(0,0)的源和j之间构造有向边。 否则,您需要在j和权重Vij(0,0)-Vij(0,1)的目标之间构造有向边。

请注意,此图表的最小切割将被连接到目的地边缘的权重的V(0,0) - 舍入所抵消。