什么叫“抠图”?顾名思义,所谓抠图就是从一幅图片中将某一部分截取出来,和另外的背景进行合成。不要小看这一工作,我们生活中的很多图像制品都曾经经过这种加工,例如广告等,需要设计人员将模特照片中的人像部分抠取出来,然后再和背景进行合成。事实上,抠图在您的生活中也大有用武之地,尤其是随着数码相机、扫描仪等设备的普及,越来越多的人开始乐于对自己手中的照片进行各种各样的“特殊处理”,譬如把自己的全身像抠取出来放到别的背景中,把恋人的单人照片进行抠图后与自己的照片合成双人照等等,都需要用到抠图。
在过去,人们往往使用套索工具进行抠图操作。作为Adobe公司的知名图形处理软件,PhotoShop可以对图形进行非常精确的处理,无论要抠取的图形有多复杂,也可以分毫不差地全部截取出来。但是,对于新手来说,PhotoShop的使用略嫌复杂,如果不经过一段时间的培训和练习,用户很难掌握操作的要领。为了将图片中的某一部分取出来,用户必须沿着对象的边缘“剪”一圈,如果图片本身有较多的棱角或者突起,工作的难度就会成倍增加。
与PhotoShop相比,Lazy Snapping的使用就要简单多了,对于绝大多数图形来说,只需要三步,就可以将我们需要的内容截取出来。
让我们以一幅猫的照片为例来看看这款软件是如何简单易用的。首先,我们按住鼠标左键,在需要截取的目标——猫的身上,随意划条线,这条线既不必准确地沿着猫的身体边沿部分,也不必要求什么“横平竖直”,只要是画在猫身上即可。然后,在猫的身边,也就是我们不需要的背景上,点住鼠标右键划一道。几乎在我们划完这条线的同时,图片中猫的部分就被套在一个取景框中了。怎么,还有一部分没有被选中?没关系,您只要在需要选中的位置再按住鼠标左键划几下,该部分就可以被选中了。
如果图形非常简单的话,那么只需要做到这一步就可以“大功告成”了。但是现在我们的目标是一只猫,其身体的边沿存在少数不规则或者低对比度的边缘,我们还需要进行第二步:微调。听到“微调”这个词,有的朋友可能认为会非常复杂。但事实上,这一步的操作依然非常简单。您可以通过调节套住猫身体的取景框来更准确地选取要截取的图片。如果您想更简单,也可以选择软件的“brush”功能,在不够准确的地方随着边界刷两下,软件就会自动将需要截取的目标图形的边界准确地勾画出来。
完成第二步操作后,图片中猫的部分已经基本上都被取景框选中了。但如果我们仔细观察就会发现,在前景和背景颜色不同的时候,背景的颜色往往会渗透到前景上来。在使用PhotoShop抠图的时候,这就需要做“羽化”操作,以尽量弱化这种情况,但在大多数情况下,羽化并不能完美地解决这一问题,往往需要将前景的边界收缩,“割”掉那些被背景颜色渗透的部分,也就是说要损失一定的前景。而在Lazy Snapping中,这一操作步骤被极大地增强并简化了,不论前景和背景的颜色对比度是高还是低,Lazy Snapping都可以非常准确地将前景的颜色清楚地分离出来,既不会缺少一部分,也不会让背景的颜色渗透到前景中去。
不过,如果您细心观察的话,就会发现,猫的胡须并没有被选中。这是因为猫的胡须为半透明,而且又长又细,相互之间又比较分散,因此软件难以自动将其选中。这时就需要用到第三步操作。这一步的操作更加简单,我们只要用鼠标在猫胡须部位随意涂抹两下,将胡须部位覆盖住,这些胡须就会被选中了。当然,严格地说,这并不是第三步操作的主要功能,软件设计者之所以为软件添加这一功能,其实更主要地是为了更好地完成前景和背景颜色的分离(Coherent Matting)。
Graph Cut技术是图论中的一个概念,也是Lazy snapping这款软件的核心技术。在软件的第一步和第二步操作中,对前景的轮廓计算和对细节部分进行修补的操作,都是基于该技术进行的。
首先,当一张图被导入到Lazy snapping中时,软件会自动采用一种被称为“水线(watershed)”的算法对该图进行处理。
所谓水线,通俗地说,就是把一张图像的梯度图想像成为一片凹凸不平的山地,其中,颜色变化小的区域就是山脊,而颜色变化剧烈的区域就是山洼。我们知道,每一个山洼周围必然都是一圈山脊,如果在每一个山洼的最低点打一个洞,然后通过这个洞向山洼里注水,则经过一段时间之后,相邻山洼里的水必然会越过山脊连接到一起。两个山洼之间的水连接在一起的这条线,就是水线。通过这些水线,软件就可以把图片分为大小不等的若干“碎片”。我们可以注意到,每一个区域中的颜色基本上都是相同的。