参考文献:
a bayesian approach to digital matting
an closed form matting_PAMI
Easy Matting - A Stroke Based Approach for Continuous
参考博客:
Image Matting代码和算法效果总结
closed-form-matting_-GitHub
天干物燥,小心抠图
《A CLOSED-FORM SOLUTION TO NATURAL IMAGE MATTING》的一句话的理解
《Computer Vision for Visual Effects》讲解笔记。
本人初学者,本文自我总结记录之用,有的地方理解的不透彻不正确,还请多指教.
浅读三篇经典Matting方法论文的个人理解和感受
图像分割和抠图(Matting)算法是完全不同的,刚开始阅读时混为一谈,通过阅读相关文章才了解到他们的区别,分割(Segmentation)是将图片中的像素分成多个类别也称之为硬分割。而Matting是也是一类分割问题,但抠图(Matting)是软分割,像头发,羽毛等等细节对应像素点的颜色不只是由前景本身的颜色决定,而是前背景颜色融合的结果,matting问题的目标就是,找出前背景颜色,以及它们之间的融合程度。
因此抠图算法要更加的复杂,精度也要远远的高于分割,当然,其效率也会更慢,在工程和商用上使用的并不如图像分割广泛。
Matting研究的问题就是通过左边的I,推测出右边的三个变量α、F和B。
I
=
α
F
+
(
1
−
α
)
B
(
1
)
式
I = αF+(1−α)B \\(1)式
I=αF+(1−α)B(1)式
对于三通道彩色图像,在每个像素处,存在三个方程式和七个未知数。显然是一个约束条件不足的问题,因此,需要用户交互才能扣取良好的图像。就几篇论文看来,目前用户交互的方式有两种:
一种是用户提供tri-map图划分为三个区域,而另外一种是用户通过画笔(scribbles)进行标记。用户交互的效果,对抠图的效果有一定的影响。拿基于tri-map方法来说,tri-map中的未知区域越小,获得的结果就越好。
现有的抠图方法可以分为基于传播(Easy Matting和CLOSED-FORM)的方法和基于采样(贝叶斯方法)的方法。
贝叶斯方法
算法的目标是在给定图像的未知区域内,在观察C的情况下找到最可能的F,B和α估计。将其表达为概率分布P的最大化,然后使用贝叶斯规则将结果表示为最大化对数似然总和。(将连乘转换成log的相加操作是为了避免大量概率连乘在计算机中会变为0)。
然后对各个分量建立模型,将问题分解为两个二次子问题,在第一个子问题中,假设α为常数,对F,B取偏导数为0,获得F,B。(对于凸优化问题,我们可以直接使用导数为0的方式求解)
在第二个子问题中,假设F,B为常数,求解α的值,如此循环迭代,直到结果比较稳定(用附近像素平均α,初始化α)。
Easy Matting方法
这篇文章是国内研究者撰写的,语义以及逻辑是十分的清楚,也是这几篇中最易阅读和理解的一篇了。文章前部的引言和相关工作部分,对于刚阅读matting文章有很多帮助。
这篇文章提出了一种用于交互式图像消光的迭代能量最小化框架。用户指定笔划就可以标记前景和背景。 从已知区域开始,将未知区域建模为马尔可夫随机场(MRF),并在每次迭代中将其能量表示为一个数据项和一个平滑项的组合。 通过在迭代过程中自动调整两个项的权重,可以通过几次迭代快速获得一阶连续和保留特征的结果。
这种方法的核心是能量方程,能量方程被分为三个部分:数据项,平滑度,和用于动态加权的λ。其中数据项用于测量观察到的颜色C和通过估计的F,B和α预测的颜色之间的差异。平滑度确保所得结果的平滑度。而λ动态变化:λ越大说明平滑度所占比重越大,λ越小数据项所占比重越大,当下层区域远离图像边缘时,遮罩应尽可能平滑,当接近边缘时,应该尽可能的表现出边缘的细节,随着迭代的进行,λ从大值逐渐变为小值。这符合从内部到已知区域边界的演变过程。
得到能量方程后,对等式两边αp取导数,重建遮罩,然后更新前景区域和背景区域,重复迭代2-4次。
本文还将该方法用于局部区域执行能量优化,以及视频抠图。
这种方法将全局,注意是全局的透明度与图像的灰度值定义为线性关系,很明显,这种条件是苛刻的,鲁棒性差的.
CLOSED-FORM方法
通过导师的讲解,closed方法是对Easy方法的一种升级,文中定义小窗口(局部)内的(例如:3x3的窗口)透明度与灰度值是线性的关系,这样一来条件就变的宽泛,鲁棒性提升,效果更好.
这篇文章从灰度图像的解决方案出发,将方法扩展到彩色图像。
在灰度图像中,为了使(1)式可解,必须假定F和B是局部光滑的,即图像窗口w中(3x3),F和B固定不变。可以得到α与 Ii是线性关系,要优化的目标函数为 α的估计值与实际值的差。
每个像素都有一个3x3的窗口,因此窗口间存在重叠,使得信息可以进行传播。
而窗口滑动存在四种状态(此处参考了一些别人的理解):
case-1:w在tri-map的前景或者背景中
case-2:w中,既有B的约束也有F的约束,即F,B已知
case-3:w中,只有F约束(或B被约束)和U(未知区域像素),有无穷多解。
case-4:w中只有U点(未知区域),
对于窗口,会从case-1和case-2开始,会出现case-3的情况,再到case-4,因为窗口之间相互传递性,如果在case-3中,我们为w中任一个U点(像素i),设定αi值,则case-3方程组有唯一解。当窗口从case-3进入case-4时,若前面case-3的点都已经确定,则此时case-4的window的F和B也已经确定(来自上一次滑动窗口),因而也可求出所有的点的 αi,F,B。如此F和B信息可以通过新的窗口传递下去,最后可计算出所有的点的透明度 α值。
这些估计值与最优α∗之间距离的和,随着随机游动的次数增加,最后会收敛,并达到最小值。
J
(
α
,
a
,
b
)
=
∑
j
∈
I
∑
i
∈
w
j
(
α
i
−
a
j
I
i
−
b
j
)
2
J(α,a,b)=∑j∈I∑i∈wj(αi−ajIi−bj)2
J(α,a,b)=∑j∈I∑i∈wj(αi−ajIi−bj)2
而a和b可消去,就留下了关于像素的alpha的代价。
扩展至彩色图片,因为有了3个通道,所以在单独在每个通道中应用灰度代价函数。但原文却采取了另外一种假设模型——color line model。
对于color line 模型:窗口内的前景和背景在RGB的空间分布倾向于形成相对少量的细长簇(或者说瘦长椭圆)中,因此,前景颜色F或背景颜色B颜色分布(对于3*3窗口,就是那25个像素的颜色分布)几乎处在一条线段上。空间里可使用2个端点确定一条线段,这就是下面式子的由来。
同样带入,经过和灰度图像相同的推导,以及ac和b消解,得到alpha的代价。
ps:这篇文章有很多的定理证明和方法的引用,感觉读起来比较困难,查阅了一些资料大概了解相关的流程,对于其中的公式的由来不是很明白。
导师说这是一篇神作,大佬的文章一般都会展示出强劲的科学素养,干货满满所以刚开始阅读困难很正常.
总结
阅读这些传统的Matting方法不难发现,他们都需要用户进行操作,人机交互,需要提供tri-map或者画笔进行标记。我也看到一些文章使用过往的Matting方法,但是结合深度学习网络,自行预测图像的tri-map,用户只用提供图片就可以得到结果,通过深度学习,获得未知区域更小的tri-map,以得到更好的结果。
通过三篇论文的阅读以及资料的查阅,学习了一些写作的技巧,以及前人的一些研究的思路,我明白了每一种方法的提出都需要有一定的知识储备,对前人的研究有充分的分析和了解,突破性或者创新性的方法,可能与别的领域有很多的联系(数学和物理)。
通过这次阅读学习,有一些收获,但是基于时间的原因,没有精读,对于一些推导或者定理证明还有些一知半解,对于一些细节还需要再思考推理一下。