文/《新电脑》 出处:新浪科技
什么叫“抠图”?顾名思义,所谓抠图就是从一幅图片中将某一部分截取出来,和另外的背景进行合成。不要小看这一工作,我们生活中的很多图像制品都曾经经过这种加工,例如广告等,需要设计人员将模特照片中的人像部分抠取出来,然后再和背景进行合成。事实上,抠图在您的生活中也大有用武之地,尤其是随着数码相机、扫描仪等设备的普及,越来越多的人开始乐于对自己手中的照片进行各种各样的“特殊处理”,譬如把自己的全身像抠取出来放到别的背景中,把恋人的单人照片进行抠图后与自己的照片合成双人照等等,都需要用到抠图。
在过去,人们往往使用套索工具进行抠图操作。作为Adobe公司的知名图形处理软件,photoshop可以对图形进行非常精确的处理,无论要抠取的图形有多复杂,也可以分毫不差地全部截取出来。但是,对于新手来说,PhotoShop的使用略嫌复杂,如果不经过一段时间的培训和练习,用户很难掌握操作的要领。为了将图片中的某一部分取出来,用户必须沿着对象的边缘“剪”一圈,如果图片本身有较多的棱角或者突起,工作的难度就会成倍增加。
与PhotoShop相比,Lazy Snapping的使用就要简单多了,对于绝大多数图形来说,只需要三步,就可以将我们需要的内容截取出来。
抠图三部曲
让我们以一幅猫的照片为例来看看这款软件是如何简单易用的。首先,我们按住鼠标左键,在需要截取的目标——猫的身上,随意划条线,这条线既不必准确地沿着猫的身体边沿部分,也不必要求什么“横平竖直”,只要是画在猫身上即可。然后,在猫的身边,也就是我们不需要的背景上,点住鼠标右键划一道。几乎在我们划完这条线的同时,图片中猫的部分就被套在一个取景框中了。怎么,还有一部分没有被选中?没关系,您只要在需要选中的位置再按住鼠标左键划几下,该部分就可以被选中了。
如果图形非常简单的话,那么只需要做到这一步就可以“大功告成”了。但是现在我们的目标是一只猫,其身体的边沿存在少数不规则或者低对比度的边缘,我们还需要进行第二步:微调。听到“微调”这个词,有的朋友可能认为会非常复杂。但事实上,这一步的操作依然非常简单。您可以通过调节套住猫身体的取景框来更准确地选取要截取的图片。如果您想更简单,也可以选择软件的“brush”功能,在不够准确的地方随着边界刷两下,软件就会自动将需要截取的目标图形的边界准确地勾画出来。
完成第二步操作后,图片中猫的部分已经基本上都被取景框选中了。但如果我们仔细观察就会发现,在前景和背景颜色不同的时候,背景的颜色往往会渗透到前景上来。在使用PhotoShop抠图的时候,这就需要做“羽化”操作,以尽量弱化这种情况,但在大多数情况下,羽化并不能完美地解决这一问题,往往需要将前景的边界收缩,“割”掉那些被背景颜色渗透的部分,也就是说要损失一定的前景。而在Lazy Snapping中,这一操作步骤被极大地增强并简化了,不论前景和背景的颜色对比度是高还是低,Lazy Snapping都可以非常准确地将前景的颜色清楚地分离出来,既不会缺少一部分,也不会让背景的颜色渗透到前景中去。
不过,如果您细心观察的话,就会发现,猫的胡须并没有被选中。这是因为猫的胡须为半透明,而且又长又细,相互之间又比较分散,因此软件难以自动将其选中。这时就需要用到第三步操作。这一步的操作更加简单,我们只要用鼠标在猫胡须部位随意涂抹两下,将胡须部位覆盖住,这些胡须就会被选中了。当然,严格地说,这并不是第三步操作的主要功能,软件设计者之所以为软件添加这一功能,其实更主要地是为了更好地完成前景和背景颜色的分离(Coherent Matting)。
Lazy Snapping的基础:Graph Cut
Graph Cut技术是图论中的一个概念,也是Lazy snapping这款软件的核心技术。在软件的第一步和第二步操作中,对前景的轮廓计算和对细节部分进行修补的操作,都是基于该技术进行的。
首先,当一张图被导入到Lazy snapping中时,软件会自动采用一种被称为“水线(watershed)”的算法对该图进行处理。
所谓水线,通俗地说,就是把一张图像的梯度图想像成为一片凹凸不平的山地,其中,颜色变化小的区域就是山脊,而颜色变化剧烈的区域就是山洼。我们知道,每一个山洼周围必然都是一圈山脊,如果在每一个山洼的最低点打一个洞,然后通过这个洞向山洼里注水,则经过一段时间之后,相邻山洼里的水必然会越过山脊连接到一起。两个山洼之间的水连接在一起的这条线,就是水线。通过这些水线,软件就可以把图片分为大小不等的若干“碎片”。我们可以注意到,每一个区域中的颜色基本上都是相同的。
为什么要先对图片进行“水线”处理呢?因为我们知道,在计算机中,每一幅图都是由无数个像素点构成的,当软件需要分辨出图像的前景和背景时,就需要对图像中的所有像素点进行分析,这样一来工作量会成立方级数增加,大大减缓处理的速度。而采用了“水线”处理之后,图像中需要分析的就是那些被分割出的区域了,其数量比像素点要少数十倍,从而大大加快了软件的处理速度。
接下来,就该是用户需要做的工作了——通过划线,告诉计算机哪些是我们想要的前景,而哪些是我们不想要的背景。如果从像素点的角度来看,一旦我们在图像上画了一条线,则这条线经过的像素点被我们称为“种子点”,这些“种子点”所涉及到的区域,则被称为“种子区域”。接下来,我们就需要借助这些“种子区域”将图片分为“前景区域”和“背景区域”两大块。利用Graph Cut优化算法,图片上所有区域会被赋予惟一的属性,不属于“前景区域”就一定会属于“背景区域”。
在经过“水线”处理后的图片中,我们把相邻的区域连接在一起。而接下来Graph Cut优化算法要做的,就是尝试将每个非“种子区域”分别与“前景区域”(或“背景区域”)之间的通路“打断”。如果全部通路都可以被打断,则软件猜测该区域不属于“前景区域”,反之则可能属于。这样,经过一番运算后,软件就可以将图形分为“前景区域”和“背景区域”两大部分了,也就将我们所需要的前景的大致轮廓勾勒了出来。
Graph Cut 优化的准则,考虑了每一个区域的颜色与种子区域之间的颜色相似性,颜色越像“前景区域”就越可能被分在前景。同时它也考虑了相邻区域的颜色差别,颜色差别越大这两个区域越可能被分开。这个优化问题可以用图论中极大流(极小割)的方法很快解决。
对于一张结构较为简单的图形来说,如果其前景和背景的对比非常明显,且前景的形状较为简单,则经过前面的处理后,前景图形就已经被“抠”出来了。不过,如果图片的内容较为复杂,且前景和背景之间的对比度不是很明显的话,则需要对图片进行进一步的微调。
所谓进一步处理,其实就是将前景与背景之间的“边界”清晰地确定下来。由于在此之前我们已经确定了前景的大致轮廓,因此在这里我们只对前景和背景相交处的边界附近进行处理,也就是已经确定好的“前景区域”和“背景区域”之间的那一块地带。
要说明的是,在前一步操作中,软件通过“水线”算法将图像分为一块块区域以加快处理的速度。而现在,由于要对图像的边缘部分进行调整,软件处理的对象又变成了像素而不再是区域,以满足处理精度方面的要求。
无心插柳柳成荫
“这是一款‘懒人’用的抠图工具。”微软亚洲研究院的两位研究员孙剑和李寅笑着对记者说。确实,从这款软件的名字“Lazy Snapping”我们就不难看出,为那些需要经常进行抠图操作的“懒人”们造福,正是这款软件设计的目的,不过,这却不是最开始时设计这款软件的初衷。用研究员李寅的话来说,这完全是一个无心插柳柳成荫的“偶然”结果。
最初,李寅和孙剑都是在制作IBR(Image-based Rendering基于图形的绘制)项目,例如同心拼图等。在这一项目的制作过程中,李寅发现,如果想使最终的制作结果取得较好的效果,就必须将每一个图形的边界都定义得非常准确。为此,在最初,他们设计了一个软件,专门用于将图片分成很多层,将图片前景和背景中的各种颜色都非常清晰、准确地分开,这在当时需要耗费大量的人工。由此,李寅想到,在处理图像的过程中,虽然有部分工作因为对细节部分要求非常高而不得不通过人去手动处理,但大多数工作完全不需要过多的人为参与应该就可以完成,那么,为什么不将这部分工作交给计算机去做呢?
正是这一想法最终导致了Lazy Snapping的诞生。为了使工作可以更加简化、快速,研究人员不仅要使软件的精确度大幅度提高,从而在极大程度上提升了计算的速度;更为重要的是,让使用者可以随时看到自己操作的结果,并且及时进行修改。当他们完成了软件的初步设计,尤其是将软件的处理速度和操作简易度大幅提高后,他们发现,这个软件已不再是最初设想的那种只能用于工作辅助的工具,而变成了一款足以独立出来完成抠图工作的专业软件。接下来,研究人员不断加强这款软件的精确度和流畅程度,使软件可以越来越迅速、准确地完成所需的工作。
在研发过程中,人们发现,由于现有的算法是对全图进行优化,因此软件在处理过程中容易产生错误。于是研究人员开始为软件添加一些更加人性化的设计,允许用户对局部图形进行调整,使得软件的处理结果可以更加准确。随着软件的日渐完善,研究人员又为其添加了处理半透明边缘的能力,例如处理猫的胡须等,效果也非常好。至此,Lazy Snapping的雏形就已经大致完成了。
在软件初步完成后,研究人员开始征集志愿者对其进行对比测试,对比的对象是PhotoShop。当然,对比的只是PhotoShop中的抠图功能这一部分。测试的方法很简单,他们将志愿人员分为两组,一组是曾经使用过PhotoShop的,一组则是没有使用过的。然后,对每一位人员分别进行两段时间为5分钟的培训,其内容则分别为PhotoShop的抠图功能和Lazy Snapping的使用。
然后,每一个人分别使用两个工具对两组图形进行抠取,一组要求做到最好的质量,另一组要求在一分钟内完成任务。从测试结果来看,志愿人员掌握Lazy Snapping的速度要明显快于掌握PhotoShop,而两个软件在处理精度上的差别则不是很大。不过,专业用户表示,软件虽然可以通过非常简单的操作实现精度较高的处理,但其“可参与度”较低,无法进行更进一步的细致操作。 通过这次用户调查,研究人员不仅获得了信心,也掌握了进一步发展的方向。