2013-07-22 7 views
5

Sto creando una semplice applicazione openCV usando la corrispondenza dei modelli dove devo confrontare trovare una piccola immagine in una grande immagine e restituire il risultato come vero (se trovato trovato) o falso (nessun risultato trovato).Qual è il modello OpenCV che corrisponde alla gamma di valori Max Min? Dev'essere usato come theshold/C++/java

Imgproc.matchTemplate(largeImage, smallImage, result, matchMethod); 
    Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1, new Mat()); 

    MinMaxLocResult mmr = Core.minMaxLoc(result); 

    double minMaxValue = 1; 
    if (matchMethod== Imgproc.TM_SQDIFF || matchMethod== Imgproc.TM_SQDIFF_NORMED) 
    { 
     minMaxValue = mmr.minVal; 
     useMinThreshold = true; 
    } 
    else 
    { 
     minMaxValue = mmr.maxVal; 
    } 

Ora il problema è nel prendere la decisione (vero/falso) utilizzando questo minMaxValue. So che i due metodi precedenti TM_SQDIFF e TM_SQDIFF_NORMED restituiscono valori bassi, mentre gli altri restituiscono valori elevati in modo da poter avere 2 soglie diverse e confrontare una soglia (a seconda del tipo di metodo del modello).

Quindi sarebbe bello se qualcuno potesse spiegare qual è il range minVal e maxVal restituito da MinMaxLocResult.

È nell'intervallo 0-1?

Se sì, per il metodo di modello di tipo Max il valore 1 è una corrispondenza perfetta?

risposta

7

MinMaxLocResult non restituisce la gamma minVal e maxVal. minVal e maxVal sono solo i punteggi di corrispondenza minimi e massimi come si può vedere nello link.

La struttura MinMaxLocResult ha anche minLoc e maxLoc proprietà che sono di tipo Point, dando le posizioni corrispondenti. Dato che si utilizza TM_SQDIFF o TM_SQDIFF_NORMED come criterio di corrispondenza, la posizione di corrispondenza migliore sarà mmr.minLoc.

Per impostare una soglia per il rilevamento, è possibile dichiarare una variabile double thresholdMatch e impostarne il valore in modo sperimentale. se MINVAL < thresholdMatch quindi si può dire che oggetto bersaglio viene rilevato

+0

Grazie Thomas, in modo da dire che la la decisione (vero/falso) può essere presa usando minLoc o maxLoc invece di minVal/maxVal? –

+0

@No, la corrispondenza dei modelli non fornisce informazioni sul fatto che tu abbia trovato o meno l'oggetto esatto. Piuttosto, dice che "il miglior oggetto di corrispondenza (potenziale) si trova in questa posizione" ed è il minLoc in questo caso specifico –

+0

Ok, In questo particolare esempio, tuttavia, posso ignorare i problemi di inclinazione della rotazione della bilancia. Ancora la corrispondenza dei modelli non è la migliore giunta a una conclusione per questo scopo (restituire un vero/falso)? Capisco il punto che hai enfatizzato dicendomi che "il miglior oggetto (potenziale) di corrispondenza si trova in questa posizione" Ma devo ancora sapere se esiste un tipo di soglia per giungere a una conclusione se l'oggetto è stato trovato. Potrebbe non essere con MinMaxLocResult ma ci sono alternative? NON SI TRATTA ANCHE SE È UNA TECNICA DI ESTRAZIONE DEL DESCRITTORE FUNZIONANTE –

2

Non normalizzare il risultato, allora darà il valore corretto, intendo eliminare questa linea

Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1, new Mat()); 
+0

come faccio a capire se è un valore adeguato ?? @ Mehul Thakkar – Fay007

Problemi correlati