by Guest » 30 Dec 2024, 18:39
Nehmen wir an, ich habe eine bestimmte Anzahl n Kameras mit bekannten Eigenfunktionen. Jede Kamera ist synchronisiert und jede Kamera hat t Frames mit einem Kalibrierungsziel erkannt, das gedreht und bewegt wurde und von jeder Kamera gleichzeitig gesehen wurde.
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
aber ich habe Müllergebnisse erhalten. Ich verwende derzeit ein Setup mit n = 2 Kameras.
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 (
), und sie sollten theoretisch gleich sein – hier würde ich die Rotationsmatrizen mitteln, um dann schließlich extrinsische Werte zu erhalten. Hinweis: Ich kenne bereits die Eigenheiten jeder Kamera.
Edit 2: Ich glaube, ich habe es behoben, unten ist eine Visualisierung dessen, was ich meinte:

Nehmen wir an, ich habe eine bestimmte Anzahl n Kameras mit bekannten Eigenfunktionen. Jede Kamera ist synchronisiert und jede Kamera hat t Frames mit einem Kalibrierungsziel erkannt, das gedreht und bewegt wurde und von jeder Kamera gleichzeitig gesehen wurde.
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]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
[/code]
aber ich habe Müllergebnisse erhalten. Ich verwende derzeit ein Setup mit n = 2 Kameras.
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]cam_0 -> cam_k[/code]), und sie sollten theoretisch gleich sein – hier würde ich die Rotationsmatrizen mitteln, um dann schließlich extrinsische Werte zu erhalten. Hinweis: Ich kenne bereits die Eigenheiten jeder Kamera.
Edit 2: Ich glaube, ich habe es behoben, unten ist eine Visualisierung dessen, was ich meinte:
[img]https://i.sstatic.net/3KEIOGYl.png[/img]