Scipy-ndimage

提供:Dev Guides
移動先:案内検索

SciPy-Ndimage

SciPy ndimageサブモジュールは、画像処理専用です。 ここで、ndimageはn次元の画像を意味します。

画像処理で最も一般的なタスクのいくつかは次のとおりです&miuns;

  • 入力/出力、画像の表示
  • 基本的な操作-トリミング、反転、回転など
  • 画像フィルタリング-ノイズ除去、鮮鋭化など
  • 画像のセグメンテーション-さまざまなオブジェクトに対応するピクセルのラベル付け
  • 分類
  • 特徴抽出
  • 登録

これらのいくつかがSciPyを使用してどのように達成できるかを議論しましょう。

画像ファイルを開いて書き込む

SciPyの* miscパッケージ*にはいくつかの画像が付属しています。 これらの画像を使用して、画像の操作を学習します。 次の例を考えてみましょう。

from scipy import misc
f = misc.face()
misc.imsave('face.png', f) # uses the Image module (PIL)

import matplotlib.pyplot as plt
plt.imshow(f)
plt.show()

上記のプログラムは、次の出力を生成します。

画像ファイルを開いて書き込む

生の形式の画像は、マトリックス形式の数字で表される色の組み合わせです。 マシンは、これらの数値のみに基づいて画像を理解および操作します。 RGBは一般的な表現方法です。

上記の画像の統計情報を見てみましょう。

from scipy import misc
face = misc.face(gray = False)
print face.mean(), face.max(), face.min()

上記のプログラムは、次の出力を生成します。

110.16274388631184, 255, 0

これで、画像が数字で作られていることがわかったため、数字の値を変更すると元の画像が変更されます。 画像に対していくつかの幾何学的変換を実行しましょう。 基本的な幾何学的操作はクロッピングです

from scipy import misc
face = misc.face(gray = True)
lx, ly = face.shape
# Cropping
crop_face = face[lx/4: - lx/4, ly/4: - ly/4]
import matplotlib.pyplot as plt
plt.imshow(crop_face)
plt.show()

上記のプログラムは、次の出力を生成します。

操作画像ファイルのトリミング

以下に説明するように、画像を上下逆にするなどのいくつかの基本的な操作を実行することもできます。

# up <-> down flip
from scipy import misc
face = misc.face()
flip_ud_face = np.flipud(face)

import matplotlib.pyplot as plt
plt.imshow(flip_ud_face)
plt.show()

上記のプログラムは、次の出力を生成します。

画像回転操作

これに加えて、指定した角度で​​画像を回転させる* rotate()関数*があります。

# rotation
from scipy import misc,ndimage
face = misc.face()
rotate_face = ndimage.rotate(face, 45)

import matplotlib.pyplot as plt
plt.imshow(rotate_face)
plt.show()

上記のプログラムは、次の出力を生成します。

画像の回転操作

フィルター

画像処理でフィルターがどのように役立つかを説明しましょう。

画像処理におけるフィルタリングとは何ですか?

フィルタリングは、画像を修正または強化するための手法です。 たとえば、特定の機能を強調したり、他の機能を削除するために画像をフィルターできます。 フィルタリングで実装される画像処理操作には、スムージング、シャープニング、エッジエンハンスメントが含まれます。

フィルタリングは近傍演算であり、対応する入力ピクセルの近傍のピクセルの値に何らかのアルゴリズムを適用することにより、出力画像の任意のピクセルの値が決定されます。 SciPy ndimageを使用していくつかの操作を実行してみましょう。

ぼけ

ぼかしは、画像のノイズを減らすために広く使用されています。 フィルター操作を実行して、画像の変化を確認できます。 次の例を考えてみましょう。

from scipy import misc
face = misc.face()
blurred_face = ndimage.gaussian_filter(face, sigma=3)
import matplotlib.pyplot as plt
plt.imshow(blurred_face)
plt.show()

上記のプログラムは、次の出力を生成します。

画像ぼかし操作

シグマ値は、ぼかしのレベルを5段階で示します。 シグマ値を調整することで、画質の変化を確認できます。 ぼかしの詳細については、→DIP(デジタル画像処理)チュートリアルをクリックしてください。

エッジ検出

画像処理でエッジ検出がどのように役立つかを説明しましょう。

エッジ検出とは何ですか?

エッジ検出は、画像内のオブジェクトの境界を見つけるための画像処理技術です。 明るさの不連続性を検出することで機能します。 エッジ検出は、画像処理、コンピュータービジョン、マシンビジョンなどの分野での画像セグメンテーションとデータ抽出に使用されます。

最も一般的に使用されるエッジ検出アルゴリズムは次のとおりです。

  • ソーベル
  • キャニー
  • プレウィット
  • ロバーツ
  • ファジーロジックメソッド

次の例を考えてみましょう。

import scipy.ndimage as nd
import numpy as np

im = np.zeros((256, 256))
im[64:-64, 64:-64] = 1
im[90:-90,90:-90] = 2
im = ndimage.gaussian_filter(im, 8)

import matplotlib.pyplot as plt
plt.imshow(im)
plt.show()

上記のプログラムは、次の出力を生成します。

エッジ検出

画像は色の正方形のブロックのように見えます。 次に、これらの色付きブロックのエッジを検出します。 ここで、ndimageはこの操作を実行するための Sobel と呼ばれる関数を提供します。 一方、NumPyは、2つの結果の行列を1つに結合する Hypot 関数を提供します。

次の例を考えてみましょう。

import scipy.ndimage as nd
import matplotlib.pyplot as plt

im = np.zeros((256, 256))
im[64:-64, 64:-64] = 1
im[90:-90,90:-90] = 2
im = ndimage.gaussian_filter(im, 8)

sx = ndimage.sobel(im, axis = 0, mode = 'constant')
sy = ndimage.sobel(im, axis = 1, mode = 'constant')
sob = np.hypot(sx, sy)

plt.imshow(sob)
plt.show()

上記のプログラムは、次の出力を生成します。

エッジ検出-2