Wie berechnet man die Kamerapose aus der Homografiematrix?


13

Angenommen, ich verwende nur eine kalibrierte Kamera. Von dieser Kamera, erhalte ich Bilder A und B. Ich kenne die Homografie zwischen A und B, berechnet durch OpenCV ‚s findHomography () .

Ich kenne die Pose (Rotationsmatrix R und Translationsvektor t) von Bild A und benötige die Pose von Bild B. Sobald ich sie erhalte, kann ich wahrscheinlich jede weitere Pose der folgenden Bilder berechnen.

Kennen Sie eine Implementierung von Computing B's Pose? Ich habe mehrere Artikel im Internet gefunden, aber ich konnte keine leicht umsetzbare Lösung finden ...


Ich bin mir nicht sicher, wie ich Ihren Code verwenden soll. Ich verwende OpenCV, um die Homographie abzurufen, aber wenn ich diese Homographie durch den Algorithmus sende, gibt es diese immer zurück. cameraPose [1, 0, 0, 0; 0, 1, 0, 0; 0, 0, 1, 0]
LeRoss

Antworten:


7

Auch wenn meine Antwort für Sie zu spät kommt, finden das andere vielleicht nützlich. Ich habe die Codes für eine openCV-Pose von Homography. Ich fand die Methode auf dieser wirklich nützlichen Website, euclideanspace .

void cameraPoseFromHomography(const Mat& H, Mat& pose)
{
    pose = Mat::eye(3, 4, CV_64FC1); //3x4 matrix
    float norm1 = (float)norm(H.col(0)); 
    float norm2 = (float)norm(H.col(1));
    float tnorm = (norm1 + norm2) / 2.0f;

    Mat v1 = H.col(0);
    Mat v2 = pose.col(0);

    cv::normalize(v1, v2); // Normalize the rotation

    v1 = H.col(1);
    v2 = pose.col(1);

    cv::normalize(v1, v2);

    v1 = pose.col(0);
    v2 = pose.col(1);

    Mat v3 = v1.cross(v2);  //Computes the cross-product of v1 and v2
    Mat c2 = pose.col(2);
    v3.copyTo(c2);      

    pose.col(3) = H.col(2) / tnorm; //vector t [R|t]
}

////


Ich habe Ihre Funktion in meinem Code verwendet. Die auf diese Weise berechnete Positionsmatrix ist immer [1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 0]. Hast du eine Erklärung?
Muhammet Ali Asan

Benutzt du die Pose von A? Es scheint, dass Sie nur die Eingabe H
Guig


0

Sie können die in Opencv 3.0+ implementierte Homografie-Zerlegungsmethode verwenden

decomposeHomographyMat

  • Die Opencv-Funktion gibt eine Reihe möglicher Rotationen, Kameranormalen und Translationsmatrizen zurück.
  • Sie müssen die richtige Einstellung auswählen, indem Sie die Kameranormalen mit den Kameranormalen der Kamera vergleichen, als das erste Bild aufgenommen wurde
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.