最近看到好几篇论文如Colorization,poisson image editing等都使用线性系统求解泊松方程。今天找一篇文章简单推导一下:
参考论文:AppWand: Editing Measured Materials using Appearance-Driven Optimization, SIGGRAPH 07
论文是编辑传播领域的经典论文,用于将局部的编辑,传播到图像的所有区域,实现全局合理的颜色编辑。论文的核心能量函数为:
E = ∑ i ( e i − g i ) 2 w i + ∑ i ∑ j ∈ N i ( e i − e j ) 2 z i j ( 1 ) E =\sum_i{(e_i-g_i})^2w_i +\sum_i\sum_{j\in N_i }(e_i-e_j)^2z_{ij } (1) E=i∑(ei−gi)2wi+i∑j∈Ni∑(ei−ej)2zij(1)
其中, e i e_i ei为待求的编辑参数, g i g_i gi为已知的编辑部分,如果第 i i i 个像素被着色了, 那么 w i = 1 w_i = 1 wi=1, 否则 w i = 0 w_i = 0 wi=0。 z i j z_{ij} zij 为已知量的表示像素 i i i 和像素 j j j 的相似度。
我们对(1)中 e i e_i ei 求导有:
∂ E / ∂ e i = ∑ i 2 ( e i − g i ) w i + ∑ i ∑ j ∈ N i 2 ( e i − e j ) z i j + ∑ i ∑ j ∈ N i 2 ( e j − e i ) z j i \partial E /\partial e_i= \sum_i{2(e_i-g_i})w_i +\sum_i\sum_{j\in N_i }2(e_i-e_j)z_{ij} + \sum_i\sum_{j\in N_i }2(e_j-e_i)z_{ji} ∂E/∂ei=∑i2(ei−gi)wi+∑i∑j∈Ni2(ei−ej)zij+∑i∑j∈Ni2(ej−ei)zji
注意最后一项,因为
e
i
e_i
ei 和
e
j
e_j
ej 相邻,所以,
e
i
e_i
ei 同样会出现在所有邻居的邻居中。
令上式为0:
∂ E / ∂ e i = ∑ i 2 ( e i − g i ) w i + ∑ i ∑ j ∈ N i 2 ( e i − e j ) z i j + ∑ i ∑ j ∈ N i 2 ( e j − e i ) z j i = 0 \partial E /\partial e_i= \sum_i{2(e_i-g_i})w_i +\sum_i\sum_{j\in N_i }2(e_i-e_j)z_{ij} + \sum_i\sum_{j\in N_i }2(e_j-e_i)z_{ji} = 0 ∂E/∂ei=∑i2(ei−gi)wi+∑i∑j∈Ni2(ei−ej)zij+∑i∑j∈Ni2(ej−ei)zji=0
∑ i ( e i − g i ) w i + ∑ i ∑ j ∈ N i 2 ( e i − e j ) z i j = 0 \sum_i{(e_i-g_i})w_i +\sum_i\sum_{j\in N_i }2(e_i-e_j)z_{ij} = 0 ∑i(ei−gi)wi+∑i∑j∈Ni2(ei−ej)zij=0
∑ i e i w i + ∑ i ∑ j ∈ N i 2 ( e i − e j ) z i j = ∑ i g i w i \sum_i{e_iw_i} +\sum_i\sum_{j\in N_i }2(e_i-e_j)z_{ij} =\sum_i{g_iw_i} ∑ieiwi+∑i∑j∈Ni2(ei−ej)zij=∑igiwi
实际上已经构建了一个 A e = b Ae = b Ae=b的线性系统:
A i j = { w i + 2 ∑ j ∈ N i z i j , i = j − 2 z i j , j ∈ N i 0 , o t h e r w i s e . A_{ij} = \begin{cases} w_i +2 \sum_{j\in N_i}z_{ij} ,& i = j\\ -2z_{ij} ,& j \in N_i\\ 0, & otherwise\end{cases}. Aij=⎩⎪⎨⎪⎧wi+2∑j∈Nizij,−2zij,0,i=jj∈Niotherwise.
上述案例其实完全可以手动推导,只需要给定如下的水平放置的3个像素即可推导。
总的能量公式为:
E = ( e 1 − g 1 ) 2 w 1 + ( e 3 − g 3 ) 2 w 3 + ( e 1 − e 2 ) 2 z 12 + ( e 1 − e 3 ) 2 z 13 + ( e 2 − e 1 ) 2 z 21 + ( e 2 − e 3 ) 2 z 23 + ( e 3 − e 1 ) 2 z 31 + ( e 3 − e 2 ) 2 z 32 E = (e_1-g_1)^2w_1 + (e_3-g_3)^2w_3 + (e_1-e_2)^2z_{12} +(e_1-e_3)^2z_{13}+(e_2-e_1)^2z_{21} + (e_2-e_3)^2z_{23}+(e_3-e_1)^2z_{31} + (e_3-e_2)^2z_{32} E=(e1−g1)2w1+(e3−g3)2w3+(e1−e2)2z12+(e1−e3)2z13+(e2−e1)2z21+(e2−e3)2z23+(e3−e1)2z31+(e3−e2)2z32
∂ E / ∂ e 1 = 2 ( e 1 − g 1 ) w 1 + 4 ( e 1 − e 2 ) z 12 + 4 ( e 1 − e 3 ) z 13 \partial E /\partial e_1 =2(e_1-g_1)w_1+4(e_1-e_2)z_{12}+4(e_1-e_3)z_{13} ∂E/∂e1=2(e1−g1)w1+4(e1−e2)z12+4(e1−e3)z13
∂ E / ∂ e 2 = 4 ( e 2 − e 1 ) z 21 + 4 ( e 2 − e 3 ) z 23 \partial E /\partial e_2 =4(e_2-e_1)z_{21}+4(e_2-e_3)z_{23} ∂E/∂e2=4(e2−e1)z21+4(e2−e3)z23
∂ E / ∂ e 3 = 2 ( e 3 − g 3 ) w 3 + 4 ( e 3 − e 1 ) z 31 + 4 ( e 3 − e 2 ) z 32 \partial E /\partial e_3 =2(e_3-g_3)w_3+4(e_3-e_1)z_{31}+4(e_3-e_2)z_{32} ∂E/∂e3=2(e3−g3)w3+4(e3−e1)z31+4(e3−e2)z32
令几个偏导数 = 0:
e 1 ( w 1 + 2 z 12 + 2 z 13 ) − 2 e 2 z 12 − 2 e 3 z 13 = g 1 w 1 e_1(w_1+2z_{12}+2z_{13}) -2e_2z_{12}-2e_3z_{13} = g_1w_1 e1(w1+2z12+2z13)−2e2z12−2e3z13=g1w1
e 2 ( z 12 + z 23 ) − e 1 z 12 − e 3 z 23 = 0 e_2(z_{12}+z_{23}) -e_1z_{12}-e_3z_{23} = 0 e2(z12+z23)−e1z12−e3z23=0
e 3 ( w 3 + 2 z 31 + 2 z 32 ) − 2 e 1 z 31 − 2 e 2 z 32 = g 3 w 3 e_3(w_3+2z_{31}+2z_{32}) -2e_1z_{31}-2e_2z_{32} = g_3w_3 e3(w3+2z31+2z32)−2e1z31−2e2z32=g3w3
因此,跟上面的公式保持一致。
如果直接从矩阵形式推导应该也可以,可能会用到如下几个简单矩阵求导公式:
参考一本矩阵书:https://www.math.uwaterloo.ca/~hwolkowi/matrixcookbook.pdf