2013-02-18 12 views
7

Ho un'immagine di Tiger's Pugmark (impronta dell'impronta) nel fango. Voglio rilevare il limite del pugmark ma l'immagine è di intensità uniforme, in quanto il primo piano e lo sfondo non possono essere distinti in base alle variazioni di intensità. Cosa posso fare per distinguere tra il pugmark e lo sfondo.!rilevamento dell'oggetto nell'immagine di intensità omogenea

tiger's pugmark http://imageshack.us/a/img407/4636/p1060993g.jpg

+1

Il problema è probabilmente più difficile di quanto si pensi. Può essere d'aiuto se approfondisci l'ulteriore utilizzo di quel confine, cioè di quale precisione hai bisogno? Se vuoi solo rilevare il pugmark, o conoscerne la direzione, non è necessario un confine preciso. –

+0

sei condannato. : - (..... Questo è un compito di elaborazione delle immagini estremamente difficile – Shai

+0

@RomanShapovalov Vorrei dirti perché, in particolare, ho bisogno di segnare i confini e scartare la regione irrilevante. Devo analizzare il pugmark e basato su alcune caratteristiche selezionate come area del pad, area delle dita, angolo tra le dita 2 e 3, lunghezza del segnaposto, larghezza, ecc. e poi dopo aver confrontato l'immagine analizzata con il set di allenamento devo essere in grado di distinguere quale pugmark della tigre è – Suvidha

risposta

7

In attività di segmentazione se si dispone di entrambe le

  1. buoni marcatori; e
  2. bordi forti intorno all'oggetto di interesse

poi viene direttamente risolti mediante un Watershed Transform. Il problema, naturalmente, è ottenere questi marcatori, oltre a migliorare i bordi rilevanti secondo necessità. Ottenere questi potrebbe coinvolgere conoscenza specifica del problema, che non ho per il tuo problema.

Tuttavia, ci sono alcuni metodi generali che potrebbero essere utili. Ad esempio, gli operatori collegati da Matematica Morfologica servono come un modo per unire ed estendere le zone piatte. Quindi, forse può darci dei marcatori relativamente buoni per il problema. Nell'immagine seguente una ricostruzione morfologica mediante apertura (una sorta di operatore connesso) è stata eseguita nella versione in scala di grigi dell'immagine originale (immagine a sinistra) e il restante massimo regionale è mostrato a destra.

enter image description hereenter image description here

Ora, siamo in grado di ottenere il gradiente morfologico della immagine a sinistra sopra. Possiamo anche eseguire il riempimento dei fori e una dilatazione con un piccolo disco nell'immagine a destra sopra per ottenere contorni più lisci - questo definisce la nostra immagine marker. Poi, l'applicazione di un Watershed Transform nell'immagine gradiente utilizzando la nostra immagine marcatore, e quindi in espansione (erodere o dilatarsi, dipende da come si vede) le linee spartiacque, otteniamo la seguente immagine:

enter image description here

I sospetto che sia possibile scartare facilmente regioni troppo grandi e troppo piccole. Quindi, se si dispone di alcune dimensioni approssimative previste per gli artigli, nonché per il palmo, è possibile eliminare le regioni irrilevanti. A questo punto è solo questione di dilatare le aree per formare un singolo componente e mostra contorno risultante nell'immagine originale:

enter image description here

Codice di esempio per l'esecuzione di ciascun passaggio (i passaggi rilevanti sono anche mostrati in commentato codice Matlab):

f = Import["http://imageshack.us/a/img407/4636/p1060993g.jpg"] 
g = ColorConvert[f, "Grayscale"]       (* g = rgb2gray(f); *) 
(* First image shown: *) 
geo = GeodesicOpening[g, DiskMatrix[5]] (* geo = imreconstruct(imerode(g, ... *) 
             (*   strel('disk', 6)), g);  *) 
(* Second image shown: *) 
marker = MaxDetect[geo]      (* marker = imregionalmax(geo); *) 

(* Watershed on gradient with markers. *) 
mgrad = ImageSubtract[Dilation[geo, 1], Erosion[geo, 1]]; (* mgrad = ...  *) 
      (* imdilate(geo,strel('square',3)) - imerode(geo,strel('square',3)); *) 
ws = Image[   (* ws = watershed(imimposemin(mgrad, bwmorph(imfill(... *) 
WatershedComponents[mgrad,  (* imregionalmax(geo),'holes'),'dilate')))); *) 
    Dilation[FillingTransform[marker], DiskMatrix[1]]]] 

(* Third image shown: *) 
wsthick = Erosion[ws // ImageAdjust, DiskMatrix[5]] 

(* Connected component selection based on some supposed sizes. *) 
ccs = SelectComponents[wsthick, "Count", 1000 < # < 3000 || 6000 < # < 10000 &] 

(* Final image (thick border on binarized filled dilated ccs) *) 
res = ImageAdd[f, Dilation[MorphologicalPerimeter[FillingTransform[ 
    MorphologicalPerimeter[Dilation[ccs, DiskMatrix[9]]]]], 2]] 
+0

Grazie per la risposta Lasciate che vi dica perché in particolare ho bisogno di segnare i confini e scartare la regione irrilevante.Ho bisogno di analizzare il pugmark e basato su alcune caratteristiche selezionate come area Pad, area delle dita, angolo tra le dita 2 e 3, lunghezza pugmark, larghezza, ecc. e dopo aver confrontato l'immagine analizzata con il set di allenamento, devo essere in grado di distinguere il segno distintivo della tigre. – Suvidha

+0

@ user2067773 Ok, proprio non so perché me lo stai dicendo. Ma sembra che tu stia saltando un passo in questo metodo che hai descritto: prima devi avere un metodo per determinare se quello che hai è un pugmark o no, altrimenti è inutile analizzarlo. – mmgp

+0

sì, hai ragione. non ci ho pensato Ma la mia prima preoccupazione è mascherare lo sfondo e ottenere un'immagine chiara del segno distintivo per ulteriori analisi. – Suvidha

3

l'approccio nella risposta di @ MMPG può essere instabile, poiché gli algoritmi utilizzati richiedono l'impostazione di parametri, che possono essere specifici per ciascuna immagine. Questo problema sembra essere meglio affrontato con modelli parametrici che hanno una conoscenza precedente della forma.

Active Shape Models quadro si avvicina iterativamente al contorno della forma. In primo luogo, si inizializza con qualche forma media (immagini sono solo illustrazioni non di uscita effettiva dell'algoritmo):

Initialization of the shape

Il profilo è definito dai punti di ancoraggio (dimostrato da zecche e blu, per il solo palmo per evitare confusione).In ogni iterazione l'algoritmo considera le direzioni ortogonali in ogni punto di ancoraggio e stima la probabilità del confine ad ogni distanza (solitamente usando il gradiente dell'immagine, ma nel tuo caso dovrebbe essere più complicato - potrebbe essere la differenza nella trama, ad esempio la distanza tra histograms of textons). Qui rosse punti evidenziazione Arg-massimi di tale distribuzioni:

Modes of the edge-ness distribution

Il nuovo profilo è adattamento ai dati di massimizzare tali distribuzioni moltiplicato per la distribuzione a priori della forma. Supponendo che la divisa prima, il nuovo contorno sarebbe simile a questa:

The new contour

In pratica si vorrebbe avere una distribuzione di forma non banale. Per stimare questo, è necessario un set di formazione di immagini in cui le maschere di pugmark sono etichettate manualmente.

Si consiglia di provare this MATLAB implementation.

Problemi correlati