图割算法阅读笔记
交互式图像分割
交互式图像分割指用户以某种交互手段指定图像的部分前景与部分背景,然后算法以用户的输入作为分割的约束条件自动地计算出满足约束条件下的最佳分割。典型的交互手段包括用一把画刷在前景和背景处各画几笔以及在前景的周围画一个方框等。
基于图割算法的图像分割技术是近年来国际上图像分割领域的一个新的研究热点。该类方法将图像映射为赋权无向图,把像素视作节点,利用最小切割得到图像的最佳分割。
Graph Cut
Graph Cut图割算法用于解决低级计算机视觉问题,该类方法将图像分割问题与图的最小割(min cut)问题相关联,采用最小割最大流方法进行图像分割,将图像分割为前景和背景。使用时在前景和背景处各话几笔作为输入,算法将建立各个像素点与前景背景相似度的赋权图,并通过求解最小切割区分前景和背景。
最小割算法(Minimum Cut)
最小割算法(Minimum Cut)是图像分割的经典算法之一,在"Graph Cut"、"Grab Cut"等算法中都有被使用过。
提出该分割算法的论文:
Interactive Graph Cuts for Optimal Boundary & Region Segmentation of Objects in N-D Images
最小割
图论中的最小割
在图论中,图的最小切割是其在某种意义上是最小的切割(图形的顶点划分为由至少一个边连接的两个不相交的子集)。图的最小割可以分很多情况进行讨论,例如有向图、无向图,边的权重等。下图是一张无向无权重图和它的两个割,红色的线格割掉了三条边,而绿色的线割掉了两条边,很明显绿色的线为该图的最小割。
image
Graph Cut(图割)
Graph cuts是一种十分有用和流行的能量优化算法,在计算机视觉领域普遍应用于前背景分割(Image segmentation)、立体视觉(stereo vision)、抠图(Image matting)等。
此类方法把图像分割问题与图的最小割(min cut)问题相关联。首先用一个无向图G=<V,E>表示要分割的图像,V和E分别是顶点(vertex)和边(edge)的集合。此处的Graph和普通的Graph稍有不同。普通的图由顶点和边构成,如果边的有方向的,这样的图被则称为有向图,否则为无向图,且边是有权值的,不同的边可以有不同的权值,分别代表不同的物理意义。而Graph Cuts图是在普通图的基础上多了2个顶点,这2个顶点分别用符号”S”和”T”表示,统称为终端顶点。其它所有的顶点都必须和这2个顶点相连形成边集合中的一部分。所以Graph Cuts中有两种顶点,也有两种边。
第一种顶点和边是:第一种普通顶点对应于图像中的每个像素。每两个邻域顶点(对应于图像中每两个邻域像素)的连接就是一条边。这种边也叫n-links。
第二种顶点和边是:除图像像素外,还有另外两个终端顶点,叫S(source:源点,取源头之意)和T(sink:汇点,取汇聚之意)。每个普通顶点和这2个终端顶点之间都有连接,组成第二种边。这种边也叫t-links。
image.png
相关论文及python实现代码:
PAPER:
1.Fast approximate energy minimization via graph cuts
2.Graph based algorithms for scene reconstruction from two or more views
3.What energy functions can be minimized via graph cuts?
4.Interactive Graph Cuts for Optimal Boundary & Region Segmentation of Objects in N-D Images
CODE
https://github.com/cm-jsw/GraphCut
参考项目:https://github.com/NathanZabriskie/GraphCut
GrabCut和GraphCut的不同点
(1)GraphCut的目标和背景的模型是灰度直方图,GrabCut取代为RGB三通道的混合高斯模型GMM;
(2)GraphCut的能量最小化(分割)是一次达到的,而GrabCut取代为一个不断进行分割估计和模型参数学习的交互迭代过程;
(3)GraphCut需要用户指定目标和背景的一些种子点,但是GrabCut只需要提供背景区域的像素集就可以了。也就是说你只需要框选目标,那么在方框外的像素全部当成背景,这时候就可以对GMM进行建模和完成良好的分割了。即GrabCut允许不完全的标注(incomplete labelling)。
效果:
image
GitHub代码:
- https://github.com/downingstreet/GrabCut
- https://github.com/Orcuslc/GrabCuthttps://github.com/Orcuslc/GrabCut
Grab Cut论文:
“GrabCut”: interactive foreground extraction using iterated graph cuts
参考博客
https://blog.csdn.net/mmm_jsw/article/details/83866624
https://blog.csdn.net/mmm_jsw/article/details/83787395
https://github.com/NathanZabriskie/GraphCut/tree/master/graph_cut
https://blog.csdn.net/zouxy09/article/details/8534954
https://blog.csdn.net/zouxy09/article/details/8532111
https://blog.csdn.net/zouxy09/article/details/8535087