Kameraschätzung (OpenCV PnP)

Ich versuche mit meiner Webcam eine globale Posenschätzung aus einem Bild von vier Referenzpunkten mit bekannten globalen Positionen zu erhalten.

Ich habe viele Stapelwechselfragen und einige Papiere geprüft und kann anscheinend keine richtige Lösung finden. Die Positionsnummern, die ich bekomme, sind wiederholbar, aber in keiner Weise linear proportional zur Kamerabewegung. Zu Ihrer Information Ich verwende C ++ OpenCV 2.1.

Auf diesem Link ist abgebildet meine Koordinatensysteme und die unten verwendeten Testdaten.

% Input to solvePnP():
imagePoints =     [ 481, 831; % [x, y] format
                    520, 504;
                   1114, 828;
                   1106, 507]
objectPoints = [0.11, 1.15, 0; % [x, y, z] format
                0.11, 1.37, 0; 
                0.40, 1.15, 0;
                0.40, 1.37, 0]

% camera intrinsics for Logitech C910
cameraMat = [1913.71011, 0.00000,    1311.03556;
             0.00000,    1909.60756, 953.81594;
             0.00000,    0.00000,    1.00000]
distCoeffs = [0, 0, 0, 0, 0]

% output of solvePnP():
tVec = [-0.3515;
         0.8928; 
         0.1997]

rVec = [2.5279;
       -0.09793;
        0.2050]
% using Rodrigues to convert back to rotation matrix:

rMat = [0.9853, -0.1159,  0.1248;
       -0.0242, -0.8206, -0.5708;
        0.1686,  0.5594, -0.8114]

Bisher,Kann jemand etwas falsch mit diesen Zahlen sehen? Ich würde es begrüßen, wenn jemand sie zum Beispiel in MatLAB einchecken würde (der obige Code ist M-Datei-freundlich).

Von diesem Punkt an bin ich mir nicht sicher, wie ich die globale Pose von rMat und tVec erhalten kann. Nach dem, was ich gelesen habediese Frage, um die Pose von rMat und tVec zu bekommen, ist einfach:

position = transpose(rMat) * tVec   % matrix multiplication

Allerdings vermute ich aus anderen Quellen, dass ich gelesen habe, dass es nicht so einfach ist.

Was muss ich tun, um die Position der Kamera in realen Koordinaten zu ermitteln? Da ich mir nicht sicher bin, ob es sich um ein Implementierungsproblem handelt (jedoch höchstwahrscheinlich um ein theoretisches Problem), möchte ich, dass jemand, der die solvePnP-Funktion erfolgreich in OpenCV verwendet hat, diese Frage beantwortet, obwohl auch Ideen willkommen sind!

Vielen Dank für Ihre Zeit.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage