文章: Automated colour grading using colour distribution transfer, [paper], [matlab代码], [python代码]
本文算法分为2个大步骤, 首先使用IDT(Iterative Distribution Transfer)方法得到初步的结果, 这个结果里面可能会将噪声放大了, 因而第二大步是进行后处理, 减少伪影, 保留原图的梯度.
具体地:

上述公式中, 第一部分用来保留梯度, 如果仅有这部分, 最后的结果就是原图, 第二部分用来保证与目标图像颜色接近.
第一部分这里不再说明, 详见 [论文阅读] 颜色迁移-N维pdf迁移.
对于第二部分, 文中进行了简单化调整, 过程如下, 这里直接复制文中的说明, 数学不好就不做解释了

公式局部可能写错了, 根据作者提供的代码实现进行调整并简化, 保持公式与代码实现保持一致, 方便理解, 如下所示:
I0=I(x,y)I1=I(x,y−1)I2=I(x,y+1)I3=I(x−1,y)I4=I(x+1,y)J0=J(x,y)J1=J(x,y−1)J2=J(x,y+1)J3=J(x−1,y)J4=J(x+1,y)\begin{aligned} &I_0 = I(x,y)\\ &I_1 = I(x,y-1)\\ &I_2 = I(x,y+1)\\ &I_3 = I(x-1,y)\\ &I_4 = I(x+1,y)\\ &J_0 = J(x,y)\\ &J_1 = J(x,y-1)\\ &J_2 = J(x,y+1)\\ &J_3 = J(x-1,y)\\ &J_4 = J(x+1,y)\\ \end{aligned} I0=I(x,y)I1=I(x,y−1)I2=I(x,y+1)I3=I(x−1,y)I4=I(x+1,y)J0=J(x,y)J1=J(x,y−1)J2=J(x,y+1)J3=J(x−1,y)J4=J(x+1,y)
公式中a6可能存在问题, 这个根据代码实现简化后的公式:
a1(x,y)=−ψ(x,y−1)+ψ(x,y)2a2(x,y)=−ψ(x,y+1)+ψ(x,y)2a3(x,y)=−ψ(x−1,y)+ψ(x,y)2a4(x,y)=−ψ(x+1,y)+ψ(x,y)2a5(x,y)=ϕ(x,y)−a1(x,y)−a2(x,y)−a3(x,y)−a4(x,y)a6(x,y)=ϕ(x,y)I0+a1(x,y)(I1−I0)+a2(x,y)(I2−I0)+a3(x,y)(I3−I0)+a4(x,y)(I4−I0)\begin{aligned} a_1(x, y)=&-\frac{\psi(x, y-1)+\psi(x, y)}{2} \\ a_2(x, y)=&-\frac{\psi(x, y+1)+\psi(x, y)}{2} \\ a_3(x, y)=&-\frac{\psi(x-1, y)+\psi(x, y)}{2} \\ a_4(x, y)=&-\frac{\psi(x+1, y)+\psi(x, y)}{2} \\ a_5(x, y)=&\phi(x, y) - a_1(x, y) - a_2(x, y) - a_3(x, y) - a_4(x, y) \\ \\ a_6(x, y)=& \phi(x, y) I_0 \\ & +a_1(x, y)(I_1 - I_0) \\ & +a_2(x, y)(I_2 - I_0) \\ & +a_3(x, y)(I_3 - I_0) \\ & +a_4(x, y)(I_4 - I_0) \\ \end{aligned} a1(x,y)=a2(x,y)=a3(x,y)=a4(x,y)=a5(x,y)=a6(x,y)=−2ψ(x,y−1)+ψ(x,y)−2ψ(x,y+1)+ψ(x,y)−2ψ(x−1,y)+ψ(x,y)−2ψ(x+1,y)+ψ(x,y)ϕ(x,y)−a1(x,y)−a2(x,y)−a3(x,y)−a4(x,y)ϕ(x,y)I0+a1(x,y)(I1−I0)+a2(x,y)(I2−I0)+a3(x,y)(I3−I0)+a4(x,y)(I4−I0)
公式19简化为:
a1(x,y)J1+a2(x,y)J2+a3(x,y)J3+a4(x,y)J4+a5(x,y)J0=a6(x,y)(19)\begin{aligned} &a_1(x, y) J_1+a_2(x, y) J_2+a_3(x, y) J_3+a_4(x, y) J_4+a_5(x, y) J_0 =a_6(x, y) \end{aligned} \tag{19} a1(x,y)J1+a2(x,y)J2+a3(x,y)J3+a4(x,y)J4+a5(x,y)J0=a6(x,y)(19)
将J0单独放到方程的一边, 可以得到:
a5(x,y)J0=ϕ(x,y)I0a1(x,y)(I1−I0)−a1(x,y)J1a2(x,y)(I2−I0)−a2(x,y)J2a3(x,y)(I3−I0)−a3(x,y)J3a4(x,y)(I4−I0)−a4(x,y)J4=ϕ(x,y)I0−A1−A2−A3−A4\begin{aligned} a_5(x, y) J_0=&\phi(x, y) I_0 \\ & a_1(x, y)(I_1 - I_0) - a_1(x, y) J_1\\ & a_2(x, y)(I_2 - I_0) - a_2(x, y) J_2 \\ & a_3(x, y)(I_3 - I_0) - a_3(x, y) J_3\\ & a_4(x, y)(I_4 - I_0) - a_4(x, y) J_4\\ & = \phi(x, y) I_0 - A_1- A_2 - A_3 - A_4 \end{aligned} a5(x,y)J0=ϕ(x,y)I0a1(x,y)(I1−I0)−a1(x,y)J1a2(x,y)(I2−I0)−a2(x,y)J2a3(x,y)(I3−I0)−a3(x,y)J3a4(x,y)(I4−I0)−a4(x,y)J4=ϕ(x,y)I0−A1−A2−A3−A4
A1=a1(x,y)(J1−I1+I0)A2=a2(x,y)(J2−I2+I0)A3=a3(x,y)(J3−I3+I0)A4=a4(x,y)(J4−I4+I0)A_1 = a_1(x, y)(J_1 - I_1 + I_0) \\ A_2 = a_2(x, y)(J_2 - I_2 + I_0) \\ A_3 = a_3(x, y)(J_3 - I_3 + I_0) \\ A_4 = a_4(x, y)(J_4 - I_4 + I_0) A1=a1(x,y)(J1−I1+I0)A2=a2(x,y)(J2−I2+I0)A3=a3(x,y)(J3−I3+I0)A4=a4(x,y)(J4−I4+I0)
在公式2边除以a5, 可以得到公式20, 即为最后的图像
J0=ϕ(x,y)I0−A1−A2−A3−A4a5(x,y)(20)J_0=\frac{\phi(x, y) I_0 - A_1- A_2 - A_3 - A_4}{a_5(x, y)} \tag{20} J0=a5(x,y)ϕ(x,y)I0−A1−A2−A3−A4(20)
最后, 代码实现时, 对结果进行了加权, 即:
J0k+1=ϕ(x,y)I0k−A1k−A2k−A3k−A4ka5(x,y)∗(1−ρ)+J0k∗ρ(20)J_0^{k+1}= \frac{\phi(x, y) I_0^{k} - A_1^{k}- A_2^{k} - A_3^{k} - A_4^{k}}{a_5(x, y)} * (1 - \rho) + J_0^{k} * \rho \tag{20} J0k+1=a5(x,y)ϕ(x,y)I0k−A1k−A2k−A3k−A4k∗(1−ρ)+J0k∗ρ(20)
文中给出的算法结果如下:

