Graph Cut(图割)的学习

Graph Cut的学习

        • 1.1 图割(Graph Cut)
        • 1.1.1 从图像创建图

1.1 图割(Graph Cut)

图像分割的基本思想是:相似且彼此相近的像素应该划分到同一区域。
图割图像分割的思想是用途来表示图像,并对图进行划分以使割代价最小。在用图表示图像时,增加两个额外的节点,即源点和汇点;并仅考虑那些源点和汇点分开的割。
图割 C(C 是图中所有边的集合)的“代价”函数定义为所有割的边的权重求合相加:
在这里插入图片描述
寻找最小割等同于在源点和汇点间寻找最大流。

from pygraph.classes.digraph import digraph
from pygraph.algorithms.minmax import maximum_flow

gr = digraph()
gr.add_nodes([0,1,2,3])

gr.add_edge((0,1), wt=4)
gr.add_edge((1,2), wt=3)
gr.add_edge((2,3), wt=5)
gr.add_edge((0,2), wt=3)
gr.add_edge((1,3), wt=4)
flows,cuts = maximum_flow(gr, 0, 3)
print ('flow is:' , flows)
print ('cut is:' , cuts)

首先,创建有4个节点的有向图,4个接待你的索引分别为0、1、2、3,然后用add_edge()增添边并未每条边指定特定的权重。边的权重用来衡量边的最大流容量。以节点0为源点,3为汇点,计算最大流。如图所示
Graph Cut(图割)的学习_第1张图片
打印出流和割结果为:
在这里插入图片描述
0是包含源点的部分,1是与汇点项链的节点。

1.1.1 从图像创建图

给定一个邻域结构,我们可以利用图像像素作为节点定义一个图。除了像素节点外,我们还需要两个特定的节点——“源”点和“汇”点,来分别代表图像的前景和背景。
为确定边的权重,需要一个能够确定这些像素点之间,像素点与源点、汇点之间边的权重(表示那条边的最大流)的分割模型。
可以为边的权重建立如下模型:
Graph Cut(图割)的学习_第2张图片
在这里插入图片描述在这里插入图片描述是前景和背景计算概率。
在这里插入图片描述是像素 i 的颜色向量。
像素 i 与像素 j 之间的边的权重记为在这里插入图片描述 ,源点到像素 i 的权重记为在这里插入图片描述,像素 i 到汇点的权重记为在这里插入图片描述
利用该模型,可以将每个像素和前景及背景(源点和汇点)连接起来,权重等于上面归一化后的概率。在这里插入图片描述描述了近邻间像素的相似性,相似像素权重趋近于 κ,不相似的趋近于 0。参数 σ 表征了随着不相似性的增加,指数次幂衰减到 0 的快慢。

# -*- coding: utf-8 -*-

from scipy.misc import imresize
from PCV.tools import graphcut
from PIL import Image
from numpy import *
from pylab import *

im = array(Image.open("empire.jpg"))
im = imresize(im, 0.07)
size = im.shape[:2]
print ("OK!!")

# add two rectangular training regions
labels = zeros(size)
labels[3:18, 3:18] = -1
labels[-18:-3, -18:-3] = 1
print ("OK!!")


# create graph
g = graphcut.build_bayes_graph(im, labels, kappa=1)

# cut the graph
res = graphcut.cut_graph(g, size)
print ("OK!!")


figure()
graphcut.show_labeling(im, labels)

figure()
imshow(res)
gray()
axis('off')

show()

在该实验中用 1 标记前景训练数据、用 -1 标记背景训练数据的一幅标记图像。
第一张是原图,第二张是用于模型训练的标记图像,第三张是分割的结果。
蓝色矩形是标记的背景,红色矩形是标记的前景。
kappa是我们在上面说的“k”。
kappa=1时:
Graph Cut(图割)的学习_第3张图片
kappa=2时:
Graph Cut(图割)的学习_第4张图片
随着 K 值增大,分割边界将变得更平滑,并且细节部分也逐步丢失。

你可能感兴趣的:(计算机视觉)