Pythonでの画像の特徴抽出


18

私のクラスでは、2つの分類器を使用してアプリケーションを作成し、画像内のオブジェクトがポルフィラ門(seasponge)または他のオブジェクトの例であるかどうかを判断する必要があります。

しかし、Pythonでの特徴抽出技術に関しては、完全に失われています。私のアドバイザーは、クラスでカバーされていない画像を使用するように私を説得しました。

誰もが意味のある文書や読書を検討したり、検討する方法を提案したりできますか?


あなたはアドバイザーに言及したので、これは大学院の課題の一部だと思いますか?市販のソフトウェアにアクセスできますか、それともPythonとオープンソースパッケージのみでアクセスする予定ですか?現在、クラスで何を学んでいますか?クラスの名前は何ですか?また、答えを出すのに要する時間に関してパフォーマンス要件がありますか?
MLowry

Pythonとオープンソースパッケージのみを使用する予定です。私自身のソースコードを書くことは、推奨されていません。これは修士レベルのコースです。このクラスは、データサイエンスの入門コースです。最後に取り上げたのは機能の選択ですが、ほとんどの議論はテキストデータに関するものです。〜70%の精度以外のパフォーマンス要件はありません
ジェレミーバーンズ

回答:


11

画像において、特徴抽出のためのいくつかの頻繁に使用される技術である二値化及びぶれ

2値化:イメージ配列を1と0に変換します。これは、画像を2D画像に変換するときに行われます。グレースケーリングも使用できます。画像の数値行列を提供します。グレースケールは、ディスクに保存するときに必要なスペースがはるかに少なくなります。

これは、Pythonで行う方法です。

from PIL import Image

%matplotlib inline  

#Import an image
image = Image.open("xyz.jpg")

image

サンプル画像:

ここに画像の説明を入力してください

次に、グレースケールに変換します。

im = image.convert('L')

im

この画像が返されます:

ここに画像の説明を入力してください

そして、これを実行することでマトリックスを見ることができます:

array(im)

配列は次のようになります。

array([[213, 213, 213, ..., 176, 176, 176],
       [213, 213, 213, ..., 176, 176, 176],
       [213, 213, 213, ..., 175, 175, 175],
       ..., 
       [173, 173, 173, ..., 204, 204, 204],
       [173, 173, 173, ..., 205, 205, 204],
       [173, 173, 173, ..., 205, 205, 205]], dtype=uint8)

次に、ヒストグラムプロットまたは等高線プロットを使用して、画像の特徴を確認します。

from pylab import *

# create a new figure
figure()
gray()
# show contours with origin upper left corner
contour(im, origin='image')
axis('equal')
axis('off')


figure()


hist(im_array.flatten(), 128)

show()

これにより、次のようなプロットが返されます。

ここに画像の説明を入力してください ここに画像の説明を入力してください

ぼかし:ぼかしアルゴリズムは、隣接するピクセルの加重平均を取り、周囲の色をすべてのピクセルに組み込みます。輪郭をより良くし、特徴とその重要性をよりよく理解するのに役立ちます。

そして、これはPythonでそれを行う方法です:

from PIL import *


figure()
p = image.convert("L").filter(ImageFilter.GaussianBlur(radius = 2))
p.show()

ぼやけた画像は次のとおりです。

ここに画像の説明を入力してください

したがって、これらは機能エンジニアリングを行うことができるいくつかの方法です。また、高度な方法を使用するには、コンピュータービジョンとニューラルネットワークの基本、さまざまな種類のフィルターとその重要性、およびその背後にある数学を理解する必要があります。


1
どうもありがとうございます。私はこれについていくつかの場所に投稿しましたが、あなたの回答が最も有益な答えでした。画像の特徴抽出が概念的にどのように機能するかを誤解していることに気付きました。
ジェレミーバーンズ

私の答えがあなたを助けてくれたことを
うれしく思い

8

この優れたチュートリアルでは、現在ほとんどの視覚タスクで最先端のパフォーマンスを達成している畳み込みニューラルワークの基本について説明します。

http://deeplearning.net/tutorial/lenet.html

Theanoとその上に構築されたライブラリを含む、PythonのCNNには多くのオプションがあります(私はkerasが使いやすいことがわかりました)。

ディープラーニングを避けたい場合は、OpenCVを検討することをお勧めします。OpenCVは、他の多くのタイプの機能、ラインHaarカスケード、SIFT機能を学習できます。

http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_table_of_contents_feature2d/py_table_of_contents_feature2d.html


1

Jeremy BarnesとJamesmfが言ったように、機械学習アルゴリズムを使用して問題に対処できます。それらは強力であり、機能を自動的に識別できます。アルゴリズムに正しいトレーニングデータを入力するだけです。画像で作業する必要があるため、畳み込みニューラルネットワークがより良いオプションになります。

これは、畳み込みニューラルネットワークについて学習するための優れたチュートリアルです。コードもダウンロードでき、問題の定義に応じて変更できます。しかし、処理のためにpythonとtheanoライブラリを学ぶ必要があり、そのための良いチュートリアルも得られます。

http://deeplearning.net/tutorial/lenet.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.