关于图像抠图算法,Levin等人在2007年基于图像的局部光滑 假设,利用代数的方法推导出了alpha matte矩阵闭合解的形式。原文名称是”A Closed Form Solution to Natural Image Matting”。
在抠图问题中,假设第i个像素点的值 Ii 是由前景点 Fi 和背景点 Bi 按下式加权合成的:
Ii=αiFi+(1−αi)Bi式1
其中
αi 称为前景透明度,也就是要求解的”alpha matte”矩阵,指定了原图中对应像素点的类型——属于背景(
αi=0 )、前景(
αi=1 )或是未知(
0<αi<1 )。鉴于前景图F和背景图B都是未知,要想求解出alpha矩阵,需要其他条件——用户输入提示和图像分布假设。
用户输入方式
不同的抠图系统所接受的用户输入一般有两种形式——trimap或scribbles。两种方式的目的都是要给出alpha matte矩阵的初始估计。trimap的方式需要用户指出所有的混合像素点,哪怕以掺入大量的前景点和背景点为代价,如(a)所示;而scribbles的方法只需用户在确定的前景和背景区域分别画出一些条状区域即可,如下图(b)所示,在转化成alpha matte矩阵时, α 的值同样也是前景处为1,背景处为0,scribble的交互方式显然比trimap的方式要简单,尤其当对于图像前景轮廓比较复杂的时候。
|
|
(a)trimap |
(b)scribble |
灰度图
为了使式1可以被求解,必须对F和B施加一些假设,该算法即假定F和B是局部光滑的,也就是在一个小的图像窗口w中(如3x3),F和B固定不变,那么式(1)就可以写成:
αi≈aIi+b,∀i∈w式2
也就是说
α 与
Ii 是线性关系(
a=1F−B ,
b=−BF−B 是常数)。那么就可以简单的定义要优化的目标函数为
α 的估计值与实际值的差:
J(α,a,b)=∑j∈I(∑i∈wj(αi−ajIi−bj)2+εa2j)式3
从表达式可以看出,子窗口存在大量重叠,正是该性质使得像素信息可以进行传播。该算法的巧妙之处在于通过一些代数推导,可以将a和b从式3中消去,转换为只有一个变量
α 的优化问题。
J(α)=mina,bJ(α,a,b)
J(α)=αTLα式4
其中,
α 是Nx1维的列向量(N是像素总数),L是一个NxN的对称正定矩阵:
L(i,j)=∑k|(i,j)∈wk(δij−1|wk|(1+1ε|wk|+σ2k(Ii−μk)(Ij−μk))
只有当i=j时,
δij 才等于1,其他情况下为0,
μk 和
σ2k 分别是子窗口内像素的均值和方差。
在抠图算法中,L是一个很重要的矩阵,人们称之为matting laplace矩阵,它除了是一个对称的正定矩阵之外,还是一个稀疏矩阵,只有满足
|i−j|<|wk|−1 的像素处L才是非0。所以,虽然L的维度很高,但仍可以采用高效的方式求解,尤其是利用MATLAB自带的一些稀疏矩阵函数。
推导过程也比较简单,主要就是先将式3平方和累加的形式转换为列向量的模,恰好是一个最小二乘法的形式,再根据最小二乘法解的公式求出使得J最小时a,b的值,即可消去a,b,只留下 α 。在抠图时,除了希望得到alpha matte矩阵,一般还希望可以得到对应的前景图和背景图的值,所以在这里详细推导一遍,同时给出a,b与 α 之间的关系。
用列向量模的形式表示式3:
J(α)=∑k||Gk[akbk]−αk¯¯¯¯||2
其中,
Gk=[Ikε√10]
α¯¯k=[αk0]
这是一个典型的最小二乘问题,求解结果就是:
[akbk]=(GTkGK)−1GTkαk¯¯¯¯
带入 J(α) 的表达式中即可整理出L。
彩色图
如果是rgb图,因为有了3个通道,所以需要对每个通道重复上述过程,但原文却采取了另外一种假设模型——color line model。与灰度图的局部光滑假设不同,color line 模型假定子窗口内的前景和背景像素值不是固定的,而是位于一条直线上:
{Fi=βFiF1+(1−βFi)F2Bi=βBiB1+(1−βBi)B2
将此假设带入到式1中,经过推导(原文中给出了证明),可以得到彩色图像的线性模型:
αi=∑cacIci+b,∀i∈w式5
ac 和b是仅与F,B,I有关的变量。将式5带入灰度图像的推导过程,同样可以将目标函数化简成式4,只是L略有不同:
L(i,j)=∑k|(i,j)∈wk(δij−1|wk|(1+(Ii−μk)(∑k+ε|wk|I3)−1(Ij−μk)))式6
此时
∑k 变成了窗口内所有像素的协方差矩阵,
μk 是三维列向量,分别对应三个通道的像素均值,
I3 是3x3的单位阵。L又被称为matting laplace矩阵。
用户输入约束下的优化问题
施加了像素分布的假设后,还需要考虑用户指定的前景和背景的先验分布。当用户按图(b)的方式在原始图像上画出一系列区域时, α 中相应像素点被赋值1(前景)或0(背景),那么式4的优化问题就变成了:
α=argminαTLα,s.t. αi=si, ∀i∈S式5
S是用户所指定的像素点的集合,
si 取0或1.
为求解式5,首先对L中的像素位置进行重组,再次强调之前所说的,L是对称矩阵:
L=[LMBTBLU]
LM 是已知像素点的集合,
LU 是未知像素点的集合,也就是将图像中所有标记出的像素排在前面,要求解的未知像素排在后面,当然为保证变换前后等式关系一致,
α 也需要相应调整:
α=[αMαU]
带入式4:
J(α)=[αTMαTU][LMBTBLU][αMαU]=αTMLMαM+αTUBTαM+αTMBαU+αTULUαU
要求
J(α) 的最小值,需要进行矩阵求导,矩阵求导的通用公式如下:
∂xTa∂x=∂aTx∂x=a
∂xTAx∂x=Ax+ATx
因为
αM 已知,所以上式中的第一项导数为0:
∂J∂αU=LUαU+LTUαU+BTαM+BTαM=0
LU 是对称的,所以最后求出的解为:
LUαU=−BTαM
算法运行效果
原图和用户输入的scribble图如下:
|
|
(a)原图 |
(b)scribble图 |
程序输出的结果如下:
|
|
(c)alpha matte矩阵 |
(d)前景图 |
|
(e)背景图 |
可以看出,尽管该算法比较简单,但即使是与一些采用繁复的迭代的算法相比,其效果也是不错的。
当然,最终结果的好坏还是取决于两个因素——图像是否满足color line model的假设以及用户输入的先验信息,据原文的说法,一般的自然图像都可以较好的满足color line model。
关于其matlab源码的解析将在下一篇文章中介绍。