画像処理におけるバイラテラルフィルタ(Bilateral Filter)の原理や計算式についてまとめました。
バイラテラルフィルタとは
バイラテラルフィルタ(Bilateral Filter)は、画像のノイズ除去に用いられる空間フィルタの1つです。ノイズ除去を行いつつ輪郭を保持する優れた特性があります。これを実現するために、「空間的な距離」と「画素値の差」の両方に基づいて重み付けを行います。つまり、「画素値の差」が大きいところは、重みを小さくすることで、輪郭部分を保持します。
以下は、天体写真(オリオン大星雲、M42)に対してバイラテラルフィルタを適用した結果です。
■入力画像(左)と出力画像(右)
背景ノイズを除去しつつ、星雲の輪郭は保持されています。
カーネルと計算式
バイラテラルフィルタのカーネルは、「空間的な距離の差」と「画素値の差(明るさの差)」の両方に基づいて重み付けを行い、それらの2つの重みを掛け合わせて最終的な重みとします。具体的な計算方法は以下のとおりです。
① 「空間的な距離の差」に基づくガウス分布で重みを計算します。
ここで、 と は注目画素 と その近傍にある画素のxy座標、は空間フィルタの標準偏差です。これにより、注目画素との距離が近い画素ほど強調されます。
② 「画素値の差」に基づくガウス分布で重みを計算します。
ここで、 と は注目画素 とその近傍にある画素 の画素値、 は輝度フィルタの標準偏差です。これにより、注目画素との画素値の差が大きい(輪郭部分)ほど重みが小さくなります。
③ 最終的なバイラテラルフィルタのカーネの要素は、これら2つの重みの積で計算されます。
これにより、注目画素との距離が近く、かつ画素値の差が小さい画素に対してぼかし効果が強くなり、ノイズ除去の効果が大きくなります。つまり、輪郭部分はぼかし効果を弱めることで、輪郭部分を保持しながらノイズ除去を行うことができます。
関連ページ
プログラミングによる実装例について以下ページで解説しています。


コメント