Python入門トップページ


目次

  1. scikit-image のインストール
  2. Matplotlib による画像の表示
  3. 表示関数の定義
  4. RGBA から RGB への変換
  5. グレースケールをイメージする
  6. RGB からグレースケールへの変換
    1. RGB 平均
    2. ITU-R Rec BT.602
    3. Contemporary CRT phosphors (Rec 709)
    4. 3種類の比較
    5. scikit-image の rgb2gray 関数
  7. 平均化フィルタ
    1. 平均化フィルタの自作
    2. 平均化フィルタの一般化
    3. scikit-image の平均化フィルタ関数
  8. ガウシアンフィルタ
  9. バイラテラルフィルタ
  10. ランダムノイズとフィルタ
  11. ソーベルフィルタ
    1. ソーベルフィルタの自作
    2. scikit-image の sobel 関数
    3. 平均化/ガウシアンフィルタとソーベルフィルタの併用

画像フィルタの作成と利用

ランダムノイズとフィルタ

ここでは,画像にランダムノイズを加えたあと,ここまでで説明した平均化フィルタガウシアンフィルタバイラテラルフィルタを適用してどのような結果が得られるか確認します.

まず,「表示関数の定義」ページを参照し,ライブラリのインポートと関数の定義を実行したあと,画像ファイルをグレースケールに変換して表示します.

ink_img = plt.imread('ink.png')
img = color.rgba2rgb(ink_img)
gray_img = color.rgb2gray(img)
show(gray_img)
オリジナル
filters_20_gray.png

ランダムノイズは scikit-image の util.random_noise 関数を利用すると良いでしょう.詳細やソースコードはここを参照してください.

noise_img = util.random_noise(gray_img)
show(noise_img)
ランダムノイズ
filters_33_noise0.png

ノイズを加えた画像について平均化フィルタを適用します.

mean_filter_noise_img = filters.threshold_local(noise_img, method='mean', block_size=7)
show(mean_filter_noise_img)
平均化フィルタ
filters_33_noise1_mean.png

ノイズを加えた画像にガウシアンフィルタを適用します.

normal_noise_result = filters.gaussian(noise_img, sigma=2)
show(normal_noise_result)
ガウシアンフィルタ
filters_33_noise2_gaussian.png

同じ画像にバイラテラルフィルタを適用します.他と比べて輪郭を残しつつノイズが除去されているようにも見えます(実際には様々な画像で比較して検討してください).

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)
バイラテラルフィルタ
filters_33_noise3_bilateral.png

目次に戻る