Comment évaluer la similarité 2D transformation (linéaire conforme, de travail non réfléchissante de similarité) dans OpenCV?
Je suis en train de rechercher un objet spécifique dans les images de l'entrée par la correspondance de descripteurs SIFT et de trouver la matrice de transformation par RANSAC. L'objet ne peut être modifié en scène par la similitude de transformation dans l'espace 2D (mise à l'échelle, rotation, traduits), donc j'ai besoin d'estimer 2x2 matrice de transformation au lieu de 3x3 homographie de la matrice dans l'espace 3D. Comment puis-je réaliser cela dans OpenCV?
OriginalL'auteur lizarisk | 2013-02-12
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser estimateRigidTransform (je ne sais pas si c'est RANSAC, le code à http://code.opencv.org/projects/opencv/repository/revisions/2.4.4/entry/modules/video/src/lkpyramid.cpp dit RANSAC dans son commentaire), le troisième paramètre est réglé sur
false
afin d'obtenir la juste échelle+rotation+translation:compilé et testé avec OpenCV 2.4.4.
La sortie est:
Oui. la fonction n'a même pas donner de sortie quand il ya un grand nombre de valeurs aberrantes
OriginalL'auteur Alessandro Jacopson
Vous pouvez utiliser trouver une transformation affine entre le point fixe à l'aide d'opencv, c'est un peu plus général que le cas que vous décrivez (connu sous le nom de similarité transformer) où il décrit la tonte des transformations des formes.
Elle peut être réalisée à l'aide de la fonction
getAffineTransform(InputArray src, InputArray dst)
. Cela prend 2 ensembles de trois points et calcule une transformation affine entre eux.Oui, je pense que vous pourriez le faire vous-même. Les centres d'intérêt, ce que vous êtes en utilisant pour faire correspondre les descripteurs SIFT?
Je suis en train BFMatcher avec la norme L2 et de contre-vérification et FlannBasedMatcher.
essayez estimateAffine3D() fonction.
Bien que la méthode getAffineTransform() n'est pas assez robuste pour votre application, si elle est (plus que) assez rapide, vous pouvez obtenir un plus robuste algorithme. Par exemple, vous pouvez l'appeler avec plusieurs triplets de points. Chaque appel renvoie une matrice. L'attente est que la plupart des matrices sont semblables (à votre résultat attendu) avec quelques valeurs aberrantes. Vous pouvez calculer un élément-sage de la moyenne arithmétique pour une première plus robuste, estimation approximative. Vous pouvez utiliser cette estimation pour éliminer les valeurs aberrantes par calcul de la distance (min somme de signe de x carré) à votre moyenne et de prendre la (non-element-sage) médiane.
OriginalL'auteur Max Allan