2015-05-15 11 views
6

Guardando il Histogram Documentation, ci sono 4 (5) diversi metodi di confronto:OpenCV Istogramma metodi di confronto

  1. CV_COMP_CORRELCorrelazione
  2. CV_COMP_CHISQRchi-quadrato
  3. CV_COMP_INTERSECTIntersezione
  4. CV_COMP_BHATTACHARYYABhattacharyya distanza
  5. CV_COMP_HELLINGERSinonimo diCV_COMP_BHATTACHARYYA

Tutti danno diverse uscite che vengono letti in modo diverso, come mostrato in Compare Histogram Documentation. Ma non riesco a trovare nulla che dimostri quanto efficacemente ogni metodo si compara l'uno rispetto all'altro. Sicuramente ci sono Pro e Contro per ogni metodo, altrimenti perché avere più metodi?

Anche il OpenCV 2 Computer Vision Application Programming Cookbook ha molto poco da dire sui differnces:

La chiamata alla cv :: compareHist è semplice. Basta inserire i due istogrammi e la funzione restituisce la distanza misurata. Il metodo di misurazione specifico che si desidera utilizzare viene specificato utilizzando un flag. Nella classe ImageComparator, viene utilizzato il metodo di intersezione (con la bandiera CV_COMP_INTERSECT). Questo metodo confronta semplicemente, per ogni bin, i due valori in ciascun istogramma e ne mantiene uno minimo. La misura di somiglianza è quindi semplicemente la somma di questi valori minimi. Di conseguenza, due immagini con istogrammi senza colori in comune otterrebbero un valore di intersezione pari a 0, mentre due istogrammi identici otterrebbero un valore uguale al numero totale di pixel.

Gli altri metodi disponibili sono chi-quadrato (bandiera CV_COMP_CHISQR) che riassume la differenza quadrato normalizzato tra i contenitori, il metodo correlazione (bandiera CV_COMP_CORREL) che si basa sulla normalizzata correlazione incrociata operatore usato nell'elaborazione del segnale per misurare la somiglianza tra due segnali, e la Bhattacharyya misura (bandiera CV_COMP_BHATTACHARYYA) usato in statistica per stimare somiglianza tra due distribuzioni probabilistiche.

Ci devono essere differenze tra i metodi, quindi la mia domanda è cosa sono? e in quali circostanze funzionano meglio?

+1

darei wikipedia un tentativo. È come chiedere se sia meglio misurare una distanza lungo le strade o in linea d'aria ... potrebbe essere necessario capire cosa si vuole misurare. Ma forse c'è davvero una specie di libro di cucina di "quando usare quale metrica di distanza", quindi buona fortuna con la domanda. – Micka

+0

Voglio solo qualche indicazione per le differenze ci sono nei metodi disponibili. – MLMLTL

risposta

1

CV_COMP_INTERSECT è veloce da calcolare poiché è necessario solo il valore minimo per ogni bin. Ma non ti dirà molto sulla distribuzione delle differenze.Altri metodi cercano di ottenere un punteggio migliore e più continuo come una corrispondenza, in base a diverse ipotesi sulla distribuzione dei pixel.

Si possono trovare le formule utilizzate in diversi metodi, a

http://docs.opencv.org/doc/tutorials/imgproc/histograms/histogram_comparison/histogram_comparison.html

Alcuni riferimenti per maggiori dettagli sui algoritmi di matching può essere trovato a:

http://siri.lmao.sk/fiit/DSO/Prednasky/7%20a%20Histogram%20based%20methods/7%20a%20Histogram%20based%20methods.pdf

+0

Il tuo primo collegamento era uguale al mio primo link, ma il secondo era interessante. Detto questo, dice ancora solo quanto tutti gli altri link che ho trovato: il punteggio per i vari metodi viene eseguito in modo diverso. – MLMLTL

+0

Matematicamente parlando, un istogramma normalizzato è una funzione di densità di probabilità (PDF). Quando abbiniamo due istogrammi, stiamo fondamentalmente vedendo come due distribuzioni si corrispondono l'una con l'altra. Il modo migliore per rispondere alla tua domanda è leggere libri di testo su Statistical Pattern Recognition (Duda and Hart è piuttosto buono), o pubblicazioni come http://citeseerx.ist.psu.edu/viewdoc/download?rep=rep1&type=pdf&doi= 10.1.1.154.8446. Ho imparato ma ho dimenticato la maggior parte di queste cose ;-(. – Totoro