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

python

はじめに

このページではSciPyのndimageモジュールを使った画像処理について解説します。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にすると、表示した画像は円形にくり抜かれたものになります。

画像の上下反転

np.flipud(img)を使用すると、画像が上下反転します。この処理により得られた画像はflip_imgという変数に格納されます。

画像の回転

ndimage.rotate(img, 60)を使用すると、画像を反時計回りに60°回転させることができます。

ndimage.rotate(img, 60, reshape=False)のように、reshape=Falseパラメータを指定すると、画像のサイズを維持したまま回転処理を適用できます。

画像の拡大

画像データの配列をスライスし、imshow関数で表示することで、拡大した画像を得ることができます。

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

ndimage.gaussian_filter(img, sigma=#)を使用すると、画像にガウシアンフィルターを適用してぼかし効果を与えることができます。sigma値はぼかしの強さを制御し、値が小さいほどぼかし効果は弱く、大きいほど強くなります。

画像のノイズの除去

参考サイトを基に画像にノイズを追加し、このノイズをメディアンフィルタを使用して平滑化します。

https://github.com/jakevdp/PythonDataScienceHandbook/blob/8a34a4f653bdbdc01415a94dc20d4e9b97438965/notebooks/04.07-Customizing-Colorbars.ipynb

ndimage.median_filter(img, 3)を使用することで、メディアンフィルタを適用した画像を取得できます。このフィルタ処理により、画像のノイズが効果的に低減されていることが確認できます。

参考

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

コメント