2013-06-20 11 views
6

Background:Qual è una buona metrica per il confronto di feature vector e come normalizzarli prima del confronto?

Sto lavorando su un approccio bottom up alla segmentazione di immagini dove ho over-segmentare l'immagine in piccole-regioni/super-pixel/super-voxel E poi nel Voglio fondere in modo iterativo adiacente regioni sovra-segmentate basate su alcuni criteri. Un criterio con cui ho giocato è quello di misurare la somiglianza tra le due regioni nell'aspetto. Per quantificare l'aspetto di una regione, utilizzo diverse misure: statistiche dell'intensità, caratteristiche della trama, ecc. Metto in evidenza tutte le caratteristiche che computo per una regione in un vettore di funzionalità lunghe.

Domanda:

Dati due adiacenti regioni over-segmentati R1 e R2, lasciate F1 ed F2 siano i corrispondenti vettori di caratteristiche. Le mie domande sono le seguenti:

- Quali sono le buone metriche per quantificare la somiglianza tra F1 e F2?

- Il modo migliore per normalizzare F1 e F2 prima di quantificare la loro somiglianza con una metrica? (Utilizzando qualsiasi approccio supervisionato per la normalizzazione non è fattibile perché io non voglio che il mio algoritmo di essere legato ad un insieme di immagini)

Solution nella mia mente:

somiglianza (R1, R2) = dot_product (F1/norma (F1), F2/norma (F2))

A parole, per prima cosa normalizzo F1 e F2 come vettori di unità e quindi utilizzo il prodotto di punti tra i due vettori come misura di somiglianza.

Mi chiedo se ci siano modi migliori per normalizzarli e confrontarli con una metrica. Sarei felice se la comunità potesse indicarmi alcuni riferimenti e scrivere motivi per cui qualcos'altro è meglio della misura di somiglianza che sto usando.

risposta

0

Voglio solo sottolineare che non è veramente necessario creare vettori unitari fuori da F1 o F2 prima di calcolare la somiglianza del coseno (che è il prodotto punto). Questo perché F1/norma (F1) renderà esplicitamente ciascun vettore unitario per il confronto di direzione.

Altre metriche per il confronto vettoriale includevano la distanza euclidea, la distanza Manhattan o la distanza Mahalanobis. L'ultimo potrebbe non essere del tutto applicabile nel tuo scenario. Si prega di leggere wikipedia per ulteriori informazioni.

Io stesso ho discusso alcune volte su quale sia meglio scegliere, l'Euclideo o il Coseno. Si noti che il contesto dell'uso di entrambe le metriche è soggettivo. Se nello spazio euclideo si vuole misurare se due punti sono allineati, la misura del coseno ha senso. Se si desidera una metrica di distanza esplicita, Euclide è migliore.

+0

Intendevi euclidean/manhattan dopo averli resi vettori unitari? Se no, allora non è una buona misura non è normalizzato. Per citare un esempio, prendi due coppie di regioni adiacenti (R1, R2) e (R3, R4). Ora immagina (R1, R2) di trovarsi in un luogo dell'immagine in cui l'illuminazione è scura e (R3, R4) si trovano dove l'illuminazione è relativamente luminosa e si assume un'illuminazione non uniforme. Inoltre, immagina (R1, R3) di avere la stessa trama e (R2, R4) per avere la stessa trama. In questo caso, una buona misura dovrebbe dare Similarity (R1, R2) = Similarity (R3, R4) ed entrambi euclidean/manhattan potrebbero non produrre questo. – cdeepakroy

+0

Se si calcola la similarità del coseno, sarebbe identico alla metrica proposta. Cioè, Similarity (R1, R2) = dot_product (F1/norma (F1), F2/norma (F2)) = dot_product (F1, F2)/(norma (F1) * norma (F2)) = Cosine_Similarity (R1, R2) – dan

+0

Perché dovrei calcolare i vettori unitari prima di ottenere la distanza euclidea? Per esempio. considera due punti nello spazio euclideo 2-D: (1,1) e (5,5). La distanza euclidea tra due punti, come si può osservare, sarebbe sqrt (32). Se converto ciascuno di essi in un vettore unitario, entrambi rifletteranno lo stesso punto. é questo ciò che vogliamo? – sandyp

