Estrazione delle caratteristiche delle immagini in Python


18

Nella mia classe devo creare un'applicazione usando due classificatori per decidere se un oggetto in un'immagine è un esempio di phylum porifera (spugna di mare) o qualche altro oggetto.

Tuttavia, mi sono completamente perso quando si tratta di tecniche di estrazione in Python. Il mio consulente mi ha convinto a usare immagini che non sono state trattate in classe.

Qualcuno può indirizzarmi verso documentazione o lettura significative o suggerire metodi da considerare?


Hai menzionato un consulente, quindi suppongo che questo faccia parte di un incarico di scuola di specializzazione? Hai accesso a qualsiasi software commerciale o sei tenuto a farlo solo con Python e pacchetti open source? Cosa stai imparando in classe al momento e qual è il nome della classe? Inoltre, esiste un requisito prestazionale in termini di tempo necessario per dare una risposta?
— MLowry,

Mi aspetto di utilizzare solo pacchetti Python e open source. Scrivere il mio codice sorgente è persino scoraggiato. Questo è un corso di livello master. La classe è un corso introduttivo di Data Science. L'ultima cosa che abbiamo trattato è la selezione delle funzionalità, anche se quasi tutta la discussione riguarda i dati di testo. Non ci sono requisiti prestazionali al di fuori di un'accuratezza ~ 70%
— Jeremy Barnes,

Risposte:


11

Nelle immagini, alcune tecniche usate di frequente per l'estrazione di feature sono la binarizzazione e la sfocatura

Binarizzazione: converte l'array di immagini in 1s e 0s. Questo viene fatto durante la conversione dell'immagine in un'immagine 2D. È possibile utilizzare anche il ridimensionamento del grigio. Ti dà una matrice numerica dell'immagine. La scala di grigi occupa molto meno spazio quando è memorizzata su disco.

Ecco come lo fai in Python:

from PIL import Image

%matplotlib inline  

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

image

Immagine di esempio:

inserisci qui la descrizione dell'immagine

Ora converti in scala di grigi:

im = image.convert('L')

im

ti restituirà questa immagine:

inserisci qui la descrizione dell'immagine

E la matrice può essere vista eseguendo questo:

array(im)

L'array sarebbe simile a questo:

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)

Ora, usa un diagramma a istogrammi e / o un diagramma di contorno per dare un'occhiata alle caratteristiche dell'immagine:

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

Questo ti restituirebbe una trama, che assomiglia a questa:

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine

Sfocatura: l' algoritmo di sfocatura prende la media ponderata dei pixel vicini per incorporare il colore circostante in ogni pixel. Migliora i contorni meglio e aiuta a comprendere meglio le caratteristiche e la loro importanza.

Ed è così che lo fai in Python:

from PIL import *


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

E l'immagine sfocata è:

inserisci qui la descrizione dell'immagine

Quindi, questi sono alcuni modi in cui puoi fare ingegneria delle caratteristiche. E per i metodi avanzati, devi comprendere le basi di Computer Vision e le reti neurali, nonché i diversi tipi di filtri, il loro significato e la matematica che li sta dietro.


1
Grazie mille. Ho pubblicato su questo in alcuni punti e la tua è stata di gran lunga la risposta più istruttiva. Mi sono reso conto che stavo fraintendendo come l'estrazione delle caratteristiche delle immagini funzioni concettualmente.
— Jeremy Barnes,

Sono contento che la mia risposta ti abbia aiutato :)
— Dawny33

8

Questo fantastico tutorial copre le basi delle neuraltwork convoluzionali, che attualmente stanno raggiungendo prestazioni all'avanguardia nella maggior parte dei compiti di visione:

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

Ci sono una serie di opzioni per CNN in Python, tra cui Theano e le librerie costruite su di esso (ho trovato che le keras sono facili da usare).

Se si preferisce evitare l'apprendimento approfondito, è possibile esaminare OpenCV, che può apprendere molti altri tipi di funzionalità, line Haar cascade e 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

Come hanno detto Jeremy Barnes e Jamesmf, è possibile utilizzare qualsiasi algoritmo di machine learning per affrontare il problema. Sono potenti e potrebbero identificare automaticamente le funzionalità. Hai solo bisogno di alimentare l'algoritmo con i dati di allenamento corretti. Poiché è necessario lavorare sulle immagini, le reti neurali di convoluzione saranno l'opzione migliore per te.

Questo è un buon tutorial per conoscere la rete neurale di convoluzione. È inoltre possibile scaricare il codice e modificare in base alla definizione del problema. Ma devi imparare la libreria python e theano per l'elaborazione e otterrai buoni tutorial anche per quello

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.