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. 平均化/ガウシアンフィルタとソーベルフィルタの併用

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

グレースケールをイメージする

ここではグレースケールの画像データのイメージを掴むために,実際にデータを作成して画像として表示してみましょう.あらかじめ「表示関数の定義」ページを参照し,ライブラリのインポートと関数の定義を実行しておいてください.

まず,16行16列の Numpy 配列を 0 で初期化し,その配列を画像データとして色情報も含めて表示してみます.この場合は,すべての画素が黒になります.

gray_test = np.zeros([16,16])
show_zoom_with_color(
    gray_test, xlim=(-.5,15.5), ylim=(15.5, -.5),
    fontsize=8, figsize=(10,10),
    set_axis_off=True
    )
gray_test
filters_03_gray1
array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])

次に16行16列(=256画素)の配列に0から1まで256段階の実数値を格納し,これをグレースケールのデータとして表示します.また最上段と最下段の値を256倍して表示しています.

gray_test = np.zeros([16,16])
c = 0
for i in range(16):
    for j in range(16):
        gray_test[i, j] = c / 255.0
        c += 1
show_zoom_with_color(
    gray_test, xlim=(-.5,15.5), ylim=(15.5, -.5),
    fontsize=8,
    figsize=(10,10),
    set_axis_off=True,
    show_color=False,
)
print(gray_test[0]*255)
print(gray_test[15]*255)
filters_03_gray2
[ 0.  1.  2.  3.  4.  5.  6.  7.  8.  9. 10. 11. 12. 13. 14. 15.]
[240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253.
 254. 255.]

同じデータを表示するときに色情報も付与すると,最も暗い 0 から明るい 255 までの 256 段階のグレースケールであることがわかります.

show_zoom_with_color(
    gray_test, xlim=(-.5,15.5), ylim=(15.5, -.5),
    fontsize=8,
    figsize=(10,10),
    set_axis_off=True,
    show_color=True, # この引数は省略しても良い
)
filters_03_gray3

目次に戻る