fast guide filter原理详解
创始人
2024-03-13 21:57:31
0

符号标记

q:输出图像p:输入图像I:引导图ak,bk:线性变换模型r:滤波半径s:下采样因子q: 输出图像 \\[2ex] p: 输入图像 \\[2ex] I: 引导图 \\[2ex] a_k,b_k: 线性变换模型 \\[2ex] r: 滤波半径 \\[2ex] s: 下采样因子 \\[2ex] q:输出图像p:输入图像I:引导图ak​,bk​:线性变换模型r:滤波半径s:下采样因子

输入图单通道,引导图单通道

  1. 文章假设滤波结果是对guidance image线性变换的结果:
    qi=akIi+bk,∀i∈ωkq_i = a_k I_i + b_k, \forall i \in \omega_k qi​=ak​Ii​+bk​,∀i∈ωk​
    这就是最终的滤波公式,但是目前ak,bka_k, b_kak​,bk​是未知的,需要求解;另外目前为止ak,bka_k, b_kak​,bk​在ωk\omega_kωk​之内被假设为常量。
    相对于普通的滤波,如高斯滤波,这个公式最大的不同是多了bias项bkb_kbk​。

  2. 为了求解ak,bka_k, b_kak​,bk​,需要建立一个目标函数,目标函数的建立规则是:

    • 在ωk\omega_kωk​区域内,滤波结果qiq_iqi​与输入图像pip_ipi​要尽可能相近,两者之差的二范数要最小(最小二乘)。
    • 对尺度因子aka_kak​加了正则化进行惩罚,避免aka_kak​太飘,同样是二范数。

    于是就需要最小化以下目标函数:
    E(ak,bk)=∑i∈ωk((akIi+bk−pi)2+ϵak2)E(a_k,b_k) = \sum_{i \in \omega_k} {((a_k I_i + b_k - p_i)^2 + \epsilon a_k^2)} E(ak​,bk​)=i∈ωk​∑​((ak​Ii​+bk​−pi​)2+ϵak2​)
    注意上式中qiq_iqi​已经用akIi+bka_k I_i + b_kak​Ii​+bk​代替。

  3. 通过目标函数求解ak,bka_k, b_kak​,bk​
    使用目标函数E(ak,bk)E(a_k,b_k)E(ak​,bk​)分别对ak,bka_k,b_kak​,bk​求偏导并置零,来获得等式:
    ∂E∂ak=∑i(2(akIi+bk−pi)Ii+2ϵak)=0∂E∂bk=∑i2(akIi+bk−pi)=0\frac{\partial E}{\partial a_k} = \sum_{i} (2(a_k I_i + b_k - p_i) I_i + 2 \epsilon a_k) = 0 \\[4ex] \frac{\partial E}{\partial b_k} = \sum_{i} 2(a_k I_i + b_k - p_i) = 0 ∂ak​∂E​=i∑​(2(ak​Ii​+bk​−pi​)Ii​+2ϵak​)=0∂bk​∂E​=i∑​2(ak​Ii​+bk​−pi​)=0
    上式中为了看起来清爽一点,把求和符号中的i∈ωki \in \omega_ki∈ωk​简写为iii。
    注意求和符号只针对iii,所以但凡脚标不是iii的量都可以移动到求和符号之外,顺便把系数2给干掉,然后上述两式变为:
    ak∑iIiIi+bk∑iIi−∑ipiIi+∣ω∣ϵak=0ak∑iIi+∣ω∣bk−∑ipi=0a_k\sum_{i}{I_i I_i} + b_k\sum_{i}{I_i} - \sum_{i}{p_i I_i} + |\omega|\epsilon a_k = 0 \\[4ex] a_k\sum_{i}{I_i} + |\omega|b_k - \sum_{i}{p_i} = 0 ak​i∑​Ii​Ii​+bk​i∑​Ii​−i∑​pi​Ii​+∣ω∣ϵak​=0ak​i∑​Ii​+∣ω∣bk​−i∑​pi​=0
    首先可以通过第二个式子求得:
    bk=1∣ω∣∑ipi−ak1∣ω∣∑iIi(1)b_k = \frac{1}{|\omega|} \sum_{i}{p_i} - a_k \frac{1}{|\omega|}\sum_{i}{I_i} \tag{1} bk​=∣ω∣1​i∑​pi​−ak​∣ω∣1​i∑​Ii​(1)
    上式中∣ω∣|\omega|∣ω∣表示ωk\omega_kωk​区域中像素个数,所以1∣ω∣∑i\frac{1}{ |\omega|} \sum_{i}∣ω∣1​∑i​的意思其实就是求平均。
    把bkb_kbk​代入第一个式子,再经过一系列化简,可以得到aka_kak​的表达式:
    ak∑iIiIi+(1∣ω∣∑ipi−ak1∣ω∣∑iIi)∑iIi−∑ipiIi+∣ω∣ϵak=0ak(∑iIiIi−1∣ω∣∑iIi∑iIi+∣ω∣ϵ)+1∣ω∣∑ipi∑iIi−∑ipiIi=0为了显示得干净点,求和符号中的i也干掉了:ak=∑piIi−1∣ω∣∑pi∑Ii∑IiIi−1∣ω∣∑Ii∑Ii+∣ω∣ϵ上下同除以∣ω∣得:ak=1∣ω∣∑piIi−1∣ω∣∑pi1∣ω∣∑Ii1∣ω∣∑IiIi−1∣ω∣∑Ii1∣ω∣∑Ii+ϵ(2)a_k\sum_{i}{I_i I_i} + (\frac{1}{ |\omega|} \sum_{i}{p_i} - a_k \frac{1}{|\omega|}\sum_{i}{I_i})\sum_{i}{I_i} - \sum_{i}{p_i I_i} + |\omega|\epsilon a_k = 0 \\[4ex] a_k(\sum_{i}{I_i I_i} - \frac{1}{ |\omega|}{\sum_{i}{I_i}\sum_{i}{I_i} + |\omega| \epsilon}) + \frac{1}{ |\omega|}{\sum_{i}{p_i}\sum_{i}{I_i}} - \sum_{i}{p_i I_i} = 0 \\[4ex] 为了显示得干净点,求和符号中的i也干掉了: \\[4ex] a_k = \frac{\sum{p_i I_i} - \frac{1}{ |\omega|}{\sum{p_i}\sum{I_i}}} {\sum{I_i I_i} - \frac{1}{ |\omega|}{\sum{I_i}\sum{I_i} + |\omega| \epsilon}} \\[4ex] 上下同除以 |\omega| 得: \\[4ex] a_k = \frac{\frac{1}{|\omega|}\sum{p_i I_i} - \frac{1}{|\omega|}{\sum{p_i} \frac{1}{|\omega|}\sum{I_i}}} {\frac{1}{ |\omega|}\sum{I_i I_i} - \frac{1}{|\omega|}{\sum{I_i} \frac{1}{ |\omega|}\sum{I_i} + \epsilon}} \tag{2} ak​i∑​Ii​Ii​+(∣ω∣1​i∑​pi​−ak​∣ω∣1​i∑​Ii​)i∑​Ii​−i∑​pi​Ii​+∣ω∣ϵak​=0ak​(i∑​Ii​Ii​−∣ω∣1​i∑​Ii​i∑​Ii​+∣ω∣ϵ)+∣ω∣1​i∑​pi​i∑​Ii​−i∑​pi​Ii​=0为了显示得干净点,求和符号中的i也干掉了:ak​=∑Ii​Ii​−∣ω∣1​∑Ii​∑Ii​+∣ω∣ϵ∑pi​Ii​−∣ω∣1​∑pi​∑Ii​​上下同除以∣ω∣得:ak​=∣ω∣1​∑Ii​Ii​−∣ω∣1​∑Ii​∣ω∣1​∑Ii​+ϵ∣ω∣1​∑pi​Ii​−∣ω∣1​∑pi​∣ω∣1​∑Ii​​(2)
    这就是最符合原文章算法流程的公式写法,不用再按照原文章的公式写法简化了。
    最后需注意,虽然前面假设ak,bka_k,b_kak​,bk​在ωk\omega_kωk​区域内是常量,但实际上根据上述(1)(2)两公式计算出来后并不是常量,所以要考虑ωk\omega_kωk​区域中ak,bka_k,b_kak​,bk​变化带来的影响,一般采用平均的方式去处理,也就是:
    qi=1∣ω∣∑k∈ωiakIi+1∣ω∣∑k∈ωibk(3)q_i = \frac{1}{|\omega|}\sum_{k\in\omega_i}a_k I_i + \frac{1}{|\omega|}\sum_{k\in\omega_i}b_k \tag{3} qi​=∣ω∣1​k∈ωi​∑​ak​Ii​+∣ω∣1​k∈ωi​∑​bk​(3)
    上述(1, 2, 3)三个公式就是正常guidefilter的完整求解过程。

  4. 文章中ak,bka_k, b_kak​,bk​的公式解释
    记μk=1∣ω∣∑Ii\mu_k = \frac{1}{|\omega|}{\sum{I_i}}μk​=∣ω∣1​∑Ii​,pk=1∣ω∣∑pip_k = \frac{1}{|\omega|}{\sum{p_i}}pk​=∣ω∣1​∑pi​。
    那么ak,bka_k,b_kak​,bk​分别可写为:
    ak=1∣ω∣∑piIi−pkμk1∣ω∣∑Ii2−μk2+ϵbk=pk−akμka_k = \frac{\frac{1}{|\omega|}\sum{p_i I_i} - p_k\mu_k} {\frac{1}{|\omega|}\sum{I_i^2} - \mu_k^2 + \epsilon} \\[4ex] b_k = p_k - a_k\mu_k ak​=∣ω∣1​∑Ii2​−μk2​+ϵ∣ω∣1​∑pi​Ii​−pk​μk​​bk​=pk​−ak​μk​
    然后再来看个方差公式:
    σk2=1∣ω∣∑i(Ii−μk)2=1∣ω∣∑i(Ii2−2Iiμk+μk2)=1∣ω∣(∑iIi2−2μk∑iIi+∑iμk2)(请注意:∑Ii=∣ω∣μk,∑iμk2=∣ω∣μk2)=1∣ω∣(∑iIi2−2μk∣ω∣μk+∣ω∣μk2)=1∣ω∣(∑iIi2−∣ω∣μk2)=1∣ω∣∑iIi2−μk2\begin{aligned} \sigma_k^2 &= \frac {1}{|\omega|} \sum_{i}(I_i - \mu_k)^2 \\[4ex] &= \frac {1}{|\omega|} \sum_{i} (I_i^2 - 2I_i\mu_k + \mu_k^2) \\[4ex] &= \frac {1}{|\omega|} (\sum_{i}I_i^2 - 2\mu_k \sum_{i}I_i + \sum_{i}\mu_k^2) \\[4ex] & (请注意: \sum{I_i} = |\omega|\mu_k, \sum_{i}\mu_k^2 = |\omega|\mu_k^2)\\[4ex] &= \frac {1}{|\omega|} (\sum_{i}I_i^2 - 2\mu_k |\omega| \mu_k + |\omega|\mu_k^2) \\[4ex] &= \frac {1}{|\omega|} (\sum_{i}I_i^2 - |\omega|\mu_k^2) \\[4ex] &= \frac {1}{|\omega|} \sum_{i}I_i^2 - \mu_k^2 \\[4ex] \end{aligned} σk2​​=∣ω∣1​i∑​(Ii​−μk​)2=∣ω∣1​i∑​(Ii2​−2Ii​μk​+μk2​)=∣ω∣1​(i∑​Ii2​−2μk​i∑​Ii​+i∑​μk2​)(请注意:∑Ii​=∣ω∣μk​,i∑​μk2​=∣ω∣μk2​)=∣ω∣1​(i∑​Ii2​−2μk​∣ω∣μk​+∣ω∣μk2​)=∣ω∣1​(i∑​Ii2​−∣ω∣μk2​)=∣ω∣1​i∑​Ii2​−μk2​​
    同理可以把协方差公式也写在这里,下面推导多通道公式时候会用到
    σk2=1∣ω∣∑i(Ii0−μk0)(Ii1−μk1)=1∣ω∣∑i(Ii0Ii1−Ii0μk1−Ii1μk0+μk0μk1)=1∣ω∣(∑iIi0Ii1−μk1∑iIi0−μk0∑iIi1+∑iμk0μk1)=1∣ω∣(∑iIi0Ii1−∣ω∣μk1μk0−∣ω∣μk0μk1+∣ω∣μk0μk1)=1∣ω∣∑iIi0Ii1−μk1μk0\begin{aligned} \sigma_k^2 &= \frac {1}{|\omega|} \sum_{i}(I_{i0} - \mu_{k0}) (I_{i1} - \mu_{k1}) \\[4ex] &= \frac {1}{|\omega|} \sum_{i} (I_{i0} I_{i1} - I_{i0} \mu_{k1} - I_{i1} \mu_{k0} + \mu_{k0} \mu_{k1}) \\[4ex] &= \frac {1}{|\omega|} (\sum_{i} I_{i0} I_{i1} - \mu_{k1} \sum_{i} I_{i0} - \mu_{k0} \sum_{i} I_{i1} + \sum_{i} \mu_{k0} \mu_{k1}) \\[4ex] &= \frac {1}{|\omega|} (\sum_{i} I_{i0} I_{i1} - |\omega| \mu_{k1} \mu_{k0} - |\omega| \mu_{k0} \mu_{k1} + |\omega| \mu_{k0} \mu_{k1}) \\[4ex] &= \frac {1}{|\omega|} \sum_{i} I_{i0} I_{i1} - \mu_{k1} \mu_{k0} \end{aligned} σk2​​=∣ω∣1​i∑​(Ii0​−μk0​)(Ii1​−μk1​)=∣ω∣1​i∑​(Ii0​Ii1​−Ii0​μk1​−Ii1​μk0​+μk0​μk1​)=∣ω∣1​(i∑​Ii0​Ii1​−μk1​i∑​Ii0​−μk0​i∑​Ii1​+i∑​μk0​μk1​)=∣ω∣1​(i∑​Ii0​Ii1​−∣ω∣μk1​μk0​−∣ω∣μk0​μk1​+∣ω∣μk0​μk1​)=∣ω∣1​i∑​Ii0​Ii1​−μk1​μk0​​
    所以aka_kak​就可以进一步写为论文中的:
    ak=1∣ω∣∑piIi−pkμkσk2+ϵa_k = \frac{\frac{1}{|\omega|}\sum{p_i I_i} - p_k\mu_k} {\sigma_k^2 + \epsilon} ak​=σk2​+ϵ∣ω∣1​∑pi​Ii​−pk​μk​​

