Feature-Extraktion von Bildern in Python


18

In meiner Klasse muss ich eine Anwendung mit zwei Klassifikatoren erstellen, um zu entscheiden, ob ein Objekt in einem Bild ein Beispiel für Phylum porifera (Seeschwamm) oder ein anderes Objekt ist.

Ich bin jedoch völlig verloren, wenn es um Extraktionstechniken in Python geht. Mein Berater hat mich überzeugt, Bilder zu verwenden, die nicht im Unterricht behandelt wurden.

Kann mich jemand zu einer aussagekräftigen Dokumentation oder zum Lesen führen oder Methoden vorschlagen, die in Betracht gezogen werden sollten?


Sie erwähnten den Berater, also würde ich annehmen, dass dies Teil eines Auftrags an einer Graduiertenschule ist? Haben Sie Zugang zu kommerzieller Software oder sollten Sie dies nur mit Python- und Open-Source-Paketen tun? Was lernst du gerade in der Klasse und wie heißt die Klasse? Gibt es auch eine Leistungsanforderung in Bezug auf die Zeit, die benötigt wird, um eine Antwort zu geben?
MLowry

Es wird erwartet, dass ich nur Python- und Open Source-Pakete verwende. Es wird sogar davon abgeraten, meinen eigenen Quellcode zu schreiben. Dies ist ein Master-Kurs. Die Klasse ist ein Einführungskurs in Data Science. Das Letzte, was wir behandelt haben, ist die Funktionsauswahl, obwohl sich fast die gesamte Diskussion um Textdaten dreht. Es gibt keine Leistungsanforderungen außerhalb einer Genauigkeit ~ 70%
Jeremy Barnes

Antworten:


11

In Bildern sind einige häufig verwendete Techniken zur Merkmalsextraktion das Binarisieren und Verwischen

Binarisieren: Konvertiert das Bildarray in Einsen und Nullen. Dies erfolgt beim Konvertieren des Bildes in ein 2D-Bild. Auch Graustufen können verwendet werden. Es gibt Ihnen eine numerische Matrix des Bildes. Graustufen nehmen viel weniger Platz in Anspruch, wenn sie auf einer Disc gespeichert werden.

So machen Sie es in Python:

from PIL import Image

%matplotlib inline  

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

image

Beispielbild:

Bildbeschreibung hier eingeben

Konvertieren Sie jetzt in Graustufen:

im = image.convert('L')

im

wird dir dieses Bild zurückgeben:

Bildbeschreibung hier eingeben

Und die Matrix kann folgendermaßen angezeigt werden:

array(im)

Das Array würde ungefähr so ​​aussehen:

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)

Verwenden Sie jetzt ein Histogramm- und / oder ein Konturdiagramm, um die Bildfunktionen anzuzeigen:

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()

Dies würde Ihnen eine Handlung zurückgeben, die ungefähr so ​​aussieht:

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

Unschärfe: Der Unschärfealgorithmus verwendet den gewichteten Durchschnitt benachbarter Pixel, um die Umgebungsfarbe in jedes Pixel zu integrieren. Es verbessert die Konturen und hilft, die Merkmale und ihre Bedeutung besser zu verstehen.

Und so machen Sie es in Python:

from PIL import *


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

Und das unscharfe Bild ist:

Bildbeschreibung hier eingeben

Das sind also einige Möglichkeiten, wie Sie Feature-Engineering durchführen können. Und für fortgeschrittene Methoden müssen Sie die Grundlagen von Computer Vision und neuronalen Netzwerken sowie die verschiedenen Arten von Filtern und ihre Bedeutung und die Mathematik dahinter verstehen.


1
Ich danke dir sehr. Ich habe an einigen Stellen darüber gepostet, und Ihre Antwort war bei weitem die informativste. Mir wurde klar, dass ich falsch verstanden habe, wie die Feature-Extraktion von Bildern konzeptionell funktioniert.
Jeremy Barnes

Ich
bin

8

Dieses großartige Tutorial befasst sich mit den Grundlagen des Faltungsneuraltrakts, die derzeit bei den meisten Sehaufgaben auf dem neuesten Stand der Technik sind:

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

Es gibt eine Reihe von Optionen für CNNs in Python, einschließlich Theano und der darauf aufgebauten Bibliotheken (ich fand Keras einfach zu bedienen).

Wenn Sie es vorziehen, tiefes Lernen zu vermeiden, sollten Sie sich mit OpenCV befassen, das viele andere Arten von Funktionen, Line-Haar-Kaskaden und SIFT-Funktionen lernen kann.

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


1

Wie Jeremy Barnes und Jamesmf sagten, können Sie beliebige Algorithmen für maschinelles Lernen verwenden, um das Problem zu lösen. Sie sind leistungsstark und können die Funktionen automatisch identifizieren. Sie müssen dem Algorithmus nur die richtigen Trainingsdaten zuführen. Da es für die Bearbeitung von Bildern erforderlich ist, sind neuronale Faltungsnetze eine bessere Option für Sie.

Dies ist ein gutes Tutorial, um etwas über das neuronale Faltungsnetzwerk zu lernen. Sie können den Code auch herunterladen und entsprechend Ihrer Problemdefinition ändern. Sie müssen jedoch die Python- und die Theano-Bibliothek für die Verarbeitung lernen, und Sie erhalten auch dafür gute Tutorials

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.