Attualmente sto lavorando e confrontando le prestazioni di diversi rilevatori di funzionalità fornite da OpenCV come base per la corrispondenza delle caratteristiche visive.
Sto usando i descrittori SIFT . Ho raggiunto una corrispondenza soddisfacente (dopo aver rifiutato le corrispondenze errate) quando ho rilevato le funzionalità MSER e DoG (SIFT) .
Attualmente, sto testando il mio codice con GFTT (Good Features to Track - Harris angoli) per ottenere un confronto, e anche perché nell'applicazione finale, un set di funzionalità GFTT sarà disponibile dal processo di tracciamento delle funzionalità visive.
Sto usando cv::FeatureDetector::detect(...)
che mi fornisce un std::vector<cv::KeyPoint>
pieno di caratteristiche / punti chiave / regioni di interesse rilevati . La struttura cv::KeyPoint
contiene informazioni di base sulla posizione della funzione, nonché informazioni su size
e octave
in cui il punto chiave è stato rilevato.
I miei primi risultati con GFTT sono stati terribili fino a quando non ho confrontato il tipico size
e i octave
parametri in diversi tipi di funzionalità:
- MSER imposta la dimensione (tra 10 e 40px) e lascia l' ottava su 0
- DoG (SIFT) imposta sia la dimensione che l' ottava ( rapporto dimensioni / ottava tra 20 e 40)
- GFTT i parametri sono sempre : dimensione = 3 , ottava = 0
Presumo che ciò sia dovuto al fatto che lo scopo principale delle funzionalità GFTT non era quello di utilizzare la corrispondenza, ma solo il monitoraggio. Ciò spiega la bassa qualità dei risultati della corrispondenza, poiché i descrittori estratti da tali minuscole funzionalità smettono di essere discriminatori e invarianti rispetto a molte cose , inclusi piccoli spostamenti di 1 pixel.
Se ho impostato manualmente il size
di GFTT per 10 - 12 , ottengo buoni risultati, molto simili a quando si utilizza MSER o cane (SIFT) .
La mia domanda è: esiste un modo migliore per determinare quanto aumentare size
(e / ooctave
) che andare-con-10-vedere-se-funziona ? Voglio evitare l'hardcoding size
dell'aumento, se possibile, e determinarlo a livello di codice , ma l' hardcoding va bene fintanto che ho degli argomenti solidi a sostegno delle mie scelte del nuovo algoritmosize
/ size
aumento / size
stima .