Extraction de fonctionnalités d'images en Python

18

Dans ma classe, je dois créer une application à l'aide de deux classificateurs pour décider si un objet dans une image est un exemple de phylum porifera (seaponge) ou un autre objet.

Cependant, je suis complètement perdu en ce qui concerne les techniques d'extraction de fonctionnalités en python. Mon conseiller m'a convaincu d'utiliser des images non couvertes en classe.

Quelqu'un peut-il m'orienter vers une documentation ou une lecture significative ou suggérer des méthodes à considérer?

Jeremy Barnes
la source
Vous avez mentionné le conseiller, donc je suppose que cela fait partie d'une mission de Graduate School? Avez-vous accès à un logiciel commercial ou êtes-vous censé le faire avec uniquement des packages Python et open-source? Qu'apprends-tu en classe en ce moment et quel est le nom de la classe? De plus, y a-t-il une exigence de performance en termes de temps qu'il faudrait pour donner une réponse?
MLowry
Je suis censé utiliser uniquement des packages Python et open source. Il est même déconseillé d'écrire mon propre code source. Il s'agit d'un cours de niveau master. La classe est un cours d'introduction à la science des données. La dernière chose que nous avons couverte est la sélection des fonctionnalités, bien que presque toute la discussion porte sur les données de texte. Il n'y a aucune exigence de performance en dehors d'une précision ~ 70%
Jeremy Barnes

Réponses:

11

En images, certaines techniques fréquemment utilisées pour l'extraction de fonctionnalités sont la binarisation et le flou

Binarisation: convertit le tableau d'images en 1 et 0. Cela se fait lors de la conversion de l'image en image 2D. Même la mise à l'échelle des gris peut également être utilisée. Il vous donne une matrice numérique de l'image. Les niveaux de gris prennent beaucoup moins d'espace lorsqu'ils sont stockés sur le disque.

Voici comment vous le faites en Python:

from PIL import Image

%matplotlib inline  

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

image

Exemple d'image:

entrez la description de l'image ici

Maintenant, convertissez en niveaux de gris:

im = image.convert('L')

im

vous renverra cette image:

entrez la description de l'image ici

Et la matrice peut être vue en exécutant ceci:

array(im)

Le tableau ressemblerait à ceci:

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)

Maintenant, utilisez un tracé d'histogramme et / ou un tracé de contour pour voir les caractéristiques de l'image:

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

Cela vous rendrait une intrigue qui ressemble à ceci:

entrez la description de l'image ici entrez la description de l'image ici

Flou: l' algorithme de flou prend la moyenne pondérée des pixels voisins pour incorporer la couleur environnante dans chaque pixel. Il améliore mieux les contours et aide à mieux comprendre les caractéristiques et leur importance.

Et voici comment vous le faites en Python:

from PIL import *


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

Et l'image floue est:

entrez la description de l'image ici

Voici donc quelques façons de réaliser l'ingénierie des fonctionnalités. Et pour les méthodes avancées, vous devez comprendre les bases de la vision par ordinateur et des réseaux de neurones, ainsi que les différents types de filtres et leur signification et les mathématiques derrière eux.

Dawny33
la source
1
Merci beaucoup. J'ai posté à ce sujet à quelques endroits et la vôtre était de loin la réponse la plus informative. J'ai réalisé que je ne comprenais pas comment l'extraction de fonctionnalités des images fonctionne conceptuellement.
Jeremy Barnes
Heureux que ma réponse vous ait aidé :)
Dawny33
8

Ce grand tutoriel couvre les bases des neuraltworks convolutionnels, qui atteignent actuellement des performances de pointe dans la plupart des tâches de vision:

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

Il existe un certain nombre d'options pour les CNN en python, y compris Theano et les bibliothèques construites dessus (j'ai trouvé que les keras étaient faciles à utiliser).

Si vous préférez éviter l'apprentissage en profondeur, vous pouvez vous pencher sur OpenCV, qui peut apprendre de nombreux autres types de fonctionnalités, des cascades de Haar en ligne et des fonctionnalités SIFT.

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

jamesmf
la source
1

Comme Jeremy Barnes et Jamesmf l'ont dit, vous pouvez utiliser n'importe quel algorithme d'apprentissage automatique pour résoudre le problème. Ils sont puissants et pourraient identifier automatiquement les fonctionnalités. Vous avez juste besoin de fournir à l'algorithme les données d'entraînement correctes. Puisqu'il est nécessaire de travailler sur des images, les réseaux de neurones à convolution seront une meilleure option pour vous.

Ceci est un bon tutoriel pour en savoir plus sur le réseau de neurones à convolution. Vous pouvez également télécharger le code et changer en fonction de la définition de votre problème. Mais vous devez apprendre python et la bibliothèque theano pour le traitement et vous obtiendrez de bons tutoriels pour cela aussi

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

Arun Sooraj
la source