2011-08-28 17 views
15

Sto cercando di trovare un modo efficace di complessità accettabile peroggetto di rilevazione + segmentazione

  • rilevare un oggetto in un'immagine così posso isolarlo dal suo ambiente
  • segmento che opporsi alla sua sub- parti e li etichetta in modo che possano poi prendere a piacimento

sono passati 3 settimane da quando sono entrato nel mondo di elaborazione delle immagini e ho letto su tanti algoritmi (vagliare, serpenti, più serpenti, Fourier-correlati, ecc.), ed euristica che non so da dove cominciare e quale sia "la migliore" "per quello che sto cercando di ottenere. Avendo in mente che il set di dati di immagine in interesse è piuttosto grande, non so nemmeno se dovrei usare qualche algoritmo implementato in OpenCV o se dovrei implementarne uno mio.

sintesi:

  • Quale metodologia dovrei concentrarsi su? Perché?
  • Devo usare OpenCV per quel tipo di roba o esiste un'alternativa "migliore"?

Grazie in anticipo.

EDIT - Maggiori informazioni per quanto riguarda le serie di dati

Ogni set di dati è costituito da 80K immagini dei prodotti che condividono la stessa

  • concetto esempio t-shirt, orologi, scarpe
  • dimensioni
  • orientamento (90% di loro)
  • fondo (95% di loro)

tutte le foto in ogni set di dati sembrano quasi identiche a parte il prodotto stesso , apparentemente. Per rendere le cose un po 'più chiaro, prendiamo in considerazione solo l' 'orologio set di dati':

Tutte le immagini del set sembrano quasi esattamente come questo:

enter image description here

(di nuovo, a parte costituiscono l'orologio stesso). Voglio estrarre il cinturino e il quadrante. Il fatto è che ci sono molti stili di orologi diversi e quindi forme. Da quanto ho letto finora, penso di aver bisogno di un algoritmo di modello che consenta di piegare e allungare in modo da poter abbinare cinturini e quadranti di stili diversi.

Invece di creare tre modelli distinti (parte superiore della cinghia, parte inferiore della cinghia, quadrante), sarebbe ragionevole crearne solo uno e segmentarlo in 3 parti. In questo modo, sarei abbastanza sicuro che ogni parte è stata rilevata l'una rispetto all'altra come previsto ad es. il quadrante non verrebbe rilevato sotto la parte inferiore della cinghia.

Da tutti gli algoritmi/metodologie che ho incontrato, i modelli di forma attiva sembrano essere i più promettenti. Sfortunatamente, non sono riuscito a trovare un'implementazione di discesa e non sono abbastanza sicuro che questo sia l'approccio migliore per andare avanti e scriverne uno io stesso.

Se qualcuno potesse indicare cosa dovrei veramente cercare (algoritmo/euristico/libreria/ecc.), Sarei più che grato. Se ancora una volta pensi che la mia descrizione fosse un po 'vaga, non esitare a chiedere una descrizione più dettagliata.

+0

Ti dispiacerebbe descrivere il dominio delle tue immagini, o anche alcuni campioni delle immagini. Per il rilevamento/riconoscimento/segmentazione di oggetti generali, credo o si crede generalmente che un buon confine del dominio possa darti un "vantaggio" per distinguere cosa essere segmentato e cosa no. –

+0

@gary - Una delle (molte) cose che voglio ottenere: avere un'immagine di un orologio, ad es. [collegamento] (http://upload.wikimedia.org/wikipedia/commons/0/06/Seiko_7002-7020_Diver%27s_200_m_on_a_4-ring_NATO_style_strap.JPG), voglio essere in grado di elaborare indipendentemente la parte 'superiore' e 'inferiore' del cinturino e del quadrante. Ecco perché ho bisogno di una sorta di modello che supporti la segmentazione. – sawidis

+0

Puoi pubblicare un paio di immagini dal tuo set di dati, per mostrare quanto sono diverse. Se per esempio tutte le tue immagini sono come l'immagine wiki che hai collegato, a faccia in su, direttamente nella fotocamera, e nessuna scala, differenze di illuminazione o differenze nella marca o nel tipo di orologio, puoi semplificare enormemente il tuo algoritmo. – Maurits

risposta

8

Da quello che hai detto, qui ci sono alcune cose che pop-up a prima vista:

  • cosa più semplice da fare è binarizzare l'immagine e fare Connected Components utilizzando OpenCV o libreria CvBlob. Per semplici immagini con sfondo non complesso questo di solito yeilds oggetti
  • Tuttavia, guardando l'immagine campione a, tecniche di segmentazione struttura a base può funzionare meglio - il quadrante dell'orologio, le cinghie e lo sfondo sono saggiamente variante in tessuto/ruvidità, e questo potrebbe essere un modo ideale per separarli.

    La ruvidità di una porzione può essere facilmente rilevata dalla trasformata di Eigen (spiegata un po 'su SO, controllare il collegamento al documento di ricerca fornito lì), quindi il filtro Mean Shift può essere applicato sull'output della trasformata di Eigen . Questo darà alle regioni chiaramente separate in base alla trama. Sia il Mean Shift piramidale che gli autovalori di SVD vengono implementati in OpenCV, quindi, a meno che non si possa ottimizzare il proprio codice, è meglio (e più semplice) utilizzare le funzioni integrate (se presenti) per quanto riguarda la velocità e l'efficienza.

+0

Grazie!Apprezzo molto il tuo aiuto =) – sawidis

3

Penso che vorrei risolvere il problema. Invece di cercare il quadrante, userei una serie di funzioni robuste dell'orologio per "cucire" l'immagine di destinazione su un modello. Il primo orologio ha una serie di quadrati sul quadrante bianchi, il secondo ha un numero di cerchi bianchi. Vorrei per tipo di orologio:

  • Separare i quadrati o cerchi nel quadrante. Le fasi di segmentazione possono essere complicate in quanto sono solitamente dipendenti dalla scala e dalla luce
  • Stimare i centri o gli angoli delle aree delle funzioni sopra individuate. Questi sono i nuovi punti caratteristica.
  • Utilizzare l'algoritmo ungherese per far corrispondere le funzioni tra l'orologio modello e l'orologio obiettivo. In alternativa, si può prendere le frazioni ogni punto caratteristico dell'immagine originale e abbinare questi usando correlazione incrociata
  • caratteristiche utilizzare la corrispondenza tra il modello e la porta per stimare scala, la rotazione e traslazione
  • Ricamabili l'immagine
  • Come l'immagine è ora in una forma nota, è possibile estrarre le regioni semplicemente tramite le coordinate preimpostate