Graph cuts在视差估计中的应用

来源:互联网 发布:杭州网络维修招聘 编辑:程序博客网 时间:2024/06/01 08:38

Graph cuts是图论中的一个概念,是一种有效的能量优化算法,普遍应用于图像分割、立体视觉、抠图等算法中。

Graph cuts

给定无向图G=(V,E)为带分割的图像,V和E是顶点(vertex)和边(edge)的集合。
在Graph cuts中,无向图G有两种顶点,一种是普通顶点(粉色和蓝色点),另一种为两个虚拟顶点S(source源点)和T(sink汇点),也叫做终端顶点。
因此,Graph cuts中的图G有两种边,一种是普通顶点间的边,称为n-links;另一种是连接普通顶点与虚拟顶点的边,称为t-links。而每一条边都有一个非负的权值。
这里写图片描述
这样我们可以把S点看作源头,T点看做汇点,从S向网络中注水,每条边的权值就表示该边的流量。求从S到T所经过边的最大流量(瓶颈流量),即为最大流问题。而这个最大流的边将图G分割为两个部分,连接这两个部分的边总流量最小,即为最小割(minimum cut)问题。因此求最大流问题可以等价于最小分问题。如果将S看做前景点,T看做背景点,分割后的两部分,对应了图像的前景像素集和背景像素集,即相当于完成了图像分割。

Graph cuts在视差估计中的应用

Graph cuts算法可以用来解决能量(特定形式的目标)函数的优化,因此可以应用于视差估计中。
能量函数:
E(f) = Esmooth(f) + Edata(f)
Edata(f) = ∑(p∈P) Dp(fp),P为一个图像区域,通常表示整幅图像。Dp表示一个像素在视差fp下的准确度。
Esmooth(f)表示像素间视差平滑性,应该是一个分段平滑函数。目前广泛采用Esmooth(f) = ∑(p,q∈N) V{p,q}(fp,fq)。N表示邻近像素对集合,V{p,q}(fp,fq)表示fp下像素p和fq下像素q的视差的差。fp和fq属于L,L是已经设定好的视差范围内的视差数量。
这样就可以通过Graph cuts来解决视差估计问题了。下面来介绍一种α-expansion算法。
将一个视图看做图G,视图中的每个像素都对应图G中的一个普通节点。然后构造S(α)和T(α-)节点,将所有节点都连起来。
这里写图片描述
α和α-属于L,L表示视差的集合。考虑L中只有两个视差的最简单情况,图中的p,q,r,s表示像素点,a和b是辅助节点。t表示t-links边(连接普通顶点与虚拟顶点),e表示n-links边(连接两个普通顶点)。
此时,t的权重可以表示为Edata,e的权重可以表示为Esmooth。当两个相邻像素的视差不同时,就在两个像素之间构造一个辅助节点,这个辅助节点只与sink节点相连。因此增加一个辅助点,会增加两条n-links和一条t-links。例如p和q之间插入a点,会增加e{p,a},e{a,q},ta-α-三条边,这条边的权重满足三角不等式,需要如下图设计:
这里写图片描述
其中Pα表示初始视差为α的像素集合。
对该图通过Graph cuts算法找最大流,就可以为每个像素分配一个视差了。

0 0
原创粉丝点击