【图像处理】-027 Blue Screen Matting

【图像处理】-027 Blue Screen Matting

  在电视行业,广泛使用的绿幕抠像,又称为chromakey。以前对这个应用倒是很熟悉,但对原理不熟悉,这次在阅读matting论文的时候,读到了《Blue Screen Matting》一文,感觉对蓝幕抠像、绿幕抠像的原理进行了介绍,这里对这篇文章做一个笔记。

1 简介

1.1 Definitions

  抠像问题,是从一个矩形的背景图像中,分离出来一个非矩形的前景图像的问题。matte最开始来自电影工业,表示一卷独立的胶卷,用于记录播放时想要投影出去的画面区域,感兴趣区域是透明的。放映时,将matte和颜色胶卷同步播放,光线不能透过matte胶卷的遮蔽区域。holdout matte中,感兴趣区域是不透明的,其他区域都是透明的。

  alpha channel是holdout matte的数字形式。对于色彩图像中需要被用户看到的像素,在alpha channel中对应一个高像素值,对于不希望用户看到的像素,在alpha channel中对应一个0值。通常,使用1和0表示alpha值,在使用8bits存储时,使用255表示1,0表示0.小数的透明度值表示彩色图像中的像素部分透明。

1.2 Problem

  通过组合多个像元(elements)生成单一的一张结果图像(composite)是一个很常见的想法。这里,我们将问题限定在这样一个特殊范围内:一个或多个前景目标放置在一个特定颜色的背景上。

  抠像问题可以视为将一个复杂场景拆分成组成这个场景的多个组成部分。这里,我们讨论的问题是只给定一幅组合后的图像,从中分离出各个组成部分。对于多通道摄影中涉及的红外、紫外等手段将前景目标记录到单一的影片中的技术,其中不涉及抠像问题。

  使用 C f C_f Cf表示前景图像上的颜色, α f = 1 \alpha_f=1 αf=1,前景图全部不透明, C b C_b Cb表示新背景图上的颜色, α b = 1 \alpha_b=1 αb=1,新背景图全部不透明。那么可以使用 C C C表示组合之后的颜色,其中 C = f 1 ( C f , C b ) C=f_{1}(C_f,C_b) C=f1(Cf,Cb), f 1 f_1 f1表示组合方式。

  假设前景图 C f C_f Cf是由前景目标组合之前的颜色 C o C_o Co与特定的纯色背景颜色 C k C_k Ck组合而来,那么 C f = f 2 ( C o , C k ) C_f=f_{2}(C_o,C_k) Cf=f2(Co,Ck),其中 α k = 1 \alpha_k = 1 αk=1,表示纯色背景全部不透明, α o \alpha_o αo表示前景目标上各像素的透明度。

  在《Compositing Digital Images》一文中指出,当使用 o v e r over over操作组合两幅图像时,将透明度为 α a \alpha_a αa的图像 a a a叠加到图像 b b b之上的时候,可以通过下列公式计算输出的颜色:
(1) C = C a + ( 1 − α a ) C b , 0 ≤ α a ≤ 1 C=C_a+(1-\alpha_a)C_b , 0 \leq \alpha_a \leq 1 \tag{1} C=Ca+(1αa)Cb,0αa1(1)
  那么,对于上面的 f 2 f_2 f2组合,选用 o v e r over over操作,
(2) C f = C o + ( 1 − α o ) C k C_f=C_o+(1-\alpha_o)C_k \tag{2} Cf=Co+(1αo)Ck(2)
  由于将前景图 C f C_f Cf组合到新背景图 C b C_b Cb上,指的是将前景图上的前景目标组合到新背景上,因此,
(3) C = C o + ( 1 − α o ) C b C=C_o+(1-\alpha_o)C_b \tag{3} C=Co+(1αo)Cb(3)

        The Matting Problem
