はじめに
このページでは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値はぼかしの強さを制御し、値が小さいほどぼかし効果は弱く、大きいほど強くなります。
画像のノイズの除去

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

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

コメント