ここでは,画像にランダムノイズを加えたあと,ここまでで説明した平均化フィルタ,ガウシアンフィルタ,バイラテラルフィルタを適用してどのような結果が得られるか確認します.
まず,「表示関数の定義」ページを参照し,ライブラリのインポートと関数の定義を実行したあと,画像ファイルをグレースケールに変換して表示します.
ink_img = plt.imread('ink.png')
img = color.rgba2rgb(ink_img)
gray_img = color.rgb2gray(img)
show(gray_img)
オリジナル
ランダムノイズは scikit-image の util.random_noise
関数を利用すると良いでしょう.詳細やソースコードはここを参照してください.
noise_img = util.random_noise(gray_img)
show(noise_img)
ランダムノイズ
ノイズを加えた画像について平均化フィルタを適用します.
mean_filter_noise_img = filters.threshold_local(noise_img, method='mean', block_size=7)
show(mean_filter_noise_img)
平均化フィルタ
ノイズを加えた画像にガウシアンフィルタを適用します.
normal_noise_result = filters.gaussian(noise_img, sigma=2)
show(normal_noise_result)
ガウシアンフィルタ
同じ画像にバイラテラルフィルタを適用します.他と比べて輪郭を残しつつノイズが除去されているようにも見えます(実際には様々な画像で比較して検討してください).
bilateral_noise_result = restoration.denoise_bilateral(noise_img,
sigma_color=3.0,
sigma_spatial=1.0,
mode='edge',
bins=10000,
win_size=7,
)
show(bilateral_noise_result)
バイラテラルフィルタ