Given C f C_f Cf and C b C_b Cb at corresponding points, and C k C_k Ck a known backing color, and assuming C f = C o + ( 1 − α o ) C k C_f=C_o+(1-\alpha_o)C_k Cf=Co+(1αo)Ck, determine C o C_o Co which then gives composite color C = C o + ( 1 − α o ) C b C=C_o+(1-\alpha_o)C_b C=Co+(1αo)Cb at the corresponding point, for all points that C f C_f Cf and C b C_b Cb share in common.
  ——摘自《Blue Screen Matting》,Alvy Ray Smith and James F.Blinn,SIGGRAPH 96
  其中, C o C_o Co包括颜色和透明度,称为抠像问题的解。如果各个像素的 C o C_o Co都能够求出的话,那么就能够求出所有像素下前景图与新背景图的组合之后的颜色。

2 Matting problem special case solution

  对于直接从式(2)中求解 C o C_o Co是很困难的,因此,我们先讨论一些特殊情况下的解。

2.1 No blue

  这里,我们假设前景元素中没有蓝色分量,而背景元素中只含有蓝色分量,即 c o = [ R o , G o , 0 ] c_o=[R_o,G_o,0] co=[Ro,Go,0], c k = [ 0 , 0 , B k ] c_k=[0,0,B_k] ck=[0,0,Bk],那么
(4) c f = c o + ( 1 − α o ) c k = [ R o , G o , 0 ] + ( 1 − α o ) [ 0 , 0 , B k ] = [ R o , B o , ( 1 − α o ) B k ] c_f=c_o+(1-\alpha_o)c_k=[R_o,G_o,0]+(1-\alpha_o)[0,0,B_k]=[R_o,B_o,(1-\alpha_o)B_k] \tag{4} cf=co+(1αo)ck=[Ro,Go,0]+(1αo)[0,0,Bk]=[Ro,Bo,(1αo)Bk](4)
  而实际上, c f = [ R f , G f , B f ] c_f=[R_f,G_f,B_f] cf=[Rf,Gf,Bf],所以
(5) B f = ( 1 − α o ) B k B_f = (1-\alpha_o)B_k \tag{5} Bf=(1αo)Bk(5)
  当 B k ≠ 0 B_k \neq 0 Bk̸=0时,
(6) α o = 1 − B f B k \alpha_o=1-\frac{B_f}{B_k} \tag{6} αo=1BkBf(6)
  由于前景元素中没有蓝色分量,背景只含有蓝色分量,所以,组合之后的前景图像 C f C_f Cf中所有的蓝色分量都来自于背景,因此可以求解出组合前的前景元素的透明度。

2.2 Gray or Flesh

  第二类特殊问题可以理解成 C o C_o Co是灰度图,也就是说 R o = G o = B o R_o=G_o=B_o Ro=Go=Bo,我们可以将条件放松到 R o = B o R_o=B_o Ro=Bo或者 G o = B o G_o=B_o Go=Bo

  当 R o o r G o = a B o + b α o R_o orG_o=aB_o+b\alpha_o RoorGo=aBo+bαo c k c_k ck是纯色,并且 a B k + b ≠ 0 aB_k+b \neq 0 aBk+b̸=0时,抠像问题存在解 C o C_o Co
(7) c o = [ R o , G o , B o ] c f = [ R f , G f , B f ] c k = [ 0 , 0 , B k ] \begin{array}{l} c_o=[R_o,G_o,B_o] \tag{7} & & \\ c_f=[R_f,G_f,B_f] & & \\ c_k=[0,0,B_k] & & \\ \end{array} co=[Ro,Go,Bo]cf=[Rf,Gf,Bf]ck=[0,0,Bk](7)
  因为 C f = C o + ( 1 − α o ) C k C_f=C_o+(1-\alpha_o)C_k Cf=Co+(1αo)Ck,所以
