导向滤波(Guided Filter)公式详解

Guided Filter

引导滤波

Guided Image Filtering – 何恺明 2009

  引导滤波(Guided Filtering)和双边滤波(BF)、最小二乘滤波(WLS)是三大边缘保持(Edge-perserving)滤波器。当然,引导滤波的功能不仅仅是边缘保持,只有当引导图是原图的时候,它就成了一个边缘保持滤波器。
  它在图像去雾,图像抠图上均有相应的应用。

原理

《导向滤波(Guided Filter)公式详解》

  对于一个输入的图像 p p p,通过引导图像 I I I,经过滤波后得到输出图像 q q q,其中 p p p I I I都是算法的输入。引导滤波定义了如下所示的一个线性滤波过程,对于 i i i位置的像素点,得到的滤波输出是一个加权平均值:
q i = ∑ j W i j ( I ) p j , (1) q_i=\sum_j W_{ij}(I)pj, \tag1 qi=jWij(I)pj,(1)
其中, i i i j j j分别表示像素下标。 W i j W_{ij} Wij是只和引导图像 I I I相关的滤波核。该滤波器相对于 p p p是线性的。
  导向滤波的一个重要假设是输出图像 q q q和引导图像 I I I在滤波窗口 w k w_k wk上存在局部线性关系:
q i = a k I i + b k , ∀ i ∈ w k , (2) q_i=a_kI_i+b_k,\forall i\in w_k,\tag2 qi=akIi+bk,iwk,(2)
对于一个以 r r r为半径的确定的窗口 w k w_k wk,( a k a_k ak b k b_k bk)也将是唯一确定的常量系数。这就保证了在一个局部区域里,如果引导图像 I I I有一个边缘的时候,输出图像 q q q也保持边缘不变,因为对于相邻的像素点而言,存在 ∇ q = a ∇ I \nabla q=a\nabla I q=aI。因此只要求解得到了系数 a a a b b b也就得到了输出 q q q。同时认为输入图像中非边缘区域又不平滑的地方视为噪声 n n n,就有 q i = p i − n i q_i=p_i-n_i qi=pini。最终的目标就是最小化这个噪声。对于每一个滤波窗口,该算法在最小二乘意义上的最优化可表示为 a r g m i n ∑ i ∈ w k ( q i − p i ) 2 a r g m i n ∑ i ∈ w k ( a k I i + b k − p i ) 2 (3) argmin \sum_{i\in w_k}(q_i-p_i)^2 \\ argmin \sum_{i\in w_k}(a_kI_i+b_k-p_i)^2 \tag3 argminiwk(qipi)2argminiwk(akIi+bkpi)2(3)
最后,引入一个正则化参数 ϵ \epsilon ϵ避免 a k a_k ak过大,得到滤波窗口内的损失函数:
E ( a k , b k ) = ∑ i ∈ w k ( ( a k I i + b k − p i ) 2 + ϵ a k 2 ) . (4) E(a_k,b_k)=\sum_{i\in w_k}((a_kI_i+b_k-p_i)^2+\epsilon a_k^2).\tag4 E(ak,bk)=iwk((akIi+bkpi)2+ϵak2).(4)
求解最优化过程(对参数求偏导):
δ E a k = ∑ i ∈ w k ( 2 ( a k I i + b k − p i ) ( I i ) + 2 ϵ a k ) = 0 (5) \frac {\delta E}{a_k}=\sum_{i\in w_k}(2(a_kI_i+b_k-p_i)(I_i)+2\epsilon a_k)=0 \tag5 akδE=iwk(2(akIi+bkpi)(Ii)+2ϵak)=0(5)
δ E b k = ∑ i ∈ w k ( 2 ( a k I i + b k − p i ) ) = 0 (6) \frac {\delta E}{b_k}=\sum_{i\in w_k}(2(a_kI_i+b_k-p_i))=0\tag6 bkδE=iwk(2(akIi+bkpi))=0(6)
-----------------2020-10-27更新-----------------
因为求导这部分我之前也写的有问题,评论里也有问到,这里再把过程写详细点,方便大家对照自己的推导过程。
先求解 b k b_k bk
b k = 1 ∣ w ∣ ( ∑ i ∈ w k p i − a k ∑ i ∈ w k I i ) (7) b_k=\frac{1}{|w|}(\sum_{i\in w_k}p_i-a_k\sum_{i\in w_k}I_i)\tag7 bk=w1(iwkpiakiwkIi)(7)
为了方便运算和简化公示,这里记 p k ‾ = 1 ∣ w ∣ ∑ i ∈ w k p i \overline{p_k}=\frac{1}{|w|}\sum_{i\in w_k}p_i pk=w1iwkpi I k ‾ = 1 ∣ w ∣ ∑ i ∈ w k I i \overline{I_k}=\frac{1}{|w|}\sum_{i\in w_k}I_i Ik=w1iwkIi,得
b k = p k ‾ − a k I k ‾ (8) b_k = \overline{p_k}-a_k\overline{I_k}\tag8 bk=pkakIk(8)
然后求解 a k a_k ak
整理前面的求导公式可得:

