← ブログ一覧

エッジを壊さずにぼかす——バイラテラルフィルタの二重の重み

🧮 数学・計算

画像のノイズを消したいとき、いちばん素朴な方法は近所の画素を平均することだ。ガウスぼかしはその代表で、近い画素ほど大きな重みで足し合わせる。

ただし副作用がある。輪郭——明るさが急に変わる場所——も一緒に溶ける。ノイズと同じ「細かい変化」だから、区別せずに平均してしまうのだ。

問い: ノイズは消したい、エッジは残したい。両立できるか

バイラテラルフィルタの答えは、重みを二重にすることだった。

w=exp ⁣(pq22σs2)空間の近さ×exp ⁣((IpIq)22σr2)明るさの近さw = \underbrace{\exp\!\left(-\frac{\|p-q\|^2}{2\sigma_s^2}\right)}_{空間の近さ} \times \underbrace{\exp\!\left(-\frac{(I_p-I_q)^2}{2\sigma_r^2}\right)}_{明るさの近さ}

第一項はガウスぼかしと同じ「距離が近いほど仲間」。第二項が発明で、「明るさが近いほど仲間」を掛け算する。

エッジの向こう側の画素は、距離では近くても明るさが大きく違う。だから第二項がほぼゼロになり、平均に参加できない。結果として、平均は「エッジのこちら側の、自分と似た明るさの画素」だけで行われる。面の中のノイズは消え、面と面の境界は残る。

崖の比喩

grayscaleの画像を標高だと思うと分かりやすい。ガウスぼかしは地形全体に雨を降らせてなだらかにする——崖も丸くなる。バイラテラルは「自分と同じ高さの土地だけを均す」ので、台地は台地のまま、上面だけが平らになる。

代償はある

ノイズ除去とエッジ保存は原理的にトレードオフに見えるが、「似た者同士だけで平均する」という一つの工夫でかなりの範囲まで両立する。フィルタの重みに画像自身を参照させる——この自己参照の一歩が、単純な線形フィルタとの分水嶺になっている。