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


コメント