Gaussian Blur と Bilateral Filter のメモ

概要

  • Gaussian Blur (ガウシアンブラー) と Bilateral Filter (バイラテラルフィルタ) のメモです.
  • 主にプログラマ向けの内容です.

参考文献

Gaussian Blur の場合

  • ピクセル(p)の近傍ピクセル(q)をサンプリングし, ピクセル間の距離(|q-p|)によって重みを変化させながらブラーします.
  • 数式(1)が Gaussian Filter の式で, 数式(2) が Gaussian Kernel である Gσ(x)です.


  • パラメータσを変化させたときの見た目の変化です.

Bilateral Filter の場合

  • Gaussian Blur の処理に加えて, ピクセルの値の差(Ip - Iq) に応じて重みを変化させて, エッジ部分を保持しようとしながらブラーします.
  • 数式(3) が Bilateral Filter の式で, 数式(4) が正規化用の係数です.


  • パラメータσs とσrを変化させた時の Bilateral Filter の結果で, 一番右の列の GB は Gaussian Blur の結果です.


  • 下図の真ん中の図は Bilateral Filter の「空間的な重み」と「ピクセル値の差による重み」の両者を考慮した重みを表しています.


Bilateral Filter のコードのサンプル

  • "Screen Space Fluid Rendering for Games" では流体の粒子が持つ球のデプスに対してバイラテラルフィルタを適用することで, 球のツブツブ感をなくしてデプスをエッジ部分以外のデプスを滑らかにしていました.



  • ガウシアンブラーを使うとシルエットまでぼけてしまうので, バイラテラルフィルタを使っています.



  • 以下がコード部分(未最適化)です.