[SciPy] 3. ndimageによる画像処理

python

SciPyのndimageによる画像の処理方法

コード & 解説

モジュールのインポート

画像の読み込み

plt.imread(‘ファイル名’)で、カレントディレクトリにある画像を読み込む。img = img[:,:,0]でRGBのRのみのデータをもった状態とした。下の画像ファイルを読み込んだ。

画像のマスク

X, Y = np.ogrid[0:lx, 0:ly]では、1次元の行と列のデータが返ってくる。(meshgridは2次元)。

mask = (X – lx/2)**2 + (Y – ly/2)**2 > lx*ly/8 中心(lx/2, ly/2)の円の外側の部分のみTrueとなる。
img[mask] = 0でTrueの部分を0にして、画像を表示すると、円形にくり抜かれた画像が生成する。

画像の上下反転

flip_img = np.flipud(img)で上下が反転した画像となる。

画像の回転

rotate_img = ndimage.rotate(img, 60)で反時計回りに60°回転した画像が得られる。

rotate_img_reshapeFalse = ndimage.rotate(img, 60, reshape=False)のように、reshape=Falseとすることで、画像の大きさを変えることなく、回転できる。

画像の拡大

画像データの配列をスライスして、imshowすることで、拡大した画像が得られる。

フィルタによる画像のぼかし

ndimage.gaussian_filter(img, sigma=#)により、画像にフィルターをかけてぼかすことができる。
sigma値が小さいほどぼかしの効果は小さくなり、大きいほどぼかしの効果が大きくなる。

画像のノイズの除去

下記サイトを参考に画像にノイズを追加した。このノイズをメディアンフィルタで平滑化する。

PythonDataScienceHandbook/notebooks/04.07-Customizing-Colorbars.ipynb at 8a34a4f653bdbdc01415a94dc20d4e9b97438965 · jakevdp/PythonDataScienceHandbook
Python Data Science Handbook: full text in Jupyter Notebooks - jakevdp/PythonDataScienceHandbook

median_filter_img = ndimage.median_filter(img, 3)により、メディアンフィルタをかけた画像を得ることができる。メディアンフィルタにより画像のノイズが低減していることが確認できる。

参考

2.6. Numpy と Scipy を利用した画像の操作と処理 — Scipy lecture notes
ロフォフォラ - Wikipedia

コメント