Comment estimer l'octave et la taille des éléments visuels positionnés aux coins Harris

9

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::KeyPointcontient des informations de base sur l'emplacement de la fonction, ainsi que des informations sur sizeet octavedans 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 sizeet les octavediffé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 sizede 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' sizeaugmentation 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 / sizeaugmentation / sizeestimation .

Pénélope
la source
1
Hé @ penelope: consultez ce lien ce gars a déjà fait du bon travail. [ Computer-vision-talks.com/2011/08/…
@Sistu hey qui ressemble à une très bonne comparaison générale des descripteurs dans un cas général, et avec un objet planaire, mais je travaille sur des types d'images spécifiques et je dois faire mon propre test. En outre, la question était beaucoup plus spécifique que "J'ai besoin de matériaux de référence comparant les performances de différents types de décrypteurs". C'est un bon lien cependant, allez le vérifier.
penelope

Réponses:

4

Je ne suis pas sûr qu'il y ait en fait une bonne réponse à votre question précise: la chose d'espace d'échelle de SIFT et SURF a été réellement développée pour estimer automatiquement la "bonne" taille de voisinage pertinente autour d'un point clé en forme de coin (ce qui est de bonnes fonctionnalités à suivre sont).

Maintenant, des réponses plus positives seraient:

  • construire une base de données de points clés et de bonnes correspondances (par exemple en utilisant des modèles d'étalonnage carrés) et créer une évaluation automatisée des performances sur cette base de données pour trouver la bonne taille. Cette tâche peut réellement être réellement automatisée (voir les travaux de Mikolajczyk et Schmid sur l'évaluation de l'appariement de points)

  • intégrez vos bonnes fonctionnalités dans une pyramide d'images pour avoir également une sorte d'échelle qui leur est associée. Vous pouvez rechercher des références sur les points d'intérêt FAST et Harris multi-échelles, qui font quelque chose de très similaire à cette procédure.

Pour trouver heuristiquement la taille de bloc maximale, vous pouvez calculer les estimations de vos images avec un flou de boîte (qui est plus ou moins ce que fait l'opérateur blockSize) et voir quand le coin disparaît. Notez cependant que plus de flou éloigne le coin de son emplacement réel.

Si vous cherchez vraiment une solution rapide et sale, essayez des tailles comprises entre 5x5 et 11x11 (tailles typiques utilisées dans la correspondance de blocs stéréo). Si vous recherchez un critère intellectuellement satisfaisant, essayez de maximiser la probabilité d'une bonne correspondance de deux points caractéristiques sous votre niveau de bruit.

sansuiso
la source
Je cherchais une solution un peu plus rapide et sale que ce que vous proposez. De plus, je ne peux déterminer la météo qu'un match est bon ou mauvais après avoir extrait mes points clés et les faire correspondre à quelque chose. Même si je les fais correspondre de manière totalement aléatoire, j'obtiens de bonnes correspondances - donc votre première suggestion n'est pas très utile. Quant à la deuxième partie, plus rapide et sale: je sais qu'il n'y a pas de paramètre parfait, mais comme je l'ai dit, l'augmentation de la taille à 12 a aidé - la qualité était comparable à la correspondance SIFT et MSER. Je n'ai aucun argument pour choisir 12 sur 100 ou sur 34 ...
penelope
0

Pour vous aider à déterminer les meilleurs paramètres pour les détecteurs, OpenCV a le AjusterAdapter à cet effet. Je ne l'ai jamais utilisé moi-même mais c'est probablement la manière standard de déterminer par programmation les paramètres. Sachez également que bien que les points clés aient plusieurs propriétés, tous n'ont pas de sens pour tous les algorithmes. Parce que la structure Keypoint est utilisée pour différents algorithmes, elle a tous ces champs mais parfois ils ne sont pas utilisés, c'est pourquoi vous obtenez ces octave = 0; OMI.

Rui Marques
la source
Je sais que certains types de fonctionnalités ne sont pas parfois le meilleur type , mais des travaux récents ont essayé des approches où ils utilisent plus d'un type de fonctionnalités / régions d'intérêt et obtiennent de meilleurs résultats avec la combinaison qu'avec n'importe quel type unique seul (je peux ajouter des liens vers des œuvres si cela vous intéresse). De plus, ce que je fais est au moins une partie de la recherche, donc essayer et évaluer les résultats obtenus avec différents types de points clés est ce que je suis censé faire, même si certains de ces résultats ne sont pas aussi bons que l'état de la art. Je vais regarder dans AdjusterAdapter, merci.
penelope
Je viens de parcourir la fonction fournie par l'interface. Il ne peut qu'augmenter ou diminuer le nombre de fonctions détectées par le détecteur. De plus, je n'ai aucun problème avec les fonctionnalités détectées. Je voudrais juste un moyen d'ajuster leur taille afin qu'ils puissent être mieux utilisés dans la correspondance (augmenter la taille à 10 le fait, mais je n'ai pas d'argumentation (suffisante) concrète pour ce choix)
penelope