Die Berechnung der Skalierung, rotation und translation von Homography matrix
Ich versuche zu berechnen, Skalierung, rotation und translation zwischen zwei aufeinanderfolgenden Einzelbildern eines Videos. Also grundsätzlich habe ich abgestimmt Eckdaten und dann verwendet opencv-Funktion findHomography()
zur Berechnung der homography matrix.
homography = findHomography(feature1 , feature2 , CV_RANSAC); //feature1 and feature2 are matched keypoints
Meine Frage ist: Wie kann ich diese matrix zu berechnen, Skalierung, rotation und translation?.
Kann jemand mir die code oder Erklärung, wie es zu tun?
- das Schlüsselwort ist "homography Zersetzung". Anmutigen können Sie extrahieren Sie die Drehung mit einem QR-ZERLEGUNG, aber Sie sollten besser für google, dass...
- vielleicht die hier (oder links) helfen: stackoverflow.com/questions/15420693/...
- und dieses =) hal.archives-ouvertes.fr/docs/00/17/47/39/PDF/RR-6303.pdf
- Das ist ein Komplexes problem, aber diese Antwort erklärt es gut: stackoverflow.com/questions/7388893/... Sie sollten versuchen, zu erhalten ein tieferes Verständnis darüber, wie die Homography matrix funktioniert. Dadurch werden Sie auch lernen, die vor-und Nachteile. Sie sollten auch einen Blick in andere Arten verwandelt, die als affine Transformation und starre Transformation. Wenn Sie können Ihr problem lösen, Sie sind einfacher zu verwenden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
wenn Sie verwenden opencv 3.0, diese Zersetzung Methode verfügbar ist
http://docs.opencv.org/3.0-beta/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#decomposehomographymat
Zur Schätzung der Baum-dimensionale Transformation und der rotation, die durch eine homography, gibt es mehrere Ansätze. Einer von Ihnen liefert geschlossene Formeln für die ZERLEGUNG der homography, aber Sie sind sehr Komplex. Auch die Lösungen sind nie eindeutig.
Glücklicherweise OpenCV 3 bereits implementiert diese Zersetzung (decomposeHomographyMat). Gegeben eine homography und korrekt skaliert-Interna-matrix, die Funktion liefert einen Satz von vier möglichen Drehungen und übersetzungen.
Scheint die Frage zu sein, über die 2D-Parameter. Homography matrix erfasst perspektivische Verzerrung. Wenn die Anwendung nicht viel zu schaffen perspektivische Verzerrung, eine Annäherung an eine Reale Welt transformation affine transformation matrix (, verwendet nur die Skalierung, rotation, translation und keine Scheren/flipping). Der folgende link gibt eine Vorstellung über die ZERLEGUNG einer affinen transformation in die unterschiedlichen Parameter.
https://math.stackexchange.com/questions/612006/decomposing-an-affine-transformation
Die richtige Antwort ist die Verwendung homography, wie es definiert ist
dst = H ⋅ src
und erkunden, was es tut, um kleine Segmente rund um einen bestimmten Punkt.Übersetzung
Gegeben, einen einzigen Punkt, für die übersetzung tun
Rotation
Gegeben zwei Punkte p1 und p2
Nun einfach berechnen Sie den Winkel zwischen den Vektoren p1 p2 und p1 p2'.
Skala
Können Sie verwenden den gleichen trick, aber jetzt nur vergleichen der Längen: |p1 p2| und |p1 p2'|.
Um fair zu sein, verwenden Sie ein anderes segment orthogonal zu der ersten und der Durchschnitt das Ergebnis. Sie werden sehen, dass es keine Konstanten Skalierungsfaktor oder die übersetzung ein. Sie hängt von der
src
Lage.Gegeben Homography matrix
H
:Annahmen:
H_20 = H_21 = 0
und normalisiert aufH_22 = 1
zu erhalten 8 DOF.Die translation entlang der x-und y-Achsen sind direkt berechnet sich aus
H
:Den
2x2
sub-matrix in der linken oberen Ecke ist zerlegt, um zu berechnen, Scherung, Skalierung und rotation. Eine einfache und schnelle Zersetzung Methode erklärt hier.Hinweis: diese Methode setzt Voraus invertierbar matrix.
cv::find_homography()
ich komme nicht auf solche Werte, die an zwei aufeinanderfolgenden frames.