立体视觉,grah cut

最近在学习立体视觉的内容,具体就是利用双目摄像得到的左右图来计算目标的视差图。

论文1:An Experimental Comparison of:Min-Cut/Max-Flow Algorithms for
     Energy Minimization in Vision

论文2:Fast Approximate Energy Minimization via Graph Cuts

基于图割的算法,看了很多博客都说是性能比较好,但速度很慢的算法。我用opencv跑下来确实很慢。

我是这样理解这个算法的:

先人发明了含有两个terminal nodes(source,sink)的最大流/最小割算法,

立体视觉,grah cut_第1张图片


立体视觉,grah cut_第2张图片

上面这一个图像,对像素进行label,可以用来表示深度信息。(b)中黑框代表像素的不连续性。

后来有人发明了能量函数这个东西,并用最大流/最小割算法来优化这个能量函数。


其中,L是像素的label,等式右边是两个惩罚项,Dp是一个数据项,表示对一个像素p,给定观测数据,它的label跟它fit的多好;

最右边是叫平滑项,对相邻像素对的不连续性进行惩罚。


根据这个能量函数,对边的权重进行合理的设置,对图的最小割和能量函数的最小化有对应关系。最小割与最大流是等价关系,所以

就是求取图的最大流问题。

立体视觉,grah cut_第3张图片

上图中A代表活动节点(active),P代表静止节点(passive),

这个最小割/最大流算法包括三步:

1)生长步骤:同时建立两颗树,S和T分别为根节点,S和T生长,直到找到一条S->T的路径

2)增广步骤:对上面找到的路径进行增广,具体去看论文1

3)采纳步骤:将两颗搜索树S和T保存

你可能感兴趣的:(立体视觉,grah cut)