输入图多通道,引导图单通道

使用引导图对输入图的每个通道分别滤波即可。

输入图单通道,引导图多通道

引导图是多通道的情况下,多个通道需要综合对输入图的单通道产生影响,按照文章公式可以记录为:
qi=akTIi+bk,∀i∈ωkq_i = \pmb{a_k^T I_i}+ b_k, \forall i \in \omega_k qi​=akT​Ii​​akT​Ii​​​akT​Ii​+bk​,∀i∈ωk​
拆开写为:
qi=ak0Ii0+ak1Ii1+ak1Ii1+bk,∀i∈ωkq_i = a_{k0} I_{i0} + a_{k1} I_{i1} + a_{k1} I_{i1} + b_k, \forall i \in \omega_k qi​=ak0​Ii0​+ak1​Ii1​+ak1​Ii1​+bk​,∀i∈ωk​
那么目标函数就变成:
E(ak,bk)=∑i∈ωk((ak0Ii0+ak1Ii1+ak1Ii1+bk−pi)2+ϵ(ak02+ak12+ak22))E(a_k,b_k) = \sum_{i \in \omega_k} {((a_{k0} I_{i0} + a_{k1} I_{i1} + a_{k1} I_{i1} + b_k - p_i)^2 + \epsilon (a_{k0}^2 + a_{k1}^2 + a_{k2}^2))} E(ak​,bk​)=i∈ωk​∑​((ak0​Ii0​+ak1​Ii1​+ak1​Ii1​+bk​−pi​)2+ϵ(ak02​+ak12​+ak22​))
(下面推导为了看着清爽,会把求和符号中的iii省略掉,需要时刻记住,求和符号的对象是iii)
现在要求ak0,ak1,ak2,bka_{k0}, a_{k1}, a_{k2}, b_kak0​,ak1​,ak2​,bk​,使用E(ak,bk)E(a_k,b_k)E(ak​,bk​)分别对这几项求偏导并置零得:
∂E∂ak0=∑(2(ak0Ii0+ak1Ii1+ak2Ii2+bk−pi)Ii0+2ϵak0)=0∂E∂ak1=∑(2(ak0Ii0+ak1Ii1+ak2Ii2+bk−pi)Ii1+2ϵak1)=0∂E∂ak2=∑(2(ak0Ii0+ak1Ii1+ak2Ii2+bk−pi)Ii2+2ϵak2)=0∂E∂bk=∑2(ak0Ii0+ak1Ii1+ak1Ii1+bk−pi)=0\frac{\partial E}{\partial a_{k0}} = \sum (2(a_{k0} I_{i0} + a_{k1} I_{i1} + a_{k2} I_{i2} + b_k - p_i)I_{i0} + 2\epsilon a_{k0}) = 0 \\[4ex] \frac{\partial E}{\partial a_{k1}} = \sum (2(a_{k0} I_{i0} + a_{k1} I_{i1} + a_{k2} I_{i2} + b_k - p_i)I_{i1} + 2\epsilon a_{k1}) = 0 \\[4ex] \frac{\partial E}{\partial a_{k2}} = \sum (2(a_{k0} I_{i0} + a_{k1} I_{i1} + a_{k2} I_{i2} + b_k - p_i)I_{i2} + 2\epsilon a_{k2}) = 0 \\[4ex] \frac{\partial E}{\partial b_k} = \sum 2(a_{k0} I_{i0} + a_{k1} I_{i1} + a_{k1} I_{i1} + b_k - p_i) = 0 \\[4ex] ∂ak0​∂E​=∑(2(ak0​Ii0​+ak1​Ii1​+ak2​Ii2​+bk​−pi​)Ii0​+2ϵak0​)=0∂ak1​∂E​=∑(2(ak0​Ii0​+ak1​Ii1​+ak2​Ii2​+bk​−pi​)Ii1​+2ϵak1​)=0∂ak2​∂E​=∑(2(ak0​Ii0​+ak1​Ii1​+ak2​Ii2​+bk​−pi​)Ii2​+2ϵak2​)=0∂bk​∂E​=∑2(ak0​Ii0​+ak1​Ii1​+ak1​Ii1​+bk​−pi​)=0
类似全部单通道的推导过程,首先可以得到bkb_kbk​的表达式:
bk=1∣ω∣∑pi−ak01∣ω∣∑Ii0−ak11∣ω∣∑Ii1−ak21∣ω∣∑Ii2bk=pk−ak0μk0−ak1μk1−ak2μk2b_k = \frac {1}{|\omega|} \sum{p_i} - a_{k0} \frac {1}{|\omega|} \sum{I_{i0}} - a_{k1} \frac {1}{|\omega|} \sum{I_{i1}} - a_{k2} \frac {1}{|\omega|} \sum{I_{i2}} \\[4ex] b_k = p_k - a_{k0} \mu_{k0} - a_{k1} \mu_{k1} - a_{k2} \mu_{k2} bk​=∣ω∣1​∑pi​−ak0​∣ω∣1​∑Ii0​−ak1​∣ω∣1​∑Ii1​−ak2​∣ω∣1​∑Ii2​bk​=pk​−ak0​μk0​−ak1​μk1​−ak2​μk2​
其中pk=1∣ω∣∑pip_k = \frac {1}{|\omega|} \sum{p_i}pk​=∣ω∣1​∑pi​,μk0=1∣ω∣∑Ii0\mu_{k0} = \frac {1}{|\omega|} \sum{I_{i0}}μk0​=∣ω∣1​∑Ii0​,μk1=1∣ω∣∑Ii1\mu_{k1} = \frac {1}{|\omega|} \sum{I_{i1}}μk1​=∣ω∣1​∑Ii1​,μk2=1∣ω∣∑Ii2\mu_{k2} = \frac {1}{|\omega|} \sum{I_{i2}}μk2​=∣ω∣1​∑Ii2​
把bkb_kbk​的表达式带入到第一个偏导式子中,顺便做个整理:
∑(ak0Ii02+ak1Ii0Ii1+ak2Ii0Ii2+pkIi0−ak0μk0Ii0−ak1μk1Ii0−ak2μk2Ii0−piIi0+ϵak0)=0ak0∑Ii02+ak1∑Ii0Ii1+ak2∑Ii0Ii2+pk∑Ii0−ak0μk0∑Ii0−ak1μk1∑Ii0−ak2μk2∑Ii0−∑piIi0+∑ϵak0)=0ak0∑Ii02+ak1∑Ii0Ii1+ak2∑Ii0Ii2+∣ω∣pkμk0−∣ω∣ak0μk02−∣ω∣ak1μk1μk0−∣ω∣ak2μk2μk0−∑piIi0+∣ω∣ϵak0)=0ak01∣ω∣∑Ii02+ak11∣ω∣∑Ii0Ii1+ak21∣ω∣∑Ii0Ii2+pkμk0−ak0μk02−ak1μk1μk0−ak2μk2μk0−1∣ω∣∑piIi0+ϵak0)=0ak0(1∣ω∣∑Ii02−μk02+ϵ)+ak1(1∣ω∣∑Ii0Ii1−μk0μk1)+ak2(1∣ω∣∑Ii0Ii2−μk0μk2)+pkμk0−1∣ω∣∑piIi0=0ak0(1∣ω∣∑Ii02−μk02+ϵ)+ak1(1∣ω∣∑Ii0Ii1−μk0μk1)+ak2(1∣ω∣∑Ii0Ii2−μk0μk2)=1∣ω∣∑piIi0−pkμk0\sum (a_{k0} I_{i0}^2 + a_{k1} I_{i0} I_{i1} + a_{k2} I_{i0} I_{i2} + p_k I_{i0} - a_{k0} \mu_{k0} I_{i0} - a_{k1} \mu_{k1} I_{i0} - a_{k2} \mu_{k2} I_{i0} - p_i I_{i0} + \epsilon a_{k0}) = 0 \\[4ex] a_{k0} \sum I_{i0}^2 + a_{k1} \sum I_{i0} I_{i1} + a_{k2} \sum I_{i0} I_{i2} + p_k \sum I_{i0} - a_{k0} \mu_{k0} \sum I_{i0} - a_{k1} \mu_{k1} \sum I_{i0} - a_{k2} \mu_{k2} \sum I_{i0} - \sum p_i I_{i0} + \sum \epsilon a_{k0}) = 0 \\[4ex] a_{k0} \sum I_{i0}^2 + a_{k1} \sum I_{i0} I_{i1} + a_{k2} \sum I_{i0} I_{i2} + |\omega| p_k \mu_{k0} - |\omega|a_{k0} \mu_{k0}^2 - |\omega| a_{k1} \mu_{k1} \mu_{k0} - |\omega| a_{k2} \mu_{k2} \mu_{k0} - \sum p_i I_{i0} + |\omega| \epsilon a_{k0}) = 0 \\[4ex] a_{k0} \frac{1}{|\omega|} \sum I_{i0}^2 + a_{k1} \frac{1}{|\omega|} \sum I_{i0} I_{i1} + a_{k2} \frac{1}{|\omega|} \sum I_{i0} I_{i2} + p_k \mu_{k0} - a_{k0} \mu_{k0}^2 - a_{k1} \mu_{k1} \mu_{k0} - a_{k2} \mu_{k2} \mu_{k0} - \frac{1}{|\omega|} \sum p_i I_{i0} + \epsilon a_{k0}) = 0 \\[4ex] a_{k0} (\frac{1}{|\omega|} \sum I_{i0}^2 - \mu_{k0}^2 + \epsilon) + a_{k1} (\frac{1}{|\omega|} \sum I_{i0} I_{i1} - \mu_{k0} \mu_{k1}) + a_{k2} (\frac{1}{|\omega|} \sum I_{i0} I_{i2} - \mu_{k0} \mu_{k2}) + p_k \mu_{k0} - \frac{1}{|\omega|} \sum p_i I_{i0} = 0 \\[4ex] a_{k0} (\frac{1}{|\omega|} \sum I_{i0}^2 - \mu_{k0}^2 + \epsilon) + a_{k1} (\frac{1}{|\omega|} \sum I_{i0} I_{i1} - \mu_{k0} \mu_{k1}) + a_{k2} (\frac{1}{|\omega|} \sum I_{i0} I_{i2} - \mu_{k0} \mu_{k2}) = \frac{1}{|\omega|} \sum p_i I_{i0} - p_k \mu_{k0} ∑(ak0​Ii02​+ak1​Ii0​Ii1​+ak2​Ii0​Ii2​+pk​Ii0​−ak0​μk0​Ii0​−ak1​μk1​Ii0​−ak2​μk2​Ii0​−pi​Ii0​+ϵak0​)=0ak0​∑Ii02​+ak1​∑Ii0​Ii1​+ak2​∑Ii0​Ii2​+pk​∑Ii0​−ak0​μk0​∑Ii0​−ak1​μk1​∑Ii0​−ak2​μk2​∑Ii0​−∑pi​Ii0​+∑ϵak0​)=0ak0​∑Ii02​+ak1​∑Ii0​Ii1​+ak2​∑Ii0​Ii2​+∣ω∣pk​μk0​−∣ω∣ak0​μk02​−∣ω∣ak1​μk1​μk0​−∣ω∣ak2​μk2​μk0​−∑pi​Ii0​+∣ω∣ϵak0​)=0ak0​∣ω∣1​∑Ii02​+ak1​∣ω∣1​∑Ii0​Ii1​+ak2​∣ω∣1​∑Ii0​Ii2​+pk​μk0​−ak0​μk02​−ak1​μk1​μk0​−ak2​μk2​μk0​−∣ω∣1​∑pi​Ii0​+ϵak0​)=0ak0​(∣ω∣1​∑Ii02​−μk02​+ϵ)+ak1​(∣ω∣1​∑Ii0​Ii1​−μk0​μk1​)+ak2​(∣ω∣1​∑Ii0​Ii2​−μk0​μk2​)+pk​μk0​−∣ω∣1​∑pi​Ii0​=0ak0​(∣ω∣1​∑Ii02​−μk02​+ϵ)+ak1​(∣ω∣1​∑Ii0​Ii1​−μk0​μk1​)+ak2​(∣ω∣1​∑Ii0​Ii2​−μk0​μk2​)=∣ω∣1​∑pi​Ii0​−pk​μk0​
仿照上述流程,处理一下第二和第三个偏导式,再把第一个也罗列下来,可得:
ak0(1∣ω∣∑Ii02−μk02+ϵ)+ak1(1∣ω∣∑Ii0Ii1−μk0μk1)+ak2(1∣ω∣∑Ii0Ii2−μk0μk2)=1∣ω∣∑piIi0−pkμk0ak0(1∣ω∣∑Ii0Ii1−μk0μk1)+ak1(1∣ω∣∑Ii12−μk02+ϵ)+ak2(1∣ω∣∑Ii1Ii2−μk1μk2)=1∣ω∣∑piIi1−pkμk1ak0(1∣ω∣∑Ii0Ii2−μk0μk2)+ak1(1∣ω∣∑Ii1Ii2−μk1μk2)+ak2(1∣ω∣∑Ii22−μk22+ϵ)=1∣ω∣∑piIi2−pkμk2a_{k0} (\frac{1}{|\omega|} \sum I_{i0}^2 - \mu_{k0}^2 + \epsilon) + a_{k1} (\frac{1}{|\omega|} \sum I_{i0} I_{i1} - \mu_{k0} \mu_{k1}) + a_{k2} (\frac{1}{|\omega|} \sum I_{i0} I_{i2} - \mu_{k0} \mu_{k2}) = \frac{1}{|\omega|} \sum p_i I_{i0} - p_k \mu_{k0} \\[4ex] a_{k0} (\frac{1}{|\omega|} \sum I_{i0} I_{i1} - \mu_{k0} \mu_{k1}) + a_{k1} (\frac{1}{|\omega|} \sum I_{i1}^2 - \mu_{k0}^2 + \epsilon) + a_{k2} (\frac{1}{|\omega|} \sum I_{i1} I_{i2} - \mu_{k1} \mu_{k2}) = \frac{1}{|\omega|} \sum p_i I_{i1} - p_k \mu_{k1} \\[4ex] a_{k0} (\frac{1}{|\omega|} \sum I_{i0} I_{i2} - \mu_{k0} \mu_{k2}) + a_{k1} (\frac{1}{|\omega|} \sum I_{i1} I_{i2} - \mu_{k1} \mu_{k2}) + a_{k2} (\frac{1}{|\omega|} \sum I_{i2}^2 - \mu_{k2}^2 + \epsilon) = \frac{1}{|\omega|} \sum p_i I_{i2} - p_k \mu_{k2} ak0​(∣ω∣1​∑Ii02​−μk02​+ϵ)+ak1​(∣ω∣1​∑Ii0​Ii1​−μk0​μk1​)+ak2​(∣ω∣1​∑Ii0​Ii2​−μk0​μk2​)=∣ω∣1​∑pi​Ii0​−pk​μk0​ak0​(∣ω∣1​∑Ii0​Ii1​−μk0​μk1​)+ak1​(∣ω∣1​∑Ii12​−μk02​+ϵ)+ak2​(∣ω∣1​∑Ii1​Ii2​−μk1​μk2​)=∣ω∣1​∑pi​Ii1​−pk​μk1​ak0​(∣ω∣1​∑Ii0​Ii2​−μk0​μk2​)+ak1​(∣ω∣1​∑Ii1​Ii2​−μk1​μk2​)+ak2​(∣ω∣1​∑Ii22​−μk22​+ϵ)=∣ω∣1​∑pi​Ii2​−pk​μk2​
上面aka_kak​相关的系数都是方差或者协方差,记:
σkmn=σknm=1∣ω∣∑IimIin−μkmμkn\sigma_{k}^{mn} = \sigma_{k}^{nm} = \frac{1}{|\omega|} \sum I_{im} I_{in} - \mu_{km} \mu_{kn} σkmn​=σknm​=∣ω∣1​∑Iim​Iin​−μkm​μkn​
(上式的相关推导可以在上面翻翻看)
那么上面线性方程组可以进一步写为:
[σk00+ϵσk01σk02σk10σk11+ϵσk12σk20σk21σk22+ϵ][ak0ak1ak2]=[1∣ω∣∑piIi0−pkμk01∣ω∣∑piIi1−pkμk11∣ω∣∑piIi2−pkμk2]\begin{bmatrix} \sigma_{k}^{00} + \epsilon & \sigma_{k}^{01} & \sigma_{k}^{02} \\ \sigma_{k}^{10} & \sigma_{k}^{11} + \epsilon & \sigma_{k}^{12} \\ \sigma_{k}^{20} & \sigma_{k}^{21} & \sigma_{k}^{22} + \epsilon \\ \end{bmatrix} \begin{bmatrix} a_{k0} \\ a_{k1} \\ a_{k2} \\ \end{bmatrix} = \begin{bmatrix} \frac{1}{|\omega|} \sum p_i I_{i0} - p_k \mu_{k0} \\ \frac{1}{|\omega|} \sum p_i I_{i1} - p_k \mu_{k1} \\ \frac{1}{|\omega|} \sum p_i I_{i2} - p_k \mu_{k2} \\ \end{bmatrix} ⎣⎡​σk00​+ϵσk10​σk20​​σk01​σk11​+ϵσk21​​σk02​σk12​σk22​+ϵ​⎦⎤​⎣⎡​ak0​ak1​ak2​​⎦⎤​=⎣⎢⎡​∣ω∣1​∑pi​Ii0​−pk​μk0​∣ω∣1​∑pi​Ii1​−pk​μk1​∣ω∣1​∑pi​Ii2​−pk​μk2​​⎦⎥⎤​
求解方法:
[ak0ak1ak2]=[σk00+ϵσk01σk02σk10σk11+ϵσk12σk20σk21σk22+ϵ]−1[σIp0σIp1σIp2](4)\begin{bmatrix} a_{k0} \\ a_{k1} \\ a_{k2} \\ \end{bmatrix} = \begin{bmatrix} \sigma_{k}^{00} + \epsilon & \sigma_{k}^{01} & \sigma_{k}^{02} \\ \sigma_{k}^{10} & \sigma_{k}^{11} + \epsilon & \sigma_{k}^{12} \\ \sigma_{k}^{20} & \sigma_{k}^{21} & \sigma_{k}^{22} + \epsilon \\ \end{bmatrix} ^{-1} \begin{bmatrix} \sigma_{Ip0} \\ \sigma_{Ip1} \\ \sigma_{Ip2} \\ \end{bmatrix} \tag{4} ⎣⎡​ak0​ak1​ak2​​⎦⎤​=⎣⎡​σk00​+ϵσk10​σk20​​σk01​σk11​+ϵσk21​​σk02​σk12​σk22​+ϵ​⎦⎤​−1⎣⎡​σIp0​σIp1​σIp2​​⎦⎤​(4)
公式(4)中的σIp0,σIp1,σIp2\sigma_{Ip0},\sigma_{Ip1},\sigma_{Ip2}σIp0​,σIp1​,σIp2​请自行与前面公式对应起来看。
由于3x3矩阵的求逆公式比较容易手写,所以可以进一步简化,采用伴随矩阵的求逆方式。
A−1=adj(A)det(A)A^{-1} = \frac {adj(A)} {det(A)} A−1=det(A)adj(A)​
上式中adj(A)adj(A)adj(A)是A的伴随矩阵,det(A)det(A)det(A)是A的行列式。
3x3矩阵的行列式为:
det(a00a01a02a10a11a12a20a21a22)=∣a00a01a02a10a11a12a20a21a22∣=a00a11a22+a10a21a02+a20a01a12−a00a12a21−a01a10a22−a02a11a20det \left ( \begin{matrix} a_{00} & a_{01} & a_{02} \\ a_{10} & a_{11} & a_{12} \\ a_{20} & a_{21} & a_{22} \\ \end{matrix} \right ) = \left | \begin{matrix} a_{00} & a_{01} & a_{02} \\ a_{10} & a_{11} & a_{12} \\ a_{20} & a_{21} & a_{22} \\ \end{matrix} \right | = a_{00}a_{11}a_{22} + a_{10}a_{21}a_{02} + a_{20}a_{01}a_{12} - a_{00}a_{12}a_{21} - a_{01}a_{10}a_{22} - a_{02}a_{11}a_{20} det⎝⎛​a00​a10​a20​​a01​a11​a21​​a02​a12​a22​​⎠⎞​=∣∣∣∣∣∣​a00​a10​a20​​a01​a11​a21​​a02​a12​a22​​∣∣∣∣∣∣​=a00​a11​a22​+a10​a21​a02​+a20​a01​a12​−a00​a12​a21​−a01​a10​a22​−a02​a11​a20​
3x3矩阵的伴随矩阵为:
adj(a00a01a02a10a11a12a20a21a22)=[+∣a11a12a21a22∣−∣a01a02a21a22∣+∣a01a02a11a12∣−∣a10a12a20a22∣+∣a00a02a20a22∣−∣a00a02a10a12∣+∣a10a11a20a21∣−∣a00a01a20a21∣+∣a00a01a10a11∣]=[a11a22−a12a21a02a21−a01a22a01a12−a02a11a12a20−a10a22a00a22−a02a20a02a10−a00a12a10a21−a11a20a01a20−a00a21a00a11−a10a01]adj \left ( \begin{matrix} a_{00} & a_{01} & a_{02} \\ a_{10} & a_{11} & a_{12} \\ a_{20} & a_{21} & a_{22} \\ \end{matrix} \right ) = \begin{bmatrix} +\left | \begin{matrix} a_{11} & a_{12} \\ a_{21} & a_{22} \\ \end{matrix} \right | & -\left | \begin{matrix} a_{01} & a_{02} \\ a_{21} & a_{22} \\ \end{matrix} \right | & +\left | \begin{matrix} a_{01} & a_{02} \\ a_{11} & a_{12} \\ \end{matrix} \right | \\[4ex] -\left | \begin{matrix} a_{10} & a_{12} \\ a_{20} & a_{22} \\ \end{matrix} \right | & +\left | \begin{matrix} a_{00} & a_{02} \\ a_{20} & a_{22} \\ \end{matrix} \right | & -\left | \begin{matrix} a_{00} & a_{02} \\ a_{10} & a_{12} \\ \end{matrix} \right | \\[4ex] +\left | \begin{matrix} a_{10} & a_{11} \\ a_{20} & a_{21} \\ \end{matrix} \right | & -\left | \begin{matrix} a_{00} & a_{01} \\ a_{20} & a_{21} \\ \end{matrix} \right | & +\left | \begin{matrix} a_{00} & a_{01} \\ a_{10} & a_{11} \\ \end{matrix} \right | \\ \end{bmatrix} = \begin{bmatrix} a_{11}a_{22} - a_{12}a_{21} & a_{02}a_{21} - a_{01}a_{22} & a_{01}a_{12} - a_{02}a_{11} \\ a_{12}a_{20} - a_{10}a_{22} & a_{00}a_{22} - a_{02}a_{20} & a_{02}a_{10} - a_{00}a_{12} \\ a_{10}a_{21} - a_{11}a_{20} & a_{01}a_{20} - a_{00}a_{21} & a_{00}a_{11} - a_{10}a_{01} \end{bmatrix} adj⎝⎛​a00​a10​a20​​a01​a11​a21​​a02​a12​a22​​⎠⎞​=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​+∣∣∣∣​a11​a21​​a12​a22​​∣∣∣∣​−∣∣∣∣​a10​a20​​a12​a22​​∣∣∣∣​+∣∣∣∣​a10​a20​​a11​a21​​∣∣∣∣​​−∣∣∣∣​a01​a21​​a02​a22​​∣∣∣∣​+∣∣∣∣​a00​a20​​a02​a22​​∣∣∣∣​−∣∣∣∣​a00​a20​​a01​a21​​∣∣∣∣​​+∣∣∣∣​a01​a11​​a02​a12​​∣∣∣∣​−∣∣∣∣​a00​a10​​a02​a12​​∣∣∣∣​+∣∣∣∣​a00​a10​​a01​a11​​∣∣∣∣​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​=⎣⎡​a11​a22​−a12​a21​a12​a20​−a10​a22​a10​a21​−a11​a20​​a02​a21​−a01​a22​a00​a22​−a02​a20​a01​a20​−a00​a21​​a01​a12​−a02​a11​a02​a10​−a00​a12​a00​a11​−a10​a01​​⎦⎤​
现在把公式(4)中矩阵求逆的部分展开写一下,注意:

  • 上标数字改为用下标,原来的下标k省略不写。
  • 3x3矩阵是个对称矩阵,所以只用求6个值即可。
  • 为了看着清爽,暂时省略掉ϵ\epsilonϵ
    伴随矩阵的值:
    adj00=σ11σ22−σ12σ12adj11=σ00σ22−σ02σ02adj22=σ00σ11−σ01σ01adj01=σ02σ12−σ01σ22adj02=σ01σ12−σ02σ11adj12=σ02σ01−σ00σ12(5)\begin{aligned} adj_{00} = \sigma_{11} \sigma_{22} - \sigma_{12} \sigma_{12} \\[2ex] adj_{11} = \sigma_{00} \sigma_{22} - \sigma_{02} \sigma_{02} \\[2ex] adj_{22} = \sigma_{00} \sigma_{11} - \sigma_{01} \sigma_{01} \\[2ex] adj_{01} = \sigma_{02} \sigma_{12} - \sigma_{01} \sigma_{22} \\[2ex] adj_{02} = \sigma_{01} \sigma_{12} - \sigma_{02} \sigma_{11} \\[2ex] adj_{12} = \sigma_{02} \sigma_{01} - \sigma_{00} \sigma_{12} \end{aligned} \tag{5} adj00​=σ11​σ22​−σ12​σ12​adj11​=σ00​σ22​−σ02​σ02​adj22​=σ00​σ11​−σ01​σ01​adj01​=σ02​σ12​−σ01​σ22​adj02​=σ01​σ12​−σ02​σ11​adj12​=σ02​σ01​−σ00​σ12​​(5)
    行列式的值为:
    det=σ00σ11σ22+σ01σ12σ02+σ02σ01σ12−σ00σ12σ12−σ01σ01σ22−σ02σ02σ11=σ00(σ11σ22−σ12σ12)+σ01(σ12σ02−σ01σ22)+σ02(σ01σ12−σ02σ11)=σ00∗adj00+σ01∗adj01+σ02∗adj02(6)\begin{aligned} det &= \sigma_{00}\sigma_{11}\sigma_{22} + \sigma_{01}\sigma_{12}\sigma_{02} + \sigma_{02}\sigma_{01}\sigma_{12} - \sigma_{00}\sigma_{12}\sigma_{12} - \sigma_{01}\sigma_{01}\sigma_{22} - \sigma_{02}\sigma_{02}\sigma_{11} \\[2ex] &= \sigma_{00}(\sigma_{11}\sigma_{22} - \sigma_{12}\sigma_{12}) + \sigma_{01}(\sigma_{12}\sigma_{02} - \sigma_{01}\sigma_{22}) + \sigma_{02}(\sigma_{01}\sigma_{12} - \sigma_{02}\sigma_{11}) \\[2ex] &=\sigma_{00}*adj_{00} + \sigma_{01}*adj_{01} + \sigma_{02}*adj_{02} \end{aligned} \tag{6} det​=σ00​σ11​σ22​+σ01​σ12​σ02​+σ02​σ01​σ12​−σ00​σ12​σ12​−σ01​σ01​σ22​−σ02​σ02​σ11​=σ00​(σ11​σ22​−σ12​σ12​)+σ01​(σ12​σ02​−σ01​σ22​)+σ02​(σ01​σ12​−σ02​σ11​)=σ00​∗adj00​+σ01​∗adj01​+σ02​∗adj02​​(6)
    逆矩阵的值:
    inv00=adj00/detinv11=adj11/detinv22=adj22/detinv01=adj01/detinv02=adj02/detinv12=adj12/det(7)\begin{aligned} inv_{00} = adj_{00} / det \\ inv_{11} = adj_{11} / det \\ inv_{22} = adj_{22} / det \\ inv_{01} = adj_{01} / det \\ inv_{02} = adj_{02} / det \\ inv_{12} = adj_{12} / det \end{aligned} \tag{7} inv00​=adj00​/detinv11​=adj11​/detinv22​=adj22​/detinv01​=adj01​/detinv02​=adj02​/detinv12​=adj12​/det​(7)
    注意在写程序的时候adjxxadj_{xx}adjxx​这个变量就不用再创建了,直接使用invxxinv_{xx}invxx​即可。
    然后需要再把ak0,ak1,ak2,bka_{k0},a_{k1},a_{k2},b_kak0​,ak1​,ak2​,bk​的计算公式根据已经计算出来的值再写一下。
    ak0=inv00∗σIp0+inv01∗σIp1+inv02∗σIp2ak1=inv01∗σIp0+inv11∗σIp1+inv12∗σIp2ak2=inv02∗σIp0+inv12∗σIp1+inv22∗σIp2bk=pk−ak0μk0−ak1μk1−ak2μk2(8)\begin{aligned} a_{k0} &= inv_{00}*\sigma_{Ip0} + inv_{01}*\sigma_{Ip1} + inv_{02}*\sigma_{Ip2} \\[2ex] a_{k1} &= inv_{01}*\sigma_{Ip0} + inv_{11}*\sigma_{Ip1} + inv_{12}*\sigma_{Ip2} \\[2ex] a_{k2} &= inv_{02}*\sigma_{Ip0} + inv_{12}*\sigma_{Ip1} + inv_{22}*\sigma_{Ip2} \\[2ex] b_k &= p_k - a_{k0} \mu_{k0} - a_{k1} \mu_{k1} - a_{k2} \mu_{k2} \end{aligned} \tag{8} ak0​ak1​ak2​bk​​=inv00​∗σIp0​+inv01​∗σIp1​+inv02​∗σIp2​=inv01​∗σIp0​+inv11​∗σIp1​+inv12​∗σIp2​=inv02​∗σIp0​+inv12​∗σIp1​+inv22​∗σIp2​=pk​−ak0​μk0​−ak1​μk1​−ak2​μk2​​(8)
    最后需要对ak0,ak1,ak2,bka_{k0},a_{k1},a_{k2},b_kak0​,ak1​,ak2​,bk​再做个平均,真正的滤波结果为:
    qi=1∣ω∣∑k∈ωiak0Ii0+1∣ω∣∑k∈ωiak1Ii1+1∣ω∣∑k∈ωiak1Ii1+1∣ω∣∑k∈ωibk(9)q_i =\frac{1}{|\omega|} \sum_{k\in\omega_i}a_{k0} I_{i0} + \frac{1}{|\omega|} \sum_{k\in\omega_i}a_{k1} I_{i1} + \frac{1}{|\omega|} \sum_{k\in\omega_i}a_{k1} I_{i1} + \frac{1}{|\omega|} \sum_{k\in\omega_i}b_k \tag{9} qi​=∣ω∣1​k∈ωi​∑​ak0​Ii0​+∣ω∣1​k∈ωi​∑​ak1​Ii1​+∣ω∣1​k∈ωi​∑​ak1​Ii1​+∣ω∣1​k∈ωi​∑​bk​(9)
    公式(5)-(9)就是完整的计算流程。中间有一些替换性的式子,需要在字里行间自行寻找。

输入图多通道,引导图多通道

仍然是使用引导图对输入图的每个通道分别滤波即可。

相关内容

热门资讯

汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...