2013-01-15 17 views
8

Sto cercando di abbinare un logo (modello) che ho con alcune immagini. Le mie immagini sono tutte colorate in natura e il modo in cui lo sto facendo è utilizzare il cvMatchTemplate() di openCV e l'esecuzione del modello (logo) sulla mia immagine di origine. Scala il modello su più livelli per trovare la migliore corrispondenza. Si noti che sto solo trovando i logo con impronta digitale sull'immagine e non i loghi presenti nella scena. Esempio: Rilevamento Sky Sports da questa immagine http://i56.tinypic.com/2v3j3wx.jpg (L'immagine è puramente per la rappresentazione e la chiarezza del mio compito e non è immagini sto lavorando conModello di corrispondenza OpenCV

mie immagini non sono degli elementi fissi risoluzione così mi scala fino a uno standard 800x600 Ora quando la mia risoluzione dell'immagine sorgente è pessima, ad esempio 300x300, i risultati sono molto ordinari, sto utilizzando il metodo = CV_TM_CCOEFF_NORMED nel parametro template e anche i punteggi per corrispondenze accurate sono piuttosto bassi (a partire da 0,4 su una scala di 0 a 1,0) rendendo difficile per me dire con sicurezza se il logo è presente oppure no Ho due domande su questo:

1 - In corrispondenza del modello opencv, come gestisce le immagini colorate. rehend dal documento e la mia inferenza è che calcola il punteggio per ogni canale separatamente e il migliore è preso. In tal caso, sarebbe meglio prendere in considerazione tutti e tre i canali per ottenere risultati migliori

2 - Qualsiasi approccio alternativo !! :)

Fammi sapere se qualche cosa non è chiara!

MODIFICA (Informazioni aggiuntive): Come discusso nei commenti, allego la mia tecnica di abbinamento corrente che corrisponde alla corrispondenza del modello ridimensionato. Si prega di notare le immagini allegate sono puramente a scopo di test e non è il mio vero e proprio set di immagini con cui sto lavorando (non può postare le immagini sono proprieotry) Fonte Immagine A screen shot from youtube Immagine logo Got from wikipedia uscita delle immagini tramite template matching Red block indicating the best match wrt highest score

Anche se il modello è abbinato, il punteggio ottenuto qui è 0,59 per questa migliore corrispondenza. Anche se relativamente è un buon punteggio per una partita, ma non è ancora abbastanza buono per me da dire per certo che il logo desiderato esiste o no. Nelle mie immagini di prova quando il logo sullo schermo è trasparente, sarebbe comunque in grado di rilevare il logo ma con un punteggio scarso di 0,3-0,4. Si può ottenere un risultato migliore usando SURF/SIFT?

EDIT (Tentativo di SURF) Ho tentato di eseguire un codice SURF già fornito come esempio nella documentazione ufficiale opencv (minHessian = 2000). link here ecco l'output. Non sono sicuro di come interpretarlo (2,3 punti sembrano essere nel limite previsto. È questo considerato buono? Eventuali ulteriori suggerimenti? enter image description here Grazie

+0

La correlazione incrociata normalizzata è probabilmente un metodo troppo debole per compito. Potresti volere un rilevatore di punti chiave seguito dalla corrispondenza del punto chiave nelle due immagini. Un metodo tipico per tale cosa è chiamato SURF. Puoi includere le immagini reali (quella cattiva e il modello) che desideri abbinare? – mmgp

+0

Grazie per la risposta. Ho preso in considerazione le tecniche SIFT/SURF, ma mi è stato consigliato da alcuni, è stato un overkill per la mia applicazione. Ma voglio essere sicuro che SURF migliorerebbe la mia precisione. Qualsiasi testa a testa su come andare sul compito oltre a leggere i codici di esempio SURF. Le immagini sono di natura proprietaria, tuttavia proverei a replicare il comportamento nelle immagini disponibili gratuitamente e pubblicarle qui per una migliore chiarezza del problema. –

+0

Per essere sicuri che SURF migliori la precisione è semplice: usalo e controlla se migliora la tua precisione. Chi ti ha consigliato contro di esso? E quale era la ragione? (il rischio eccessivo non è sicuramente una ragione). – mmgp

risposta

3

Hai provato con una sfocatura gaussiana sulla vostra Image Source prima eseguire la corrispondenza dei modelli?Questo può dare risultati più accurati, come penso che sia la qualità dell'immagine di origine che sta dando un match peggio

Link Controllo sfocatura in OpenCV Documenti:

OpenCV Python Gaussian Blur

In alternativa si potrebbe provare un confronto istogramma tecnica sul corrispondente modello area suggerisce, per una conferma in più che la correlazione template match è tornato, anche se piccolo, è il valore corretto:

Drawing Histograms

.210

Disegnare l'istogrammi è opzionale, potrebbe essere utile per la propria applicazione

Comparing the Histograms

^Questo metodo calcola le istogrammi delle immagini (fonte e modello) e la correlazione tra di loro ... Tuttavia, non vuoi un istogramma dell'intera fonte, solo dove il tuo Template Matching pensa che la migliore correlazione sia, o qualche altra posizione nell'immagine, quindi vuoi ottenere un istogramma di una regione di interesse (ROI), invece, vedi la seguente codice C++:

Mat OriginalImage = imread("source.jpg", 0); 
Rect RegionOfInterest = Rect(150, 150, 250, 250); 
Mat ROIImage = OriginalImage(RegionOfInterest); 

Ciò consente di calcolare l'istogramma di una regione di interesse. Dovresti ottenere un istogramma del tuo modello e un istogramma per la regione in cui Template Matching pensa che il tuo modello sia nella fonte e confrontarli per confermare o confutare l'output di corrispondenza modello

+0

Ciao, No, non ho fatto una sfocatura gaussiana, e tu hai ragione quando la qualità sta soffrendo nell'immagine dove la mia immagine modello è di alta qualità. Quindi dovrei fare una sfocatura gaussiana sull'immagine del logo modello? –

+0

L'idea di Gaussian Blur è di rimuovere le informazioni - ho suggerito di aggiungerlo al sistema perché penso che semplificerebbe l'impostazione delle soglie di corrispondenza dei modelli (correlazione) - Quindi direi che dipende, di solito offuserei la Sorgente, ma perché il il modello è di migliore qualità Vorrei giocare con questo metodo, principalmente cercando di sfocare il template e il Source, o semplicemente sfocare il template (ma poiché non ho visto le immagini potrebbe funzionare anche una sfocatura della sorgente, ma molto probabilmente non così bene come le altre due soluzioni ...) Ho allegato un link a Gaussian Blur nella documentazione – MattTheHack

+0

BTW, Se la corrispondenza dei modelli non funziona ho un'altra semplice tecnica di elaborazione delle immagini che potresti usare per il rilevamento, ma prima vedremo se Gaussian Blur aiuta – MattTheHack

Problemi correlati