J'essaie de calculer l'échelle, la rotation et la translation entre deux images consécutives d'une vidéo. Donc, fondamentalement, j'ai apparié les points clés puis utilisé la fonction d'opencv findHomography()
pour calculer la matrice d'homographie.homography = findHomography(feature1 , feature2 , CV_RANSAC); //feature1 and feature2 are matched keypoints
Ma question est la suivante: comment utiliser cette matrice pour calculer l’échelle, la rotation et la translation?.
Quelqu'un peut-il me fournir le code ou une explication sur la manière de procéder?
si vous pouvez utiliser opencv 3.0, cette méthode de décomposition est disponible http://docs.opencv.org/3.0-beta/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#decomposehomographymat
La bonne réponse est d'utiliser l'homographie telle qu'elle est définie par dst = H. src et explorer ce qu’il fait des petits segments autour d’un point particulier. Pour la traduction, sélectionnez un seul point: Translation = dst-H .src Pour la rotation, explorez les deux points p1 et p2. p1 '= H. p1, p2 '= H. p2. Calculons maintenant l'angle entre les vecteurs p1 p2 et p1'p2 '. Pour l'échelle, vous pouvez utiliser le même truc, mais comparez maintenant la longueur de | p1 p2 | et | p1'p2 '|. Pour être tarifé, utilisez un autre segment orthogonal au premier et calculez la moyenne du résultat. Vous verrez qu'il n'y a pas de facteur d'échelle constant ni de facteur de translation. Ils dépendront de l'emplacement de la src.
Supposons que les première et deuxième cellules de la troisième ligne sont 0.
La troisième colonne de la matrice contient la traduction en X, la traduction en Y et 1, respectivement.
Quant à la partie 2x2 en haut à gauche restante de la matrice d’homographie (qui contient le cisaillement, la mise à l’échelle et la rotation), elle peut être décomposée selon différentes méthodes. Un exemple simple et rapide est expliqué ici (cette méthode suppose une matrice inversible): https://math.stackexchange.com/questions/78137/decomposition-of-a-nonsquare-affine-matrix
La question semble concerner les paramètres 2D. La matrice d'homographie capture la distorsion de la perspective. Si l'application ne crée pas beaucoup de distorsion de perspective, on peut approcher une transformation du monde réel en utilisant une matrice de transformation affine (qui utilise uniquement l'échelle, la rotation, la translation et aucun cisaillement/retournement). Le lien suivant vous donnera une idée de la décomposition d’une transformation affine en différents paramètres.
https://math.stackexchange.com/questions/612006/decomposing-an-affine-transformation
Pour estimer une transformation et une rotation tridimensionnelles induites par une homographie, il existe plusieurs approches. L'un d'eux fournit des formules fermées pour décomposer l'homographie, mais elles sont très complexes. En outre, les solutions ne sont jamais uniques.
Heureusement, OpenCV 3 implémente déjà cette décomposition ( decomposeHomographyMat ). À partir d'une homographie et d'une matrice intrinsèque correctement mise à l'échelle, la fonction fournit un ensemble de quatre rotations et traductions possibles.