δ E a k = ∑ i ∈ w k ( a k I i 2 + b k I i − p i I i + ϵ a k ) = 0 (9) \frac {\delta E}{a_k}=\sum_{i\in w_k}(a_kI_i^2+b_kI_i-p_iI_i+\epsilon a_k)=0 \tag9 akδE=iwk(akIi2+bkIipiIi+ϵak)=0(9)
代入简化后的 b k b_k bk
∑ i ∈ w k ( a k I i 2 + ( p k ‾ − a k I k ‾ ) I i − p i I i + ϵ a k ) = 0 (10) \sum_{i\in w_k}(a_kI_i^2+(\overline{p_k}-a_k\overline{I_k})I_i-p_iI_i+\epsilon a_k)=0\tag{10} iwk(akIi2+(pkakIk)IipiIi+ϵak)=0(10)
∑ i ∈ w k ( a k I i 2 + p k ‾ I i − a k I k ‾ I i − p i I i + ϵ a k ) = 0 (11) \sum_{i\in w_k}(a_kI_i^2+\overline{p_k}I_i-a_k\overline{I_k}I_i-p_iI_i+\epsilon a_k)=0\tag{11} iwk(akIi2+pkIiakIkIipiIi+ϵak)=0(11)
移项,注意求和符号的层级关系,提出 a k a_k ak,注意带下标k的都可以从求和函数提出:
a k ∑ i ∈ w k ( I i 2 − I k ‾ I i + ϵ ) = ∑ i ∈ w k ( p i I i − p k ‾ I i ) (12) a_k\sum_{i\in w_k}(I_i^2-\overline{I_k}I_i+\epsilon)=\sum_{i\in w_k}(p_iI_i-\overline{p_k}I_i)\tag{12} akiwk(Ii2IkIi+ϵ)=iwk(piIipkIi)(12)
a k ( ∑ i ∈ w k I i 2 − I k ‾ ∑ i ∈ w k I i + ∑ i ∈ w k ϵ ) = ∑ i ∈ w k p i I i − p k ‾ ∑ i ∈ w k I i (13) a_k(\sum_{i\in w_k}I_i^2-\overline{I_k}\sum_{i\in w_k}I_i+\sum_{i\in w_k}\epsilon)=\sum_{i\in w_k}p_iI_i-\overline{p_k}\sum_{i\in w_k}I_i\tag{13} ak(iwkIi2IkiwkIi+iwkϵ)=iwkpiIipkiwkIi(13)
为了进一步简化,在两边同除以 ∣ w ∣ |w| w后,将之前记的 p k ‾ , I k ‾ \overline{p_k},\overline{I_k} pk,Ik代入上式,并记 I 2 ‾ k = 1 ∣ w ∣ ∑ i ∈ w k I i 2 \overline{I^2} _k=\frac{1}{|w|}\sum_{i\in w_k}I_i^2 I2k=w1iwkIi2 p k I k ‾ = 1 ∣ w ∣ ∑ i ∈ w k p i I i \overline{p_kI_k}=\frac{1}{|w|}\sum_{i\in w_k}p_iI_i pkIk=w1iwkpiIi整理上式得:
a k ( I 2 ‾ k − I k ‾ 2 + ϵ ) = p k I k ‾ − p k ‾ I k ‾ (14) a_k(\overline{I^2} _k-\overline{I_k}^2+\epsilon)=\overline{p_kI_k}-\overline{p_k}\overline{I_k}\tag{14} ak(I2kIk2+ϵ)=pkIkpkIk(14)
其中,公式左侧都是图像I相关的,在邻域w中的均值,根据方差与期望的推导公式 V = E ( X 2 ) − ( E ( X ) ) 2 V=E(X^2)-(E(X))^2 V=E(X2)(E(X))2,可得:
a k = p k I k ‾ − p k ‾ I k ‾ σ k 2 + ϵ (15) a_k =\frac{\overline{p_kI_k}-\overline{p_k}\overline{I_k}}{\sigma_k^2+\epsilon}\tag{15} ak=σk2+ϵpkIkpkIk(15)
即为 a k a_k ak的结果,相比与论文中的结果,这里进一步替换简化了公式。
-----------------分割线-----------------
  接下来,只要把上述线性模型应用到整个图像的滤波窗口。但是可以看到,每一个像素点会被包含在多个窗口里。比如,如果用3*3的窗口滤波,那么除了边缘区域的每个点都会被包含在9个窗口里。因此,对于不同的窗口,我们将会得到 ∣ w ∣ |w| w q i q_i qi值,就对所有的 q i q_i qi值取平均,得到最终结果:
