抠图
Blue Screen Matting
- 始祖抠图算法
定义matting问题
$$
I=\alpha F+(1-\alpha)B
$$
- 假设一张图片由背景(background),前景(foreground),透明度组成。
- 而透明度也就是RGBA的第4个元素,对于每一个RGB像素都有着对应的A(就是$\alpha$),当然也可以全部的$\alpha$都相等
- 那么现在的问题就变成了:已知I,求解$\alpha,F,B$的其中两个
条件放松,问题转化
首先有:F是由前景对应的图片和一个纯色背景按照matting公式合成的
从上面的式子可知,要直接求出想要的东西是很难的,所以我们要加一些限制条件
第一种限制形式:假设背景只要一种颜色,我们假定这个是蓝色
- 这个显然是一个极好的限制条件,这可能也是我们的各种证件照为什么会有限制的底色的原因
- 既然B只有蓝色,那么显然的我们就可以让前景F没有蓝色了,所以matting后的图片的所有蓝色分量全部来自于B,那么就能求出对应的$\alpha$了
第二种限制形式:假设图片是灰度图,也就是说$R=G=B$
- 当然我们可以不用把条件限制的那么禁,如只用R=G即可
第三种限制形式:对于同一个前景目标,在不同的背景下拍摄
当然可以使两张图对应的$\alpha$相同
$$
I_1 = \alpha F + (1-\alpha)B_1\
I_2 = \alpha F + (1-\alpha)B_2
$$- $已知I_1,I_2,B_1,B_2,求解\alpha ,F$
下面我们简化一下问题: 我们简化一下就是已知背景图$B$
现在已知将问题转化为优化问题
$$
I_1 - I_2 = (1-\alpha)(B_1 - B_2)\
当(I_1-I_2) 与 (B_1-B_2)共线的时候才有确定的\alpha\
所以我们让等式尽可能成立,问题转化成\
\min_{\alpha} ||(I_1-I_2)-(1-\alpha)(B_1-B_2) ||\
然后就转化成了残差最小问题—->最小二乘法即可
$$两种方式:我们可以对整张图片的RGB来做最小二乘,也可以只针对一个小方框来做
Bayes Matting
前要知识
tri-map和scribbles
tri-map:三区标注图(标注前景,背景,未知领域)
- 上图黑白灰分别对应:背景,标注前景,未知领域
scribbles:手动粗略地画出前景与背景
上图白色涂前景,黑色涂背景
所以我们只用对上面两种方式的不确定部分建模即可
### 主要内容我们有$F,B,I(已知),\alpha$,依据最大后验概率和贝叶斯定理,有
$$
\max_{F,B,\alpha}P(F,B,\alpha|I)=\
\max_{F,B,\alpha}\frac{P(I|F,B,\alpha)P(F)P(B)P(\alpha) }{P(I)}=\
\max_{F,B,\alpha}L(I|F,B,\alpha)+L(F)+L(B)+L(\alpha)
$$- L表示取对数
1、求解$L(I|F,B,\alpha)$
- 假设图像是满足高斯分布的,那有
$$
L(I|F,B,\alpha)=-||I-\alpha F-(1-\alpha)B||^2/ {\sigma_I}^2\
{\overline I }= \alpha F-(1-\alpha)B\
\sigma_I 为I的标准差
$$2、求解$L(F)$
- 这一项相当于计算当前点属于前景的概率,所以$L(B)$的求解类似
Closed_form_matting
matting问题都是要假设的,该方法最重要的假设如下
$$
在一个小方框w内\I_i\approx\alpha_i F+(1-\alpha_i)B\qquad(i\in w)\
\Rightarrow \alpha_i \approx aI_i+b\qquad (a=\frac{1}{F-B},b=\frac{-B}{F-B})
$$- 以上$\approx$是假设a和b为常数(或说F和B)引入的
转化成可优化问题
既然已经有上述的等式了,那么下一步显然的就是求loss了
$$
J(\alpha,a,b)=\sum_{j\in I}(\sum_{i \in w_j}(\alpha_i-a_jI_i-b_j)^2+\varepsilon a_j^2)
$$- 后面的$\varepsilon$是为了正则化的
如果不加思考的话,那么很多人可能就会针对这条式子来优化了,但是该算法的巧妙之处就在于,作者思考怎么消去$常数a,b$,变成只有$\alpha$的优化问题,最后求得$\alpha$的解析解
我们假设第二条式子是某个向量的模的平方,通过观察然后构造
- 假设当前窗口是3×3的,用背景颜色$(F_k,B_k)求得(a_k,b_k)$
$$
G_k={\left[\begin{matrix}
I_1&1\
I_2&1\
.&.\
.&.\
.&.\
I_9&9\
\sqrt{\varepsilon}&0
\end{matrix}\right]},
\alpha_k={\left[\begin{matrix}
\alpha_1\
\alpha_2\
.\
.\
.\
\alpha_9\
0
\end{matrix}\right]}\
\Rightarrow G_k\left[\begin{matrix}a_k\b_k\end{matrix}\right]-a_k=\left[\begin{matrix}I_1a_k+b_k-\alpha_1\I_2a_k+b_k-\alpha_2 \…\I_9a_k+b_k-\alpha_9\\sqrt{\varepsilon}a_k\end{matrix}\right]\
所以,最后有\Rightarrow J(\alpha,a,b)=\sum_{k\in I}(G_k\left[\begin{matrix}a_k\b_k\end{matrix}\right]-\alpha_k)^T(G_k\left[\begin{matrix}a_k\b_k\end{matrix}\right]-\alpha_k)=\\sum_{k\in I}|(G_k\left[\begin{matrix}a_k\b_k\end{matrix}\right]-\alpha_k)|^2\
$$
那么现在的问题就转化成:
- 1、先对给定的$\alpha$求$a,b$的最小值
- 2、然后再求对应loss最小的$\alpha$
先针对第一步:我们对$a_k,b_k$求导
$$
设\beta=\left[\begin{matrix}a_k\b_k\end{matrix}\right],\alpha=\alpha_k\
J_k=(G_k\beta-\alpha)^T(G_k\beta-\alpha)\
求导\
\frac{\partial J_k}{\partial \beta}=2G_k^TG_k\beta-2G_k^T\alpha=0\
\beta^{}=\left[\begin{matrix}a_k^{}\b_k^{}\end{matrix}\right]=(G_k^TG_k)^{-1}G_k^T\alpha\qquad (\beta^{}表示最优的\beta,其他同理)
$$再针对第二步:
$$
将\beta^{*}代入\
J(\alpha,a,b)=\sum_{k \in I}|(G_k\left[\begin{matrix}a_k\b_k\end{matrix}\right]-\alpha_k)|^2\
提取因子\alpha,并设\overline G_k=I-G_k(G_k^TG_k)^{-1}G_k^T\
\Rightarrow J(\alpha,a,b)=\sum_{k \in I}\alpha_k(G_k^TG_k)\alpha_k=\sum_{k \in I}\alpha_kL\alpha_k\qquad(L=G_k^TG_k)
$$我们可以发现上面的$G_k$和正则化的拉普拉斯矩阵的形式是一样的,然后人们把L称为matting Laplace Matrix,在后续的抠图算法中,L是个很重要的矩阵
$$
L_{i,j}=\delta_{i,j}-\frac{1}{|w_k|}(1+\frac{1}{\frac{\varepsilon}{|w_k|}+\sigma_k^2}(I_i-\mu_k)(I_j-\mu_k))\
\delta 是克罗内克函数(当i=j时为1,其余为0)\\mu和\sigma分别是均值和方差,|w_k|是窗口内像素的个数
$$
加上用户交互的限制(以scribbles为例)
scribbles上,我们的限制可以构造成,如果涂了色那么就有对应的贡献
然后就变成了有约束的极值问题了–>拉格朗日乘子法
$$
\alpha=argmin\text{ } Loss=argmin\text{ } (\alpha^TL\alpha+\lambda(\alpha^T-b_s^T)D_s(\alpha-b_s))\
D_s是对角矩阵,对角上有值的元素对应scribbles上涂色的点,\设涂色为1,未涂为0\
b_s是与\alpha维度相同的列向量,涂色点上对应\alpha_i的值,其余为0\
继续求导\
\frac{\partial Loss}{\partial \alpha}=2L\alpha+2\lambda D_s(\alpha-b_s)\
所以\alpha^{*}=\lambda(L+\lambda D_s)^{-1}D_sb_s=\lambda(L+\lambda D_s)^{-1}b_s
$$由于计算量大,所以$\lambda$不训练,而是提前设定好一个值(事实证明,$\lambda$的值在一定范围内影响不了多少)
对彩色图:color line model(两色线模型)
上文的方法显然是基于灰度图的,所以需要每个通道都算一次,而且效果不一定好(因为要满足一个小方框内的三元向量(R,G,B)保持线性,这个约束太强)
所以我们加一个假设条件,假设:一个小方框内,背景和前景的值都是近似位于一条直线上的
$$
\begin{cases}
F_i=\beta_i^FF_1+(1-\beta_i^F)F_2\
B_i=\beta_i^BB_1+(1-\beta_i^B)B_2\
\end{cases}
$$- $F_1,F_2,B_1,B_2$分别对应着前景和背景的颜色向量(表示的一个线段的两个端点),$\beta$表示基于这两个端点的插值斜率
则最后能推到
$$
\alpha_i \approx\sum_{c \in \text{(R,G,B)}}a^cI_i^c+b\
\Rightarrow\alpha_i=a^TI_i+b\qquad(a=\left[\begin{matrix}a^R\a^G\a^B\end{matrix}\right])
$$
推导证明
- 虽然上面的结论看起来很有道理,可能不用说你都知道,但是我们还是给出一番证明
$$
将F_i.B_i的式子代入I_i=\alpha_iF_i+(1-\alpha_i)B_i\
I_i=\alpha_i(\beta_i^FF_1+(1-\beta_i^F)F_2)+(1-\alpha_i)(\beta_i^BB_1+(1-\beta_i^B)B_2)\
我们把式子转化成类似\text{Blue Screen Matting}中的式子\
I_1 - I_2 = (1-\alpha)(B_1 - B_2)\
所以有\Rightarrow I_i-B_2=H\cdot \left[\begin{matrix}\alpha_i\\alpha^i\beta_i^F\(1-\alpha_i)\beta_i^B\end{matrix}\right]\(H=[F_2-B_2,F_1-F_2,B_1-B_2])
$$
然后我们就把问题转化成了一个线性方程组
$$
设\qquad x_1=\alpha_i,x_2=\alpha^i\beta_i^F,x_3=(1-\alpha_i)\beta_i^B\
所以H\cdot \left[\begin{matrix}x_1\x_2\x_3\end{matrix}\right]=I_i-B_2
$$那么我们求出线性方程组后的第一行的元素就是答案,所以把$H^{-1}$乘过去
$$
\left[\begin{matrix}x_1\x_2\x_3\end{matrix}\right]=H^{-1}\cdot (I_i-B_2)
$$所以,$x_1$的值只和$H^{-1}$的第一行元素有关,我们提取出来就能得到形为$x_1=\alpha_i=a^TI_i+b$的式子
得到新的Matting Laplace Matrix
将上述公式代入此模型重新推导后得到
- $$
L_{i,j}=\sum_{(i,j)\in w_k}[\delta_{i,j}\frac{1}{|w_k|}(1+(I_i-\mu_k)^T(\sum_k + \frac{\epsilon}{|w_k|}I_3)^{-1}(I_i-\mu_k))]
$$
- $$