【python】画像処理その4 ~フィルター~


SciPy

「サイパイ」って読むらしいです.
この中にあるndimagesignalを使っていきますです.

ガウシアンフィルタ

今回はガウシアンフィルタをかけていきます.
画像が平滑化されます.
とりあえずやってみましょう.
ガウシアンフィルタとはなんぞ?って人はこちら→ガウシアンフィルタの解説

コードと結果

from PIL import Image
import numpy as np
from matplotlib import pylab as plt
from scipy import ndimage
#画像を開いてグレーにしてNumPy配列にする
img = np.array(Image.open('lena.jpg').convert('L'), 'f')
#ガウシアンフィルタをかける
img_gaussian = ndimage.filters.gaussian_filter(img, 10)
#表示
plt.imshow(img_gaussian, cmap='Greys_r')
plt.show()

ぼやっとしましたね.
因みに,ndimage.filters.gaussian_filter(img, 10)
この引数の二番目は標準偏差σのことらしいです.
この値が大きとよりぼやっとします.
さっきの例はσ=10でした.
σ=2だとこんな具合です.

さっきよりハッキリしてますね.

ウィーナーフィルタ

お次はウィーナーフィルタです.
ウィーナーフィルタとはなんぞ?って人はこちら→ウィーナーフィルタの解説

コードと結果

from PIL import Image
import numpy as np
from matplotlib import pylab as plt
from scipy import ndimage
from scipy import signal

#画像を開いてグレーにしてNumPy配列にする
img = np.array(Image.open('lena.jpg').convert('L'), 'f')

#ウィーナーフィルタをかける
img_wiener = signal.wiener(img, 151, 1999.0)

#画像を連結して表示する
#連結するために配列を用意する
images = [img, img_wiener]
#concatenateは連結するって意味
img_show = np.concatenate(images, axis=1)

#表示
plt.imshow(img_show, cmap='Greys_r')
plt.show()

なんかいい感じですね(小並感)

参考

http://www.turbare.net/transl/scipy-lecture-notes/advanced/image_processing/index.html
http://www.mwsoft.jp/programming/computer_vision_with_python/1_4_scipy.html