引導影像濾波器

在圖像處理上，**引導影像濾波器**（）是一種能使影像平滑化的非線性濾波器。

與雙邊濾波器（Bilateral Filter）相同，這個影像濾波器同樣能夠在清楚保持影像邊界的情況下，達到讓影像平滑的效果。

但不同於雙邊濾波器，引導影像濾波器有兩個優點：首先，雙邊濾波器有非常大的計算複雜度，但引導影像濾波器因為並未用到過於複雜的數學計算，有線性的計算複雜度。再來，雙邊濾波器因為數學模型的緣故，在某些時候會發生梯度反轉（gradient reverse）的狀況，出現影像失真；而在引導影像濾波器，因為這個濾波器在數學上以線性組合為基礎出發，輸出圖片（Output Image）必與引導圖片（Guidance Image）的梯度方向一致，並不會出現梯度反轉的問題。

## 原理

為了達到將影像平滑化、即去除雜訊的效果，首先定義輸出的結果圖片是輸入圖片減去雜訊後的結果；同時，為了讓輸出的圖片符合引導圖片的影像邊界，將輸出圖片定為引導圖片的線性組合。

以下為引導影像濾波器的基礎模型：

(1)　　q_{i} = p_{i} - n_{i}

(2)　　q_{i} = aI_{i} + b

在上述公式中，q_{i}是第i個輸出的像素，p_{i}是第i個輸入的像素，n_{i}是第i個輸入像素的雜訊成分，I_{i}是第i個引導圖片的像素，a, b則是用來衡量輸入權重的參數。

定義為線性組合（Linear Combination）的原因在於，一物件的邊界與其梯度（Gradient）相關，而在線性組合的定義下，輸出圖片之梯度必與引導圖片之梯度成對比（微分時高冪次係數保留而常數項則被去除），故可以達到保留梯度的效果、保留影像邊界的目的。

為了導出上述線性組合的參數，將(1)及(2)相減得到公式(3)；同時，定義一個代價方程式(cost function)(4)：

(3)　　n_{i} = p_{i} - aI_{i} - b

(4)　　E(a_{k},b_{k})=\sum_{i{\epsilon}{\omega}_{k}}^{}((a_{k}I_{i} + b_{k} - p{i})^{2} + {\epsilon}a_{k}^{2})

在上式中， \epsilon 是一用來懲罰（penalize）過大的 a_{k} 的參數， \omega_{k} 是以第 k 個像素為中心點的窗格（window）。

在這個方程式中可以看到，希望同時讓最終的輸出圖片做到讓雜訊減少以及讓引導圖片在輸出圖片的影響減小（引導圖片的係數項）兩件事，遂定義每個像素雜訊和係數項的平方總合為最後須付出的價值項（cost）。並且，基於讓價值項最小化的原則，可以將(4)以線性回歸（linear regression）的方法找出它的線性模型，從而求得、使得出它的價值方程式有最小解的到以下兩參數 a_{k} 和 b_{k}：

(5)　　a_{k} = \frac{\frac{1}{\omega}\sum_{i\epsilon\omega_{k}}I_{i}p_{i} - \mu_{k}\bar{p_{k}}}{\sigma^{2}_{k}+\epsilon}

(6)　　b_{k} = \bar{p_{k}} - a_{k}\mu_{k}

在這裡， \mu_{k} 和 \sigma^{2}_{k} 分別是引導圖片 I 在窗格 \omega_{k} 的平均數（mean）和標準差（variance），而 \bar{p}_{k} = \frac{1}{\left|\omega\right|}\sum_{i\epsilon\omega_{k}}p_{i} 是在窗格 \omega_{i} 中像素的平均值；這兩項係數，換句話說，即是一以輸入圖片為考慮計算權重之平均濾波器（weighted mean）。

## 演算法

依據上式，可以列出此濾波器之演算法：

**Algorithm 1. 引導圖片濾波器**

**輸入：** 輸入圖片 p ，引導圖片 I  ，窗格半徑 r ，修正項 \epsilon

**輸出：** 輸出圖片 q

第一部分
 mean_{I} = f_{mean}(I)
 mean_{p} = f_{mean}(p)
 corr_{I} = f_{mean}(I.*I)
 corr_{Ip} = f_{mean}(I.*p)

第二部分
 var_{I} = corr_{I} - mean_{I.} * mean_{I}
 cov_{Ip} = corr_{Ip} - mean_{I.} * mean_{p}

第三部分
 a = cov_{Ip}./(var_{I} + \epsilon)
 b = mean_{p} - a. * mean_{I}

第四部分
 mean_{a} = f_{maean}(a)
 mean_{b} = f_{maean}(b)

第五部分
 q = mean_{a.} * I + mean_{b}

/*f_{mean} 是一個有線性計算複雜度的平均濾波器（mean filter）*/

## 特性
* 邊界保留過濾 (Edge-Preserving Filtering)
引導影像濾波器保留邊界的特性，其實也可以被理解為是保留梯度的特性。由下圖可以看到，可以將一張圖分為細節圖層和基底圖層兩層，基底圖層的能量並無小振幅的升降，只有大振幅諸入梯度的能量升降；而細節圖層，只有雜訊式的小振幅能量升降。而引導影像濾波器所作的，其實就是將細節層和基底層分離並保留基底層，也就是保留梯度而去除雜訊，達到平滑效果。

具體而言，可以通過引導影像濾波器的參數\epsilon定義什麼是“平坦區塊(patch)”或“高變化區塊”。若一個區塊的變異數(variance)遠低於參數\epsilon，其通過濾波器後將被平滑；反之，變異數遠高於\epsilon的區塊將被視為邊界而被保留。雙邊濾波器中的範圍方差(range variance)參數\sigma_r^2的功能和引導影像濾波器的\epsilon相似。它們都定義了怎麼樣的區塊應該被平滑，而怎樣的區塊應該被保留。

* 梯度保留過濾 (Gradient-Preserving Filtering)
使用雙邊濾波器過濾圖片時，經常會在邊界處出現梯度翻轉偽像。這是因為像素值在這些地方變化地很劇烈。這些偽像通常難以被避免，因為不論是任何圖片經常都會包含邊界。

引導影像濾波器在避免梯度反轉方面表現地較佳。此外，在某些情況下，甚至可以確保必定不會發生梯度反轉的現象。

* 結構轉移過濾 (Structure-Transferring Filtering)
由於局部線性模型q = aI + b的線性組合特性，這讓引導影像濾波器擁有可以將引導圖像I的結構轉換至演算法輸出q。這個特性使得一些特殊的濾波應用成為可能，如：feathering、matting以及dehazing等。

## 延伸功能

由引導圖片濾波器的特性，可以延伸出除了原先的平滑化外的幾項功能

### 細節加強

當一影像圖同時為輸出圖片和引導圖片時，可知最終得到的會是以該圖片的邊界為依據的基底層和細節層；因此，若要加強依影像之細節，可以將細節層的能量放大n倍後再次疊加回基底層，以達到增強細節的效果。

### 深度圖修整

無論是利用光場（light field）技術或是焦點合成（focal-stack）所製作的深度圖（depth map），在出製作完成時往往都會有一些坑洞（holo）；而這時若使用引導影像濾波器，以原始影像為引導圖片、以深度圖為輸入圖片，便可得到一完整、無坑洞的深度圖。

## 實作

* 官方MATLAB中實作了引導影像濾波器 
* 官方OpenCV中實作了引導影像濾波器 

## 參考文獻

*Computer Vision -- ECCV 2010: 11th European Conference on Computer ..., 第 1 篇