Je travaille et compare actuellement les performances de plusieurs détecteurs de fonctionnalités fournis par OpenCV comme base pour la correspondance visuelle des fonctionnalités.
J'utilise des descripteurs SIFT . J'ai réalisé une correspondance satisfaisante (après avoir rejeté les mauvaises correspondances) lors de la détection des fonctionnalités MSER et DoG (SIFT) .
Actuellement, je teste mon code avec GFTT (Good Features to Track - Harris corners) pour obtenir une comparaison, et aussi parce que dans la dernière application, un ensemble de fonctionnalités GFTT sera disponible à partir du processus de suivi des fonctionnalités visuelles.
J'utilise cv::FeatureDetector::detect(...)
ce qui me fournit un ensemble std::vector<cv::KeyPoint>
de fonctionnalités / points clés / régions d'intérêt détectés . La structure cv::KeyPoint
contient des informations de base sur l'emplacement de la fonction, ainsi que des informations sur size
et octave
dans lesquelles le point clé a été détecté.
Mes premiers résultats avec GFTT ont été terribles jusqu'à ce que je compare les paramètres typiques size
et les octave
différents types de fonctionnalités:
- MSER définit la taille (entre 10 et 40 px) et laisse l' octave à 0
- DoG (SIFT) définit à la fois la taille et l' octave (rapport taille / octave entre 20 et 40)
- GFTT les paramètres sont toujours : taille = 3 , octave = 0
Je suppose que c'est parce que l'objectif principal des fonctionnalités GFTT n'était pas d'être utilisé dans la correspondance, mais uniquement dans le suivi. Cela explique la faible qualité des résultats de correspondance, car les descripteurs extraits de ces minuscules fonctionnalités cessent d'être discriminatoires et invariants pour de nombreuses choses , y compris les petits décalages de 1 pixel.
Si je mets manuellement size
de GFTT à 10 - 12 , je reçois de bons résultats, très similaires lors de l' utilisation MSER ou DoG (EIPD) .
Ma question est: y a-t-il une meilleure façon de déterminer combien augmenter le size
(et / ou octave
) que juste aller avec 10 voir si ça marche ? Je veux éviter de coder en dur l' size
augmentation si possible et de la déterminer par programme, mais le codage en dur est correct tant que j'ai des arguments solides pour sauvegarder mes choix du nouvel algorithmesize
/ size
augmentation / size
estimation .