Für jedes Frame habe ich welche objp, imgp, wobei imgp erkannte Punkte des Kalibrierungsziels sind. Ich verwende sie, um extrinsische Werte [R|t] zu berechnen (mit cv2.solvePnP).
Wie berechne ich alle diese Daten? Wenn ich das richtig verstehe, kann ich nicht einfach eine Quaternion-Mittelung und Übersetzungs-Mittelung auf den Rohergebnissen von cv2.solvePnP durchführen, da – wenn das Ziel gedreht und bewegt wird – der Bezugsrahmen anders sein wird.
Ich habe zuerst versucht, den Bezugsrahmen zu ändern, wie unten gezeigt:
Code: Select all
def get_extrinsics_fixed_to_global_reference(R_ref, t_ref, R_other, t_other):
# Get the extrinsics of the other camera in the reference camera's coordinate system
R = R_other @ R_ref.T
t = t_other - R @ t_ref
return R, t
Bearbeiten: Zur Verdeutlichung: Meine Idee bestand im Wesentlichen darin, die resultierenden Transformationen zwischen den Koordinatensystemen von cam_0 und cam_k für k > 0. Für jeden Satz von Frames (entsprechend einem auf eine bestimmte Weise geneigten Kalibrierungsziel) würde ich einen Satz dieser Transformationen erhalten (
Code: Select all
cam_0 -> cam_k
Edit 2: Ich glaube, ich habe es behoben, unten ist eine Visualisierung dessen, was ich meinte:
