バイラテラルフィルター

 画像の平滑化を行いボカシを行うと、画像のエッジもボカシしてしまいます。
そこで、エッジ保存型のフィルターの1つのバイラテラルフィルターについて、プログラムを作成してみました。

バイラテラル計算式

 インターネットで検索すると、いろいろ出てきますが、実際のプログラムは、あまり見つかりません。
計算式は、直ぐに見つかります。
ガウシアンフィルターの一種である事が、大概、解説されています。
 画素ドット毎に、上記計算を行う事になりますが、マスクサイズを少し大きくしただけで、莫大な計算量となり、現在の写真の解像度だと、本当に計算しているのかどうか不安になるぐらい時間が掛かります。
 そこで、変換テーブルを作成して、少しでも計算時間の削減をする事にしました。(テンプレートテーブルを作成するのは、一般的な手法です。)

テーブル計算用
 変換テーブルは、  と  の二つ作成します。

σ1 と、 σ2の値は、最初に与えられるので、テンプレートテーブルの参照用にする必要はありません。
1 の 式に関しては、1次元配列とし
    f(i,j)-f(i + m,j + n) の値が、0~255の値をとるので、これをテーブル参照用に使用します。
    実際には、-255~255ですが、二乗となっているので、符号無しに出来ます。
2 の 式に関しては、2次元配列とし
    m , n の値をテーブル参照用にします。
        こちらの m, n の値も符号無しとして、テンプレートテーブルの参照をおこないます。

更に 計算高速化の為、1000倍して整数演算にします。

以上の対策をしても、演算量の多さは他のフィルターと比べて、非常に多いものとなります。

ガウシアンフィルター設定項目について

 マスクサイズは、mがX方向で、nがY方向で、半径となってるのは、片側半分で実際のサイズは-m~+m,-n~+nの範囲となります。

 ボカシ係数は、ガウシアンフィルター係数と同じで、値が大きいほど裾野が広くなります。
値の変更に連動してグラフが変化するので、実際に値を変えてみれば傾向が分かると思います。
 輝度差制御は、値を大きくすると、輝度差が大きくても、ボカシ効果がかかるようになります。
1に設定すると、ボカシは殆ど働かなくなります。
 マスクの最小値は、マスクの角(四隅)の値を示しています。
整数演算の為、1000倍されているので、実際には中央が1で、四隅は0.001です。
 グラフは、便宜上、対角方向の値をグラフとして表示しています。
m5×n5のマスクであると、-7.1~7.1のグラフになります。

バイラテラル画像
サンプル画像で、右側がバイラテラルフィルターを施したものですが、輪郭をのこして、それ以外の部分にボカシ効果かかっているのが分かります。

ここで、ダウンロード出来るプログラムソースには、保存用の機能はありません、必要であれば追加して下さい。
画像処理で保存が出来るプログラムもありますので、保存の方法はそちらを参考にして下さい。

    download Bilateral.zip

画像処理一覧へ戻る

      最初に戻る