Just a Computer Graphics Studio & My Life

雙邊濾波器 (Bilateral Filter)

開始感慨檔同學所觀察的現象可能成真,台灣的硬體輸給韓國,連軟體也要輸給大陸,這是去過韓國和大陸考察過之後的他所得到的結論。嗯~卻是有他說的那種趨勢,因為這一篇文章有關於雙邊濾波器 (Bilateral Filter),很多資料我都查自大陸,我們台灣能查到的資料少的可憐!

  • 描述:雙邊濾波器是個非線性的過濾器,在計算機圖形影像處理領域中使影像模糊化,但同時能夠保留影像內容的邊緣。
  • 技術:結合兩個函數~一個函數是由幾何空間距離決定濾波器係數,另一個由像素色差決定濾波器係數。可以與其相比較的兩個濾波器:高斯濾波器(Gaussian filter)均值濾波器(mean filter),這兩者皆為線性過濾器。

註:雙邊濾波器技術來自IEEE 1998年的論文:Bilateral Filtering for Gray and Color Images。線性與非線性的差別:在數學上,線性函數的關係是直線,而非線性函數的關係是非直線,包括各種曲線、折線、不連續的線等;線性方程滿足疊加原理,非線性方程不滿足疊加原理;線性方程易於求出解析解,而非線性方程一般不能得出解析解。

看了上圖就可以知道雙邊濾波器可以做到怎樣的效果,此外還可以比較其它濾波器的效果,可以參考我的文章:影像模糊化 (Image Smoothing),是我以OpenCV提供的模糊化函式來作測試。

透過雙邊濾波器,每一個像素的結果來自式子:

