前のページで利用したガウシアンフィルタは注目画素との距離による重み付け平均値を注目画素の値としていました.バイラテラルフィルタは注目画素との距離だけでなく,注目画素と周囲の画素との色の差も利用します.バイラテラルフィルタは,scikit-image の restoration.denoise_bilateral
関数で提供されています.なお,restoration.denoise_bilateral
関数の詳細やソースコードはここを参照してください.
まず,「表示関数の定義」ページを参照し,ライブラリのインポートと関数の定義を実行したあと,画像ファイルをグレースケールに変換して表示します.
ink_img = plt.imread('ink.png')
img = color.rgba2rgb(ink_img)
gray_img = color.rgb2gray(img)
show(gray_img)
オリジナル
オプショナル引数を特に指定することなくバイラテラルフィルタを適用してみます.
bilateral_result = restoration.denoise_bilateral(gray_img)
show(bilateral_result)
上の場合はフィルタのウインドウサイズ win_size
が 7 になっています.この値を 31 に指定して実行すると次のようになります.
bilateral_result = restoration.denoise_bilateral(gray_img, win_size=31)
show(bilateral_result)
オプショナル引数 sigma_color
と sigma_spatial
を指定すると次のようになります.
bilateral_result = restoration.denoise_bilateral(gray_img, sigma_color=0.3, sigma_spatial=30)
show(bilateral_result)
次のページでは画像にノイズを加えたあと,平均化フィルタ,ガウシアンフィルタ,バイラテラルフィルタを適用してみます.