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 Immagine logo uscita delle immagini tramite template matching
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? Grazie
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
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. –
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