(8) { c f = c o + ( 1 − α o ) c k c f = [ R o , G o , B o − ( 1 − α o ) B k ] c f = [ R o , a B o + b α o , B o + ( 1 − α o ) B k ] c f = [ R f , G f , B f ] \begin{cases} c_f=c_o+(1-\alpha_o)c_k\quad \\\\ c_f=[R_o,G_o,B_o-(1-\alpha_o)B_k]\quad \\\\ c_f=[R_o,aB_o+b\alpha_o,B_o+(1-\alpha_o)B_k]\quad \\\\ c_f=[R_f,G_f,B_f] \tag{8} \end{cases} cf=co+(1αo)ckcf=[Ro,Go,Bo(1αo)Bk]cf=[Ro,aBo+bαo,Bo+(1αo)Bk]cf=[Rf,Gf,Bf](8)
  所以
(9) { G f = a B o + b α o B f = B o + ( 1 − α o ) B k \begin{cases} G_f=aB_o+b\alpha_o\quad \\\\ B_f=B_o+(1-\alpha_o)B_k\quad \tag{9} \end{cases} Gf=aBo+bαoBf=Bo+(1αo)Bk(9)
  所以
(10) { α o = G f − a B o b B f = B o + ( 1 − G f − a B o b ) B k \begin{cases} \alpha_{o}=\frac{G_f-aB_o}{b}\quad \\\\ B_f=B_o+(1-\frac{G_f-aB_o}{b})B_{k}\quad \tag{10} \end{cases} αo=bGfaBoBf=Bo+(1bGfaBo)Bk(10)
(11) ( 1 + a B k b ) B o = B f − B k + B k b G f (1+\frac{aB_{k}}{b})B_{o}=B_{f}-B_{k}+\frac{B_k}{b}G_f \tag{11} (1+baBk)Bo=BfBk+bBkGf(11)
  令 B Δ = B f − B k B_{\Delta}=B_{f}-B_{k} BΔ=BfBk,
(12) { B o = B Δ − B k b G f 1 + a B k b = b B Δ + B k G f b + a B k \begin{cases} B_{o} &=&\frac{B_{\Delta}-\frac{B_{k}}{b}G_{f}}{1+\frac{aB_{k}}{b}}\quad \\\\ &=&\frac{bB_{\Delta}+B_{k}G_{f}}{b+aB_{k}}\quad \tag{12} \end{cases} Bo==1+baBkBΔbBkGfb+aBkbBΔ+BkGf(12)
  因为
(13) B f = B 0 + ( 1 − α 0 ) B k B_{f}=B_{0}+(1-\alpha_{0})B_{k} \tag{13} Bf=B0+(1α0)Bk(13)
  所以
(14) B f − b B Δ + B k G f b + a B k = ( 1 − α 0 ) B k B_{f}-\frac{bB_{\Delta}+B_{k}G_{f}}{b+aB_{k}}=(1-\alpha_{0})B_{k} \tag{14} Bfb+aBkbBΔ+BkGf=(1α0)Bk(14)
(15) { α 0 = B f − B k − b B Δ + B k G f b + a B k − B k = ( b + a B k ) B Δ − b B Δ − B k G f b + a B k − B k = a B k B Δ − B k G f b + a B k − B K = G f − a B Δ b + a B k \begin{cases} \alpha_{0} &=&\frac{B_{f}-B_{k}-\frac{bB_{\Delta+B_{k}G_{f}}}{b+aB_{k}}}{-B_{k}}\quad \\\\ &=&\frac{\frac{(b+aB_{k})B_{\Delta}-bB_{\Delta}-B_{k}G_{f}}{b+aB_{k}}}{-B_{k}} \\\\ &=&\frac{\frac{aB_{k}B_{\Delta}-B_{k}G_{f}}{b+aB_{k}}}{-B_{K}}\\\\ &=&\frac{G_{f}-aB_{\Delta}}{b+aB_{k}} \tag{15} \end{cases} α0====BkBfBkb+aBkbBΔ+BkGfBkb+aBk(b+aBk)BΔbBΔBkGfBKb+aBkaBkBΔBkGfb+aBkGfaBΔ(15)
(16) B o = B f − B k + α o B k = B Δ + α o B k B_{o}=B_{f}-B_{k}+\alpha_{o}B_{k}=B_{\Delta}+\alpha_{o}B_{k} \tag{16} Bo=BfBk+αoBk=BΔ+αoBk(16)
(17) C 0 = [ R f , G f , B Δ + α o B k , G f − a B Δ b + a B k ] C_{0}=[R_{f},G_{f},B_{\Delta}+\alpha_{o}B_{k},\frac{G_{f}-aB_{\Delta}}{b+aB_{k}}] \tag{17} C0=[Rf,Gf,BΔ+αoBk,b+aBkGfaBΔ](17)

2.3 Triangulation

  对于第三种特殊情况,要求对同一个前景目标,分别在不同颜色的背景上进行两次拍摄。分别使用 B k 1 B_{k_{1}} Bk1 B k 2 B_{k_{2}} Bk2表示两次拍摄的背景, B k 1 = c B k B_{k_{1}}=cB_{k} Bk1=cBk, B k 2 = d B k B_{k_{2}}=dB_{k} Bk2=dBk, 0 ≤ d &lt; c ≤ 1 0 \leq d &lt; c \leq 1 0d<c1.
(18) c f 1 = c 0 + ( 1 − α o ) c k 1 = [ R o , G o , B o + ( 1 − α o ) B k 1 ] = [ R f 1 , G f 1 , B f 1 ] c_{f_1}=c_0+(1-\alpha_o)c_{k_{1}}=[R_o,G_o,B_o+(1-\alpha_o)B_{k_1}]=[R_{f_1},G_{f_1},B_{f_1}] \tag{18} cf1=c0+(1αo)ck1=[Ro,Go,Bo+(1αo)Bk1]=[Rf1,Gf1,Bf1](18)
(19) c f 2 = c 0 + ( 1 − α o ) c k 2 = [ R o , G o , B o + ( 1 − α o ) B k 2 ] = [ R f 2 , G f 2 , B f 2 ] c_{f_2}=c_0+(1-\alpha_o)c_{k_{2}}=[R_o,G_o,B_o+(1-\alpha_o)B_{k_2}]=[R_{f_2},G_{f_2},B_{f_2}] \tag{19} cf2=c0+(1αo)ck2=[Ro,Go,Bo+(1αo)Bk2]=[Rf2,Gf2,Bf2](19)
(20) { B f 1 = B o + ( 1 − α o ) B k 1 B f 2 = B o + ( 1 − α o ) B k 2 \begin{cases} B_{f_1} &amp;=&amp;B_o+(1-\alpha_o)B_{k_1} \\\\ B_{f_2} &amp;=&amp;B_o+(1-\alpha_o)B_{k_2} \tag{20} \end{cases} Bf1Bf2==Bo+(1αo)Bk1Bo+(1αo)Bk2(20)
(21) B f 1 = ( B f 2 − ( 1 − α o ) B k 2 ) + ( 1 − α o ) B k 1 B_{f_1} =(B_{f_2}-(1-\alpha_o)B_{k_2})+(1-\alpha_o)B_{k_1} \tag{21} Bf1=(Bf2(1αo)Bk2)+(1αo)Bk1(21)
(22) α o = 1 − B f 1 − B f 2 B k 1 − B k 2 \alpha_o=1-\frac{B_{f_1}-B_{f_2}}{B_{k_1}-B_{k_2}} \tag{22} αo=1Bk1Bk2Bf1Bf2(22)
(23) B o = B k 1 B f 2 − B k 2 B f 1 B k 1 − B k 2 B_o=\frac{B_{k_1}B_{f_2}-B_{k_2}B_{f_1}}{B_{k_1}-B_{k_2}} \tag{23} Bo=Bk1Bk2Bk1Bf2Bk2Bf1(23)
(24) C o = [ R f 1 , G f 1 , B k 1 B f 2 − B k 2 B f 1 B k 1 − B k 2 , 1 − B f 1 − B f 2 B k 1 − B k 2 ] C_o=[R_{f_1},G_{f_1},\frac{B_{k_1}B_{f_2}-B_{k_2}B_{f_1}}{B_{k_1}-B_{k_2}},1-\frac{B_{f_1}-B_{f_2}}{B_{k_1}-B_{k_2}} ] \tag{24} Co=[Rf1,Gf1,Bk1Bk2Bk1Bf2Bk2Bf1,1Bk1Bk2Bf1Bf2](24)

3 通用解

  令 R Δ = R f − R k R_{\Delta}=R_f-R_k RΔ=RfRk, G Δ = G f − G k G_{\Delta}=G_f-G_k GΔ=GfGk, B Δ = B f − B k B_{\Delta}=B_f-B_k BΔ=BfBk,那么
H = C o [ 1 0 0 t 1 0 1 0 t 2 0 0 1 t 3 − R k − G k − B k t 4 ] = [ R o , G o , B o , α o ] [ 1 0 0 t 1 0 1 0 t 2 0 0 1 t 3 − R k − G k − B k t 4 ] H= C_{o}\begin{bmatrix} 1&amp;0&amp;0&amp;t_{1} \\\\ 0&amp;1&amp;0&amp;t_{2} \\\\ 0&amp;0&amp;1&amp;t_{3} \\\\ -R_k&amp;-G_k&amp;-B_k&amp;t_{4} \end{bmatrix}=[R_o,G_o,B_o,\alpha_o]\begin{bmatrix} 1&amp;0&amp;0&amp;t_{1} \\\\ 0&amp;1&amp;0&amp;t_{2} \\\\ 0&amp;0&amp;1&amp;t_{3} \\\\ -R_k&amp;-G_k&amp;-B_k&amp;t_{4} \end{bmatrix} H=Co100Rk010Gk001Bkt1t2t3t4=[Ro,Go,Bo,αo]100Rk010Gk001Bkt1t2t3t4
H = C o [ 1 0 0 t 1 0 1 0 t 2 0 0 1 t 3 − R k − G k − B k t 4 ] = [ R o − R k α o , G o − G k α o , B o − B k α o , T ] H= C_{o}\begin{bmatrix} 1&amp;0&amp;0&amp;t_{1} \\\\ 0&amp;1&amp;0&amp;t_{2} \\\\ 0&amp;0&amp;1&amp;t_{3} \\\\ -R_k&amp;-G_k&amp;-B_k&amp;t_{4} \end{bmatrix}=[R_o-R_k\alpha_o,G_o-G_k\alpha_o,B_o-B_k\alpha_o,T] H=Co100Rk010Gk001Bkt1t2t3t4=[RoRkαo,GoGkαo,BoBkαo,T]
  其中 T = R o t 1 + G o t 2 + B o t 3 + α o t 4 T=R_ot_1+G_ot_2+B_ot_3+\alpha_ot_4 T=Rot1+Got2+Bot3+αot4。由于
(25) R f = R o + ( 1 − α o ) R k G f = G o + ( 1 − α o ) G k B f = B o + ( 1 − α o ) B k \begin{aligned} R_f&amp;=&amp;R_o+(1-\alpha_o)R_k \\\\ G_f&amp;=&amp;G_o+(1-\alpha_o)G_k \\\\ B_f&amp;=&amp;B_o+(1-\alpha_o)B_k \tag{25} \end{aligned} RfGfBf===Ro+(1αo)RkGo+(1αo)GkBo+(1αo)Bk(25)
(26) R Δ = R f − R k = R o − α o R k G Δ = G f − G k = G o − α o G k B Δ = B f − B k = B o − α o B k \begin{aligned} R_{\Delta}&amp;=&amp;R_f - R_k=R_o-\alpha_oR_k \\\\ G_{\Delta}&amp;=&amp;G_f - G_k=G_o-\alpha_oG_k \\\\ B_{\Delta}&amp;=&amp;B_f - B_k=B_o-\alpha_oB_k \tag{26} \end{aligned} RΔGΔBΔ===RfRk=RoαoRkGfGk=GoαoGkBfBk=BoαoBk(26)
  所以
(27) H = [ R Δ , G Δ , B Δ , T ] H=[R_{\Delta},G_{\Delta},B_{\Delta},T] \tag{27} H=[RΔ,GΔ,BΔ,T](27)
  令
(28) t ‾ = [ t 1 , t 2 , t 3 , t 4 ] C k = [ R k , G k , B k , 1 ] \begin{aligned} \overline{t}&amp;=&amp;[t_1,t_2,t_3,t_4] \\\\ C_k&amp;=&amp;[R_k,G_k,B_k,1] \end{aligned} \tag{28} tCk==[t1,t2,t3,t4][Rk,Gk,Bk,1](28)
(29) ∴ α o t 4 = T − ( R Δ + α o R k ) t 1 − ( G Δ + α o G k ) t 2 − ( B Δ + α o B k ) t 3 α o ( R k t 1 + G k t 2 + B k t 3 + t 4 ) = T − ( R Δ t 1 + G Δ t 2 + B Δ t 3 ) \therefore \begin{aligned} \alpha_ot_4&amp;=&amp;T-(R_{\Delta}+\alpha_oR_k)t_1-(G_{\Delta}+\alpha_oG_k)t_2-(B_{\Delta}+\alpha_oB_k)t_3 \\\\ \alpha_o(R_kt_1+G_kt_2+B_kt_3+t_4)&amp;=&amp;T-(R_{\Delta}t_1+G_{\Delta}t_2+B_{\Delta}t_3) \end{aligned} \tag{29} αot4αo(Rkt1+Gkt2+Bkt3+t4)==T(RΔ+αoRk)t1(GΔ+αoGk)t2(BΔ+αoBk)t3T(RΔt1+GΔt2+BΔt3)(29)
(30) ∴ α o t ‾ C k = T − ( R Δ t 1 + G Δ t 2 + B Δ t 3 ) \therefore \begin{aligned} \alpha_o\overline{t}C_k&amp;=&amp;T-(R_{\Delta}t_1+G_{\Delta}t_2+B_{\Delta}t_3) \end{aligned} \tag{30} αotCk=T(RΔt1+GΔt2+BΔt3)(30)
(31) ∴ α o = T − ( R Δ t 1 + G Δ t 2 + B Δ t 3 ) t ‾ C k = T − t ‾ C Δ t ‾ C k = T − t ‾ ( C f − C k ) t ‾ C k = T − t ‾ C f + t ‾ C k t ‾ C k = 1 + T − t ‾ C f t ‾ C k = 1 − t ‾ C f − T t ‾ C k \therefore \begin{aligned} \alpha_o&amp;=&amp;\frac{T-(R_{\Delta}t_1+G_{\Delta}t_2+B_{\Delta}t_3)}{\overline{t}C_k}\\\\ &amp;=&amp;\frac{T-\overline{t}C_{\Delta}}{\overline{t}C_k} \\\\ &amp;=&amp;\frac{T-\overline{t}(C_f-C_k)}{\overline{t}C_k} \\\\ &amp;=&amp;\frac{T-\overline{t}C_{f}+\overline{t}C_{k}}{\overline{t}C_k} \\\\ &amp;=&amp;1+\frac{T-\overline{t}C_{f}}{\overline{t}C_k} \\\\ &amp;=&amp;1-\frac{\overline{t}C_{f}-T}{\overline{t}C_k} \\\\ \end{aligned} \tag{31} αo======tCkT(RΔt1+GΔt2+BΔt3)tCkTtCΔtCkTt(CfCk)tCkTtCf+tCk1+tCkTtCf1tCktCfT(31)

(32) C o = C Δ + α o C k = C f − C k + α o C k \begin{aligned} C_o&amp;=&amp;C_{\Delta}+\alpha_oC_k \\\\ &amp;=&amp;C_f-C_k+\alpha_oC_k \end{aligned} \tag{32} Co==CΔ+αoCkCfCk+αoCk(32)

参考文献

  • (1) Alvy Ray Smith, James F.Blinn, Blue Screen Matting
  • (2) Thomas Porter, Tom Duff, Compositing Digital Images
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值