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

Guided Filter

导向滤波

Guided Image Filtering - 何恺明 2009

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


原理

导向滤波(Guided Filter)公式详解_第1张图片

  对于一个输入的图像 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 \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 akδE=iwk(2(akIi+bkpi)(Ii)+2ϵak)=0
δ E b k = ∑ i ∈ w k ( 2 ( a k I i + b k − p i ) ) = 0 \frac {\delta E}{b_k}=\sum_{i\in w_k}(2(a_kI_i+b_k-p_i))=0 bkδE=iwk(2(akIi+bkpi))=0
a k = ∑ i ∈ w k p i I i − b k ∑ i ∈ w k I i ∑ i ∈ w k ( I i 2 + ϵ ) a_k =\frac{\sum_{i\in w_k}p_iI_i-b_k\sum_{i\in w_k}I_i}{\sum_{i\in w_k}(I_i^2+\epsilon)} ak=iwk(Ii2+ϵ)iwkpiIibkiwkIi
b k = ∑ i ∈ w k p i − a k ∑ i ∈ w k I i b_k=\sum_{i\in w_k}p_i-a_k\sum_{i\in w_k}I_i bk=iwkpiakiwkIi
b k b_k bk代入 a k a_k ak,整理可得:
a k = 1 ∣ w ∣ ∑ i ∈ w k I i p i − μ k p ˉ k σ k 2 + ϵ (5) a_k =\cfrac{\cfrac{1}{\left| w\right|}\sum_{i\in w_k}I_ip_i-\mu _k\bar p_k}{\sigma _k^2+\epsilon}\tag5 ak=σk2+ϵw1iwkIipiμkpˉk(5)
b k = p ˉ k − a k μ k . (6) b_k = \bar p_k-a_k\mu_k.\tag6 bk=pˉkakμk.(6)
在这里, μ k \mu_k μk σ k 2 \sigma_k^2 σk2分别表示引导图像 I I I在窗口 w k w_k wk中的平均值和方差, ∣ w ∣ |w| w是窗口 w k w_k wk中像素点的个数, p ˉ k = 1 ∣ w ∣ ∑ i ∈ w k p i \bar p_k=\frac{1}{|w|}\sum_{i\in w_k}p_i pˉk=w1iwkpi是输入图像在窗口 w k w_k wk中的平均值。
  接下来,只要把上述线性模型应用到整个图像的滤波窗口。但是可以看到,每一个像素点会被包含在多个窗口里。比如,如果用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 ) (7) q_i=\frac{1}{|w|}\sum_{k:i\in w_k}(a_kI_i+b_k)\tag7 qi=w1k:iwk(akIi+bk)(7)
   = a ˉ i I i + b ˉ i (8) \ \ =\bar a_iI_i+\bar b_i\tag8   =aˉiIi+bˉi(8)
其中 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 + ϵ a_k =\cfrac{\sigma _k^2}{\sigma _k^2+\epsilon} ak=σk2+ϵσk2 b k = ( 1 − a k ) p ˉ k b_k = (1-a_k)\bar p_k bk=(1ak)pˉk
从中可以看出, ϵ \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张图片

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

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

你可能感兴趣的:(图像处理)