现在的位置: 首页 > 综合 > 正文

Image Matting(抠图)技术介绍:Knockout 抠图

2018年05月28日 ⁄ 综合 ⁄ 共 2529字 ⁄ 字号 评论关闭

        抠图技术发展到现在估计相关论文不下千篇了,不过被业内认可的算法依然屈指可数,knockout是其中之一。他被认可并不是因为效果出众,比起效果现今的几个算法都远胜于他,他是90年代就被提出的算法,至今依然常被使用,主要原因是他算法简单,高效。

        图像处理领域中的所有算法基本可以分为三大类,一类是纯粹的对像素点的“操作”,这种“操作”的合理性多数是建立在经验和未经严格证明的事实上,颇有工程性的味道,数学上是不是严格成立不重要,重要的是算法能工作能出效果就行。另一类则是纯粹的玩数学,将处理过程抽象成某个数学问题,然后使用各种公式定理将其解出。最后一类当然也就是前两者的结合了。第一类多数都是高效的,但效果上会差一点。第二类效果上会比第一类稍微好一点,但所花费的计算机时间往往是长的让人无法接受,是只能存在于学术层面上的所谓“方法”。但有意思的是多数第二类算法更容易登上核心期刊并备受推崇,但在实际中用的最多的还是第一类算法。毕竟只有极少数场合能接受第二类算法带来的逆天的执行时间。

        knockout就是属于第一类算法,看了作者的两篇专利(Ps:这个算法没有发表过论文,只发表过专利),第一篇名字叫“Method for Removing from an Image the Background Surrounding a Selected Object”,第二篇名字叫“Comprehensive Method for Removing from an Image the Background Surrounding a Selected Object”。可以看出第二篇名字和第一篇差异就在多了个“Comprehensive”,顾名思义第二篇专利其实就是第一篇的改良版。不过这两篇专利中只字未提“knockout”这个单词,但其他文献引述这一算法时都将其称为knockout,这着实让我大惑不解,目前的猜测是COREL公司的某款名字叫做KNOCKOUT的产品用了这个算法,而很多文献就直接以这个名字来指代这个算法了。

        言归正传,首先knockout算法只能用在trimap图中。根据上一篇文章的理论,这个算法的目标就是将未知区域中的每个像素的前景分量S、背景分量B估计出,进而算出alpha分量得到蒙版图像(matte image),蒙版图像以及估计出的S、B分量获得后,抠图也就完成了。

        那所有的难点也就集中在了如何估计出未知区域中每个像素的前景分量和背景分量了。trimap图中被指定为前景区域的alpha都是1,这一部分的图像的原始像素颜色值就是前景分量,而在trimap图中被指定为背景的区域alpha都是0,这一区域的像素的原始颜色值就是其背景分量。而对未知区域中像素的前景分量和背景分量的估计的依据就是来源于这些已经被确定为前景和背景的区域。

        以图1为例,knockout算法估计某个来自未知区域的像素的前景分量时,先定位trimap图中未知区域的边界,然后从邻接trimap前景区域的边界处找到离待估计的像素点距离最近一点。这一在未知区域边界上距离待估计点最近的真实前景点(trimap图中所有被标记为前景区域的像素点都被称为真实前景点),它对待估计点的前景分量“影响”是最大的,这里的“影响”也可以理解为“最相关”或“贡献最大”等。因此knockout算法为这个采样点乘以1.0的加权值,然后在邻接前景区域的边界上再找距离是最短距离两倍的真实前景点,一般是两个,这些点对待估计像素的前景分量影响最小,因此算法给这些采样点乘以0.0的加权值,而在边界上距离介于这两者之间所有真实点乘以的加权值是1.0随距离增大等比减小后的数值,最后对这些采样点加权平均后得到的就是有knockout算法估计出的未知区域当前像素点的前景分量。背景分量的估计方法与此相似。

        这里要提一下这个算法的发明人在他的第二篇专利中提到的改进之处,作者认为仅仅通过这种方式的估计,在某些图像中,例如一些同时包含前景和背景的半透明区域会有较差的估计,因为当前待估计像素的前景或背景分量与周围可采样的真实前景和背景分量有着很大的差异,可以说是完全不相关的,因此加权平均后的值依然离真实值相差很远,在这种情况下就需要对估计出来的前景或背景分量进行修正,而他的第二篇专利其中一项内容就是阐述如何进行有效修正。

        作者在第二篇专利中提了3种修正方式,但我看遍全文也没有看到作者对这三种策略为何有效进行过解释(也许发布专利不需要解释吧),在策略选择方式上,作者给出的结论是各个策略最后修正的值在RGB颜色空间中哪个距离最接近待估计的像素原始颜色值,就选择该策略生成的修正值。

        不过虽然作者提了三个策略,但不知为何其他文献引用knockout算法时都仅仅只提第一个策略,也许只有第一个策略才是被学术界认可的策略吧,总之我看到这里还是有很多谜题没有解开,若是有其他高手对这两篇文章有新的见解可以留言探讨一下。

        因此这里就只详细介绍一下第一种策略的内容,首先见图2,图中虽是二维坐标系,但相关内容都是基于三维空间讲的,这里以修正背景分量估计值为例(一次估计中只修正一种分量,前景分量或者背景分量,通常是选择采样点距离待估计点较远的一个分量修正)。将初次估计出的前景分量、背景分量和待估计点原始颜色值标注在RGB颜色空间中,在图2中分别是F、B‘、C,过F、B’做一条直线,确定一个平面,平面过B‘点同时与直线FB’垂直(图2中BB'直线其实是一个平面),然后过C点做一条垂线垂直于之前生成的平面,与平面的交点B既是修正后的背景分量。

       最后将得到的前景分量和背景分量估计值分别按各自的颜色分量进行alpha计算,再以以各颜色通道的前景分量与背景分量之差作为权重,算出的三个alpha值再进行加权平均后得到最终的alpha值。

       alpha值获得后就可以生成alpha图,之后就是套上帝公式后就完成了knockout抠图了。

        文章最后是knockout算法执行后的一个效果图。

图1

图2

INPUT IMAGE

TRIMAP IMAGE

ALPHA IMAGE(matte)

抱歉!评论已关闭.