SciPy#
「サイパイ」って読むらしいです.
この中にあるndimage
とsignal
を使っていきますです.
ガウシアンフィルタ#
今回はガウシアンフィルタをかけていきます.
画像が平滑化されます.
とりあえずやってみましょう.
ガウシアンフィルタとはなんぞ?って人はこちら→ガウシアンフィルタの解説
コードと結果##
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