q i = 1 ∣ w ∣ ∑ k : i ∈ w k ( a k I i + b k ) (16) q_i=\frac{1}{|w|}\sum_{k:i\in w_k}(a_kI_i+b_k)\tag{16} qi=w1k:iwk(akIi+bk)(16)
   = a ˉ i I i + b ˉ i (17) \ \ =\bar a_iI_i+\bar b_i\tag{17}   =aˉiIi+bˉi(17)
其中 a ˉ i = 1 ∣ w ∣ ∑ k : i ∈ w k a k \bar a_i=\frac{1}{|w|}\sum_{k:i\in w_k}a_k aˉi=w1k:iwkak b ˉ i = 1 ∣ w ∣ ∑ k : i ∈ w k b k \bar b_i=\frac{1}{|w|}\sum_{k:i\in w_k}b_k bˉi=w1k:iwkbk。由此建立了每个像素点从 I I I q q q的映射。

边缘保持

  对于该算法,当 I = p I=p I=p时,即输入图像和引导图像是同一副图像时,该算法即成为一个边缘保持滤波器。同时,方程的解也可作如下表示:
a k = σ k 2 σ k 2 + ϵ (18) a_k =\cfrac{\sigma _k^2}{\sigma _k^2+\epsilon}\tag{18} ak=σk2+ϵσk2(18)
b k = ( 1 − a k ) p ˉ k (19) b_k = (1-a_k)\bar p_k\tag{19} bk=(1ak)pˉk(19)
从中可以看出, ϵ \epsilon ϵ在这里相当于界定平滑区域和边缘区域的阈值。

考虑以下两种情况:

  • Case 1:平坦区域。如果在某个滤波窗口内,该区域是相对平滑的,方差 σ k 2 \sigma _k^2 σk2将远远小于 ϵ \epsilon ϵ。从而 a k ≈ 0 , b k ≈ p ˉ k a_k\approx0,b_k\approx\bar p_k ak0,bkpˉk。相当于对该区域作均值滤波。
  • Case 2:高方差区域。相反,如果该区域是边缘区域,方差很大, σ k 2 \sigma _k^2 σk2将远远大于 ϵ \epsilon ϵ。从而 a k ≈ 1 , b k ≈ 0 a_k\approx1,b_k\approx0 ak1,bk0。相当于在区域保持原有梯度。

  

应用

1、以自身作为引导图的保边平滑滤波:

《导向滤波(Guided Filter)公式详解》

2、以原图引导的对透射率滤波的暗通道去雾

3、以原图引导的对权重图滤波的引导图像融合

    原文作者:lsflll
    原文地址: https://blog.csdn.net/weixin_43194305/article/details/88959183
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