變量的含義如下:

  • p:目標像素
  • q:目標像素周圍的一個像素
  • Ip:目標像素的顏色
  • Iq:目標像素周圍的一個像素的顏色
  • S:目標像素周圍的像素群
  • Gs:與標準偏差的高斯濾波器(加權的像素根據距離
  • Gr:與標準偏差的高斯濾波器(加權的像素根據像素色差

式子看似複雜,但其實只有兩部份,前半部就是以距離決定權重的高斯濾波器的式子,然後加上後半部以像素色差決定權重的式子。

若還不瞭解,有請高人指點:

濾波算法中,目標點上的像素值通常是由其所在位置上的周圍的一個小局部鄰居像素的值所決定。在2D高斯濾波中的具體實現就是對周圍的一定範圍內的像素值分別賦以不同的高斯權重值,並在加權平均後得到當前點的最終結果。而這裡的高斯權重因子是利用兩個像素之間的空間距離(在圖像中為2D)關係來生成。通過高斯分佈的曲線可以發現,離目標像素越近的點對最終結果的貢獻越大,反之則越小。其公式化的描述一般如下所述:

 

其中的c(closeness function 接近度函式 )即為基於像素間接近程度的高斯權重,而kd(x)用來對結果進行單位化。

高斯濾波在低通濾波算法中有不錯的表現,但是其卻有另外一個問題,那就是只考慮了像素間的空間位置上的關係,因此濾波的結果會丟失邊緣的信息。這裡的邊緣主要是指圖像中主要的不同顏色區域(比如藍色的天空,黑色的頭髮等),而Bilateral就是在Gaussian blur中加入了另外的一個權重分部來解決這一問題。Bilateral濾波中對於邊緣的保持通過下述表達式來實現:

其中的s(similarity function 相似度函式)為基於像素間相似程度的高斯權重,同樣kd(x)用來對結果進行單位化。對兩者進行結合即可以得到基於空間距離、相似程度綜合考量的Bilateral濾波:

上式中的單位化分部kd(x)綜合了兩種高斯權重於一起而得到,其中的c與s計算可以詳細描述如下:

上述給出的表達式均是在空間上的無限積分,而在像素化的圖像中當然無法這麼做,而且也沒必要如此做,因而在使用前需要對其進行離散化。而且也不需要對於每個局部像素從整張圖像上進行加權操作,距離超過一定程度的像素實際上對當前的目標像素影響很小,可以忽略的。限定局部子區域後的離散化公就可以簡化為如下形式:

上述理論公式就構成了Bilateral濾波實現的基礎。為了直觀地了解高斯濾波與雙邊濾波的區別,我們可以從下列圖示中看出依據。假設目標源影像為下述左右區域分明的帶有噪聲的影像(由程式自動生成),藍色框的中心即為目標像素所在的位置,那麼當前像素處所對應的高斯權重與雙邊權重因子3D可視化後的形狀如後邊兩圖所示:

左圖為原始的噪聲影像;中間為高斯採樣的權重;右圖為Bilateral採樣的權重。從圖中可以看出Bilateral加入了相似程度分部以後可以將源影像左側那些跟當前像素差值過大的點給過濾掉,這樣就很好地保持了邊緣。為了更加形像地觀察兩者間的區別,使用Matlab將該圖在兩種不同方式下的高度圖3D繪製出來,如下:

上述三圖從左到右依次為:雙邊濾波、原始影像、高斯濾波。從高度圖中可以明顯看出Bilateral和Gaussian兩種方法的區別,前者較好地保持邊緣處的梯度,而在高斯濾波中,由於其在邊緣處的變化是線性的,因而就使用連累的梯度呈現出漸變的狀態,而這表現在影像中的話就是邊緣失真。

接下來解釋兩部份權重的來源定義:

Closeness Weight

這就是通常的Gaussian Blur中使用的計算高斯權重的方法,其主要通過兩個像素之間的距離並使用如下公式計算而來:

其中的就表示兩個像素間的距離,比如當前像素與其右邊緊鄰的一個像素之間的距離我們就可以用來計算,也即兩個二維向量{ 0 , 0 }以及{ 0 , 1 }之間的歐氏距離。直接計算一個區域上的高斯權重並單位化後就可以進行高斯模糊了。

Similarity Weight

與基於距離的高斯權重計算類似,只不過此處不再根據兩個像素之間的空間距離,而是根據其相似程度(或者兩個像素的值之間的距離)。

其中的表示兩個像素值之間的距離,可以直接使用其灰度值之間的差值或者RGB向量之間的歐氏距離。

如此,已有相當細膩地認識!

話說,還有三邊濾波

參考:WiKi – Bilateral filter、WiKi – Gaussian filter、百度百科 – 雙邊濾波Bilateral Filtering(雙邊濾波) for SSAO圖像處理之雙邊濾波效果(Bilateral Filtering for Gray and Color Image)雙邊濾波器的原理及實現

廣告

Comments on: "雙邊濾波器 (Bilateral Filter)" (5)

  1. Formula 3中的similarity function裡的第二個function括號裡的變數好像有錯誤哦

    按讚數

  2. 請問你由上往下數第11個式子,是不是exp()中有少一個負號? -1/2才是

    按讚數

  3. […] 在了解雙邊濾波器 (Bilateral Filter)理論之後,來試驗程試跑出來的效果。比起其它影像模糊化 (Image Smoothing)的方法,雙邊濾波器執行時間較長然模糊效果較佳!我所使用的筆電跑本程式每張圖約2.5分鐘。 […]

    按讚數

  4. […] 除非要深入研究模糊技術,不然只要效果是我們要的就直接拿來用吧!看似Bilateral Blur沒啥變化,事實上它的效果是有做保留邊緣的動作,也就是若顏色差異幅度太大,就會判定它是邊緣而不給予模糊,而顏色差異幅度較小,就會模糊化。簡單來Bilateral Blur可以消除雜訊,有篇論文可參考:Fast Bilateral Filtering for the Display of High-Dynamic-Range Images,想簡單瞭解理論可以參考:雙邊濾波器 (Bilateral Filter)。 […]

    按讚數

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: