Buona metrica per il confronto qualitativo delle patch di immagine


11

Sto cercando di "abbinare" piccole patch quadrate in un'immagine. A prima vista, sembra ragionevole fare semplicemente un confronto euclideo dello stile a distanza di due di questi array per ottenere una misura di "somiglianza". Funziona bene in molti casi (la patch "migliore" (valore più basso) secondo questa metrica assomiglia molto alla patch di query). Tuttavia, ci sono molti casi in cui questo produce una corrispondenza molto negativa. Ad esempio, prendi queste due coppie di patch:

Due patch di un muro di mattoni, punteggio 134 (questa è la somma dei componenti della differenza media assoluta di pixel):

Patch di origine Patch target

Una patch di un muro di mattoni, una patch di erba, segna 123!

https://i.stack.imgur.com/d7lBZ.png https://i.stack.imgur.com/d2TBE.png

Per un essere umano, "chiaramente" l'erba non corrisponde al mattone, ma questa metrica dice il contrario. Il problema è proprio nella variazione statistica locale.

Se uso qualcosa come un confronto di un istogramma, perdo completamente tutte le informazioni spaziali, ad esempio se una patch è erba nella parte superiore e mattone nella parte inferiore, corrisponderebbe esattamente a una patch con erba nella parte inferiore e mattone nella parte superiore (di nuovo , un'altra partita "ovviamente sbagliata").

Esiste una metrica che in qualche modo combina entrambe queste idee in un valore ragionevole che valuterà "simile" per la coppia 1 sopra, ma non sarà simile per il mio esempio di patch e il suo specchio verticale?

Tutti i suggerimenti sono apprezzati!


1
Quando si prende la somma dei componenti si perdono tutte le informazioni "spaziali" nello spazio colore ... Si valutano i componenti singolarmente, ad esempio calcolando la distanza euclidea sui due vettori?
Geerten,

Risposte:


2

L'idea essenziale è: non c'è nulla di sbagliato nelle informazioni sul colore: è semplicemente insufficiente. Quindi la cosa migliore è combinare più set di funzionalità.

Puoi provare più funzionalità per risolvere questa ambiguità. Per quanto riguarda il set di funzionalità è possibile utilizzare quanto segue:

  1. Colore (qualcosa come il colore dominante di MPEG7 ) OPPURE Color Historgram
  2. Trama (sotto forma di risposta della banca filtro) OPPURE
  3. Istogrammi dei bordi

Come confronto principale, vorrei prima fare una distinzione tra patch di mattoni puri e patch di erba pura. Per questo, il colore è sicuramente l'elemento più potenziale.

Combinazione di funzionalità per rendere la classificazione più solida

Vorrei usare un colore dominante (usa ma non l'unico) o un colore chiave e formare i cluster. Guarda dove giacciono le teste dei cluster;

Se entrambi gli head cluster si trovano all'interno delle aree previste, la classe è di solito facile da rilevare, se cadono nell'area grigia, allora la classe appartiene lì. Se rientra nell'area grigia, è necessaria un'altra funzione.

Allo stesso modo, puoi classificare indipendentemente usando la matrice Texture e quindi combinare entrambi i punteggi per garantire che i risultati abbiano un senso.

Affrontare problemi spaziali

Soprattutto quando ti rendi conto che le patch possono avere parti di esso che sono metà mattoni e metà erba. Penso che non ti servano più funzionalità aggiuntive o matric diverse. Questo può essere gestito in due modi.

1. Mantenere più patch di appartenenza come classi diverse. Ad esempio, a parte la birck-onlyclasse e la grass-onlyclasse, puoi anche avere half-brick-half-grass-verticale half-brick-half-grass-horizontalcome un totale di quattro classi. Questo può essere facilmente classificato usando il metodo di clustering di cui abbiamo discusso in precedenza.

2. Aggiungi classificazione multi-scala Ad esempio, dato che la patch si trova in un'area grigia, puoi dividere la patch in due parti, ovvero sinistra e destra. Allo stesso modo puoi anche dividere la parte superiore a quella inferiore. Ora puoi applicare una classificazione identica per questa "mezza parte". Idealmente, la funzionalità sopra elencata dovrebbe consentire di renderla scalabile per confrontare una somiglianza di funzionalità tra la parte completa (ad esempio il colore dominante può essere lo stesso indipendentemente dalle dimensioni) o potrebbe essere necessario ridimensionarlo.

L'aggiunta di più classi (come nella parte 1) o più livelli (come nella parte 2) sarà semplice; il limite superiore verrà da due fattori: o qualsiasi divisione aggiuntiva non aggiungerà più alcun valore alla classificazione o che un rumore eccessivo introdurrà efficacemente l'ambiguità nella classificazione. Questo è dove ti fermi.


2

Tanto per cominciare, 2 immagini e 3 misurazioni non sono esattamente sufficienti per accertare qualsiasi tipo di modello statistico che, in termini, può essere utilizzato per definire la metrica di confronto ottimale.

Penso che potresti iniziare a dare un'occhiata ai documenti di riconoscimento delle trame per metodi e indizi. È un campo attivo.

Per quello che vale, ho eseguito un paio di test di funzioni di hashing percettivo (basate su DCT e proiezione casuale) e ho fatto una piccola prova con il cosiddetto descrittore SIFT. Queste funzioni possono separare le distanze inter e intra class, sebbene da 3 immagini sia impossibile concludere qualcosa.

Codice su github .

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.