2014-04-30 12 views
5

In cascadedetect.cpp in OpenCV, ci sono diverse varianti di groupRectangles funzione:Undocumented groupRectangles varianti in OpenCV

void groupRectangles(std::vector<Rect>& rectList, int groupThreshold, double eps); 
void groupRectangles(std::vector<Rect>& rectList, std::vector<int>& weights, int groupThreshold, double eps); 
void groupRectangles(std::vector<Rect>& rectList, std::vector<int>& rejectLevels, std::vector<double>& levelWeights, int groupThreshold, double eps); 

Ma nel OpenCV document, solo la prima variante è documentato chiaramente, la seconda variante è menzionato ma la L'argomento weights non viene spiegato. Il terzo non è nemmeno menzionato.

Qualcuno può spiegare il significato di weights, rejectLevels e levelWeights?

risposta

3

Ho letto il codice sorgente groupRectangles e ho compreso il significato di questi parametri in una certa misura.

groupRectangles è definito in cascadedetect.cpp, che viene utilizzato dal progetto traincascade in OpenCV. Questo progetto utilizza la struttura adaboost a cascata di viola-jones per rilevare oggetti, quindi ha diversi livelli a cascata e ognuno di essi è un classificatore forte. Il classificatore cascade di default emette un segnale positivo solo se il campione di input ha superato ogni fase, ma è anche possibile impostarlo per produrre l'indice dello stadio in cui il campione viene rifiutato se si desidera tracciare una curva ROC.

Quindi rejectLevels indica l'indice di fase in cui il rettangolo viene rifiutato. In base al codice sorgente, l'effetto di weight è uguale a rejectLevels.

I due parametri precedenti potrebbero non essere molto pratici per noi, ma a volte è utile il levelWeights. In origine è il punteggio del rettangolo emesso dal palco che lo rifiuta, ma possiamo usarlo per uno scopo più generale. Se ogni rettangolo ha un punteggio (indipendentemente da dove proviene) e vogliamo ottenere i punteggi dei rettangoli raggruppati, la variante documentata di groupRectangles non ci aiuterà. Dobbiamo usare il terzo, con rejectLevels set a zero:

vector<int> levels(wins.size(), 0); 
groupRectangles(wins, levels, scores, groupThreshold, eps); 

In quale scores è i punteggi di wins. Hanno le stesse dimensioni.

+0

Fantastico! Puoi spiegare cosa significa con il parametro "eps"? Grazie. – BonderWu

+0

@BonderWu, il parametro "eps" è spiegato nel [documento ufficiale] (http://docs.opencv.org/modules/objdetect/doc/cascade_classification.html#grouprectangles). – whenov