Magic Image(2)——Mathematical Model

上次试着用threshold的方式写(Magic image——Alpha Channel),虽然有那么些感觉了,但是最终的图像是二值化的,效果不好。

于是今天特意找了Alpha Blending的资料,根据wiki页面给出的公式:

$$\left\{\begin{aligned}
out_A &= src_A + dst_A(1-src_A)\\
out_{RGB} &= \frac{(src_{RGB}src_A + dst_{RGB}dst_A(1-src_A))}{out_A}\\
out_A &= 0 \implies out_{RGB} = 0
\end{aligned}\right.
$$

当我们的destination background不透明时,\(dst_A = 1\),于是有

$$\left\{\begin{aligned}
out_A &= 1\\
out_{RGB} &= src_{RGB}src_A + dst_{RGB}(1-src_A)
\end{aligned}\right.
$$

于是,根据我们的实际情况,对于合并后的图像I,给定背景B时,有如下等式:
$$\left\{\begin{aligned}
out_A &= 1\\
out_{G} &= I_{G}I_A + B_{G}(1-I_A)
\end{aligned}\right.
$$

当背景为白色时,上式变为
$$
\left\{\begin{aligned}
out_A &= 1\\
out_{G} &= I_{G}I_A + 255(1-I_A)\\
&= front_{G}
\end{aligned}\right.
$$

同理可得黑色背景时:
$$\left\{\begin{aligned}
out_A &= 1\\
out_{G} &= I_{G}I_A + 0(1-I_A)\\
&= I_{G}I_A\\
&= back_{G}
\end{aligned}\right.
$$

联立等式,我们正好有两个未知数,两个方程
$$\left\{\begin{aligned}
front_{G} &= I_{G}I_{A} + 255(1-I_A)\\
back_{G} &= I_{G}I_{A}
\end{aligned}\right.
$$

求解得:
$$\left\{\begin{aligned}
I_{A} &= 1 - \frac{(front_{G} - back_{G})}{255}\\
I_{G} &= \frac{back_G}{I_{A}}
\end{aligned}\right.
$$

利用此时得出的解写出来的效果如下,

not-perfect

not-perfect

可以看到,在白色背景的时候,可以比较清晰的看得back layer中的物体。

于是换了几张图之后发现,back layer中,如果有比较亮的部分,则都会出现这种情况。

于是增加了调整亮度的选项,在调整到合适的亮度之后,就基本接近于完美了~效果如下

almost-perfect

almost-perfect

这里就不贴代码了,

可以在Github上找到BlueCocoa/hoshizora
声明: 本文为0xBBC原创, 转载注明出处喵~

发表评论

电子邮件地址不会被公开。 必填项已用*标注