雙邊濾波器

在圖像處理上，**雙邊濾波器**（英語：Bilateral Filter）為使影像平滑化的非線性濾波器，
這個想法由C. Tomasi在1998年提出。
和傳統的影像平滑化演算法不同，雙邊濾波器除了使用像素之間幾何上的靠近程度之外，還多考慮了像素之間的光度/色彩差異，
使得雙邊濾波器能夠有效的將影像上的雜訊去除，同時保存影像上的邊緣資訊。
在實作上，雙邊濾波器和非等向性擴散及Adaptive Smoothing不同，它是非迭代、區域性的，
能夠較以上兩個方法簡化。

## 原理

### 定義

**雙邊濾波器**定義如下：

:\vec{h}(\vec{x}) = k^{-1}(\vec{x}) \iint^{\infty}_{\infty} \vec{f}(\vec{\xi})\, c(\vec{\xi},\vec{x})\, s(\vec{f}(\vec{\xi}),\vec{f}(\vec{x})) \, d\vec{\xi}

其中\vec{h}為輸出影像，\vec{f}為輸入影像，函數的值代表給定像素上的色彩資訊。
我們將輸入影像\vec{f}和輸出影像\vec{h}寫成向量的原因是，操作的影像不限定是只有單一通道的灰階影像，他們也可以是多通道的彩色影像。
式子中的\vec{x}代表影像中的任意一點，而\vec{\xi}代表在\vec{x}鄰近的點。
而k為歸一化函數：

:k(\vec{x}) = \iint^{\infty}_{\infty} c(\vec{\xi},\vec{x})\, s(\vec{f}(\vec{\xi}),\vec{f}(\vec{x}))\, d\vec{\xi}

雙邊濾波器的目的是，對於影像中的每一個點，都要對鄰近的所有點進行加權平均，以達到平滑化的目的。
而對此，雙邊濾波器在\vec{x}鄰近的點\vec{\xi}採取了不同的權重，
策略包含了兩個核心函數c(\vec{\xi},\vec{x})和s(\vec{f}(\vec{\xi}),\vec{f}(\vec{x}))，
這兩個式子分別代表了\vec{x}和\vec{\xi}在空間幾何關係上的差異和光度/色彩差異上的差異。
以下將針對這兩個核心函數進行說明。

### 空間幾何關係

為了使影像平滑化，考慮像素之間的空間幾何分布情形，我們可以把低通濾波器寫成以下形式：

:\vec{h}(\vec{x}) = k^{-1}_{d}(\vec{x}) \iint^{\infty}_{\infty} \vec{f}(\vec{\xi})\, c(\vec{\xi},\vec{x})\, d\vec{\xi}

其中c(\vec{\xi},\vec{x})為描述影像中任何一點\vec{x}和鄰近的\xi之間幾何距離的函數。
而k^{-1}_{d}(\vec{x})為歸一化函數，如果這個低通濾波器需要保存影像的直流成分，我們可以把k_d寫成：

:k_d(\vec{x}) = \iint^{\infty}_{\infty} c(\vec{\xi},\vec{x})\, d\vec{\xi}

如果這個濾波器是Shift-invariant的，那麼*c*可以簡化為\xi-\vec{x}的函數，使得k_d為一個和\vec{x}無關的常數。
*c*在選擇上一個很好的例子是高斯函數（請見高斯模糊），它在影像平滑上經常被使用。

### 光度/色彩差異

接著我們考慮像素之間的光度/色彩差異，同樣可以寫出對此的濾波器函數：

:h(\vec{x}) = k^{-1}_{r}(\vec{x}) \iint^{\infty}_{\infty} \vec{f}(\vec{\xi})\, s(\vec{f}(\vec{\xi}),\vec{f}(\vec{x}))\, d\vec{\xi}

和空間關係的濾波器不同的是，光度/色彩差異函數s(\vec{f}(\vec{\xi}),\vec{f}(\vec{x}))描述的是\vec{\xi}和\vec{x}之間的光度差異。
因此差異函數s(\vec{f}(\vec{\xi}),\vec{f}(\vec{x}))的輸入為影像在\vec{\xi}和\vec{x}兩點上面的內容，也就是這兩點對於影像函數\vec{f}的輸出。
對於灰階影像，差異函數*s*的內容很單純，舉例來說，我們可以直接對兩點上的灰階亮度值做相減；而對於彩色影像而言，我們可以使用Lab色彩空间來求得兩點之間的光度差異。
而歸一化函數可以寫為：

:k_r(\vec{x}) = \iint^{\infty}_{\infty} s(\vec{f}(\vec{\xi}),\vec{f}(\vec{x}))\, d\vec{\xi}

和空間幾何關係的式子不同，這邊的歸一化函數會和影像內容有關。如果差異函數*s*只和\vec{f}(\vec{\xi})-\vec{f}(\vec{x})有關的話，我們稱*s*為**未偏差的**。

對光度/色彩進行低通濾波本身並不具有太大的意義，因為他只不過是將影像直方圖中聚集的部份集合在一起，也就是說讓影像直方圖中相似的色彩更向區域的平均靠近，色彩在空間中的分布情形並不會有任何的影響。
然而，如果同時考慮對空間幾何的濾波行為c(\vec{\xi},\vec{x})，
s(\vec{f}(\vec{\xi}),\vec{f}(\vec{x}))所代表的意義便成為，將影像平滑化的範圍限制在光度/色彩差異較小的部分，如此便能夠達到邊緣保存的目的。

### 離散形式

一般來說，在图像处理上，影像的像素在空間上的分佈是離散的，光度/色彩的儲存形式也是離散的。因此，雙邊濾波器常用的為其離散形式：

:BF[I]_\vec{p} = \frac{1}{W_\vec{p}} \sum_{\vec{q}\in S} G_{\sigma_S} (\left \| \vec{p}-\vec{q} \right \|) G_{\sigma_r} (\left \| I_\vec{p} - I_\vec{q} \right \|) I_\vec{q}

## 限制

雙邊濾波器由於核心函數會隨空間不同而變化，它是非線性濾波器，因此在實作上無法使用傅立葉變換來幫助運算。
如果使用暴力演算法需要很大的時間來進行運算，在不同應用上有近似的快速演算法可以大幅加快運算速度。

## 應用

雙邊濾波器可以應用在影像降噪、色調映射、圖像重照明和材質編輯。

### [[色調映射]]上的應用

色調映射是在有限動態範圍媒介上近似顯示高動態範圍圖像的一項7圖形學技術。列印結果、CRT 或者 LCD 顯示器以及投影儀等都只有有限的動態範圍。
本質上來講，色調映射是要解決的問題是進行大幅度的對比度衰減將場景亮度變換到可以顯示的範圍，同時要保持圖像細節與顏色等對於表現原始場景非常重要的信息。
因此，雙邊濾波器可以藉由對亮度相似區域進行模糊化之後，將高動態範圍圖像的梯度圖像分割成亮度相似區和亮度差異較大的部份，藉由改變兩者的權重，而將高動態範圍圖像映射成可顯示的有限動態範圍。

## 參考文獻

* Carlo Tomasi, Roberto Manduchi, Bilateral Filtering for Gray and Color Images  (shorter HTML  version), proceedings of the ICCV 1998 
* Fredo Durand, Julie Dorsey, Fast Bilateral Filtering for the Display of High-Dynamic-Range Images  (HTML ), SIGGRAPH 2002
* Sylvain Paris, Pierre Kornprobst, Jack Tumblin, Frédo Durand, A Gentle Introduction to Bilateral Filtering and its Applications , SIGGRAPH 2008 class