4

Stato degli algoritmi di arte immagine segmentazione utilizzare campi condizionale a caso oltre Superpixels (IMO SLIC algoritmo è l'opzione migliore). Questo tipo di algoritmi cattura la relazione tra superpixel adiacenti nello stesso momento in cui classificano ogni superpixel (normalmente usando SSVM).

Per la classificazione dei superpixel normalmente raccoglierai un sacchetto di funzionalità per ciascuno di essi, come ad esempio SIFT descriptors, istogrammi o qualsiasi altra funzione che ritieni possa essere d'aiuto.

Ci sono molti documenti che descrivono questo processo, qui avete un po 'di loro che trovo interessante:

Tuttavia, non ci sono molte librerie o software per trattare con CRF. Il meglio che puoi trovare è this blog entry.

+0

Grazie mille per i riferimenti. Ci sono certamente alcune idee che posso adattare al mio problema. – cdeepakroy

1

I grumo tutte le funzionalità che computo per una regione in un vettore di funzionalità lungo. [...]

Quali sono le buone metriche per quantificare la somiglianza tra F1 e F2? [...]

Il modo migliore per normalizzare F1 e F2?

tl; dr: utilizzare una sorta TF-IDF di segnare come descritto here (vedi Discrete Approach, diapositive 18-35).


C'è un (abbastanza vecchio) motore CBIR chiamato GIFT (a.k.a GNU Immagine-Finding Tool) che segue appunto un tale approccio per calcolare similarità tra le immagini.

Qual è proprio interessante con il REGALO è che applica tecniche da testo recupero diritto di CBIR - che è diventato in qualche modo un classico approccio (vedi A Text Retrieval Approach to Object Matching in Videos).

In pratica GIFT estrae una grande quantità di funzioni per il colore e la consistenza di basso livello locale e globale dove ogni singola funzione (ad esempio la quantità di colore i-esimo in un istogramma) può essere pensato come una parola visiva :

  1. colore globale (HSV colore istogramma): 166 cassonetti = 166 parole visivi
  2. colore locale (analisi istogramma colore ricorsivamente suddividere l'immagine in ingresso in sottoregioni): 340 (sottoregioni) x 166 (bidoni) = 56.440 parole visive
  3. trama globale (istogramma Gabor): 3 (scale) x 4 (orientamenti) x 10 (intervalli) = 120 parole visive
  4. trama locale (istogramma Gabor in una griglia di sottoregioni): 256 (sottoregioni) x 120 (bin) = 30.720 parole visive

Quindi per qualsiasi GIFT immagine in ingresso è in grado di estrarre un vettore dei 87.446-dimensionale F, tenendo presente che una caratteristica è considerato sia presente (con una certa frequenza F[i]) o non è presente nell'immagine (F[i] = 0).

Quindi il trucco consiste nella prima indicizzazione di ogni immagine (qui ogni regione) in un inverted file per query efficienti. In una seconda fase (tempo di interrogazione) sei libero di utilizzare ogni regione come immagine di query.

Al momento della query il motore utilizza una classica TF-IDF punteggio:

/* Sum: sum over each visual word i of the query image 
* TFquery(i): term frequency of visual word i in the query image 
* TFcandidate(i): term frequency of visual word i in the candidate image 
* CF(i): collection frequency of visual word i in the indexed database 
*/ 
score(query, candidate) = Sum [ TFquery(i) * TFcandidate(i) * log**2(1/CF(i)) ] 

Internamente le cose sono un po 'più complessa dal REGALO:

  • esegue sub-query, concentrandosi separatamente su ogni tipo di bassa -le funzioni di livello (sub query 1 = solo colore hist, sub query 2 = blocchi colore, ecc.) e unisce i punteggi,
  • include l'eliminazione delle funzioni per valutare solo una determinata percentuale delle funzioni.

REGALO è abbastanza efficiente quindi sono abbastanza sicuro che potresti trovare idee interessanti lì che potresti adattare. Ovviamente potresti evitare di usare un indice invertito se non hai vincoli di performance.

+0

grazie mille per le diapositive ei puntatori --- anche se non sembrano applicarsi così com'è, ho trovato sicuramente alcune idee che potrei adattare al mio scenario. – cdeepakroy

Problemi correlati