【转载请注明来源和作者】
你有没有经常看到网上有种帖子,叫做“大神帮忙p个图”,“大神帮忙p个背景"? 这种你在网上一搜可以搜出成千上万条:
可见大家对这种把感兴趣的部分从图中抠出来的应用技术很感兴趣。
关注深度学习、神经网络最近几年发展的朋友一定知道,现在图像的语义分割等技术最近几年发展非常迅猛,最典型的就是像Mask R-CNN这样的神作,可以非常精准的从图像中分割出不同的物体。
但是在深度学习方法尚未开启的时代,人们又是用什么方式进行抠图的呢?今天我就来给大家介绍一个非常经典的图像分割方法:GrabCut,其原论文如下。
Rother et al., “Interactive Foreground Extraction with Iterated Graph Cuts,” SIGGRAPH 2004.
大家可以看到这篇论文发表于2004年,此时深度学习的概念都还未提出。当时的人们是如何做到图像的精确分割的呢?
在GrabCut之前,已经有很多方法用于解决图像的前景背景分割了,但是它们要么是不够精确,经常出现错误,要么是需要非常繁琐的用户交互操作(例如我们前面讲过的Intelligent Scissors)。而GrabCut要解决的就是如何用最简单快速的用户交互来实现最准确的图像分割:
其实不仅是GrabCut的作者,其他人也都在进行类似的研究,但总有各种问题出现。而GrabCut则在前人研究成果的基础上,创造性的引入了多种改进点,让这个问题得到了较好的解决。话不多说,接下来我们就来欣赏下作者的成果。
上面这几张都是用户只需要在界面上拖出一个红框包裹住前景,然后GrabCut就可以自动将前景分割出来。
有的时候,仅仅框住前景还不能得到最好的结果,GrabCut还支持迭代式的修复,能够允许用户用画线的方式标注出前景或背景,从而得到更加精准的结果,例如下图中,第一遍红框框住士兵时,算法只得到了部分前景,帽子和一部分脚的像素丢失了,还有帽子旁边有一小部分背景的镂空区域被标注为前景了。GrabCut允许用户用画线的方式对此进行修正,从而自动得到更加准确的结果:
不仅如此,在GrabCut算法中,还允许对复杂的前景边缘,例如动物的毛发,进行更精细的修复,得到非常好的结果。下面这张图也来自GrabCut原论文,它从左到右展示了用不同的用户交互程度对图像进行标注,然后用Grabcut自动得到分割的结果。可以看到结果非常好,而且总的用户交互也很少:
那么,看起来如此不错的一种算法,它的原理是什么呢?我在下一节为你分解。
讲到基本原理,就不得不提到另外一篇发表于2001年的经典论文:
Interactive graph cuts for optimal boundary and region segmentation of objects in N-D images
这篇论文阐述了一种让用户交互式的指定图像中部分前景和背景区域,然后自动化的分割前景和背景的方法。
在这篇文章中:
看到这里,大家应该感觉到此方法的关键就是如何为连接赋以合适的能量E。原论文将E用非常经典的Gibbs形式表达为:
其中:
由于用户已经标记出了部分的前景和背景像素,因此已经标记的前景部分和背景部分都分别有自己的统计信息,例如直方图,我们可以认为这样的信息是先验信息。当我们执行分割后会对每个像素都标记不同的标签,此时得到的前景部分和背景部分又会有自己的直方图。当这种推断出来的直方图和先验直方图比较匹配时,R(A)较小,否则R(A)比较大。而
是用于控制R的权重。
如果两个相邻像素颜色相近,但却被标注为了不同的区域,那么B(A)就较大,否则B(A)就较小。
因此,当我们对每条边都给予了不同的代价时,就可以按上图所示方法,寻找使得整体分割代价最小的前景与背景之间的间隙,也相当于对不同的像素分配给了前景或背景,这个过程使用的是我们之前在xxx中提到过的最小割(min-cut)算法。
GraphCut方法看起来很不错,但它也有一些关键的缺陷。
针对这些错误,我们今天所讲述的GrabCut做了针对性的改进,我列表如下:
作者的论文中列出了GrabCut的完整算法流程:
GrabCut也并非完美的算法,它也有容易出错的地方。下面展示了在一些特殊场景,例如前景和背景对比度低比较混淆时,或前景和背景有大量细小镂空区域时,或是用户通过画框所标注的背景区域不能代表全图的背景区域的统计特征时,都容易出错。
为了解决这些问题,GrabCut在交互方式上也像其他算法一样,支持用户迭代式的改进。
作者的论文中列出了GrabCut和其他方法在交互方式和结果上的比较:
可以看到,GrabCut对用户的操作要求是最简单的,而结果却并非常好。注意这里为了能够让GraphCut算法支持彩色图片,作者的实现将统计信息换成了GMM。
因此,GrabCut的目标是让用户画最少的时间得到尽可能好的结果。作者还和PhotoShop中的磁力套索Magnetic Lasso在特定数据集上做了对比,结果证明只要初始的分割边缘的正确程度超过50%,那么GrabCut的结果就会优于磁力套索。
类似GrabCut这样的前景背景分割技术的直接应用就是”大神帮忙p个图“,我们来看看作者们列出的例子:
好吧,最后一张是苍老师乱入,我自己弄的,非作者所为
在深度学习的各种厉害的抠图算法出来之前,有很多人研究了各种各样的方法进行前景的提取。我们今天介绍的GrabCut是一种能够让用户用最少的操作最快获取较高质量抠图效果的算法,它的特点和创新点是:
总而言之,即便到了今天,其中的一些思想也依然有借鉴意义。例如,当今在为深度学习的算法准备数据集时,必要涉及到对图像进行标注。在标注过程中,虽然现在可以采用一些高级方法进行初步抠图,但难免会出现错误,此时,如何用最小的用户交互操作对初次结果进行修补,并(也许是迭代式的)自动化的计算出更精细的抠图结果,就是对好的标注工具的要求了。
这篇文章参考了如下资料:
1. Rother et al., “Interactive Foreground Extraction with Iterated Graph Cuts,” SIGGRAPH 2004. 2. BOYKOV, Y., AND JOLLY, M.-P. 2001. Interactive graph cuts for optimal boundary and region segmentation of objects in N-D images. In Proc. IEEE Int. Conf. on Computer Vision, CD–ROM. 3. Rother et al, GrabCut presention of Microsoft Research Cambridge
最后,苍老师的图像来自下面链接,如果侵权请告知我,我立刻换图,盘上很多
我在抠苍老师时,使用了OpenCV中自带的Sample,其地址在:
https://github.com/opencv/opencv/blob/master/samples/cpp/grabcut.cpp
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有