Freigeben über


Verwenden der Kalibrierungsfunktionen für Azure Kinect

Mit den Kalibrierungsfunktionen können Punkte zwischen den Koordinatensystemen der einzelnen Sensoren im Azure Kinect-Gerät transformiert werden. In Anwendungen, in denen ganze Bilder konvertiert werden müssen, können die mit den Transformationsfunktionen verfügbaren beschleunigten Vorgänge genutzt werden.

Abrufen von Kalibrierungsdaten

Zum Ausführen von Transformationen zwischen Koordinatensystemen muss die Gerätekalibrierung abgerufen werden. Die Kalibrierungsdaten sind im Datentyp k4a_calibration_t gespeichert. Sie werden über die Funktion k4a_device_get_calibration() vom Gerät abgerufen. Die Kalibrierungsdaten sind nicht nur für jedes Gerät, sondern auch für den Betriebsmodus der Kameras spezifisch. Daher müssen für k4a_device_get_calibration() die Parameter depth_mode und color_resolution eingegeben werden.

Kompatibilität mit OpenCV

Die Kalibrierungsparameter sind mit OpenCV kompatibel. Weitere Informationen zu den einzelnen Kamerakalibrierungsparametern finden Sie auch in der Dokumentation zu OpenCV. Außerdem veranschaulicht das OpenCV-Kompatibilitätsbeispiel des SDK die Konvertierung zwischen dem Datentyp k4a_calibration_t und den entsprechenden OpenCV-Datenstrukturen.

Transformationsfunktionen für Koordinatensysteme

In der folgenden Abbildung sind die verschiedenen Koordinatensysteme von Azure Kinect sowie die Funktionen für die Konvertierung zwischen den Systemen dargestellt. Zur Vereinfachung der Abbildung sind die 3D-Koordinatensysteme des Gyroskops und des Beschleunigungsmessers nicht dargestellt.

Transformation in Koordinatensystemen

Hinweis zur Linsenverzerrung: 2D-Koordinaten beziehen sich immer auf das verzerrte Bild im SDK. Das Beispiel zum Aufheben der Verzerrung des SDK veranschaulicht die Korrektur verzerrter Bilder. Im Allgemeinen werden 3D-Punkte niemals durch eine Linsenverzerrung beeinträchtigt.

Konvertierung zwischen 3D-Koordinatensystemen

Die Funktion k4a_calibration_3d_to_3d() konvertiert einen 3D-Punkt des Quellkoordinatensystems unter Verwendung der extrinsischen Kalibrierung der Kamera in einen 3D-Punkt des Zielkoordinatensystems. Quelle und Ziel können auf eines der vier 3D-Koordinatensysteme festgelegt werden: Farbkamera, Tiefenkamera, Gyroskop oder Beschleunigungsmesser. Wenn Quelle und Ziel identisch sind, wird der unveränderte 3D-Eingabepunkt als Ausgabe zurückgegeben.

Konvertierung zwischen 2D- und 3D-Koordinatensystemen

Die Funktion k4a_calibration_3d_to_2d() konvertiert einen 3D-Punkt des Quellkoordinatensystems in eine 2D-Pixelkoordinate der Zielkamera. Diese Funktion wird häufig als Projektionsfunktion bezeichnet. Die Quelle kann auf ein beliebiges der vier 3D-Koordinatensysteme festgelegt werden, als Ziel muss jedoch die Tiefenkamera oder die Farbkamera festgelegt werden. Wenn sich Quelle und Ziel unterscheiden, wird der 3D-Eingabepunkt unter Verwendung von k4a_calibration_3d_to_3d() in das 3D-Koordinatensystem der Zielkamera konvertiert. Wenn der 3D-Punkt im Koordinatensystem der Zielkamera dargestellt wird, werden die entsprechenden 2D-Pixelkoordinaten unter Verwendung der intrinsischen Kalibrierung der Zielkamera berechnet. Wenn ein 3D-Punkt nicht mehr im sichtbaren Bereich der Zielkamera liegt, wird der gültige Wert auf „0“ festgelegt.

Die Funktion k4a_calibration_2d_to_3d() konvertiert eine 2D-Pixelkoordinate der Quellkamera in einen 3D-Punkt des Koordinatensystems der Zielkamera. Als Quelle muss die Farbkamera oder die Tiefenkamera festgelegt sein. Das Ziel kann auf ein beliebiges der vier 3D-Koordinatensysteme festgelegt werden. Zusätzlich zur 2D-Pixelkoordinate muss der Tiefenwert des Pixels (in Millimeter) im Bild der Quellkamera für die Funktion eingegeben werden. Eine Möglichkeit zum Ableiten des Tiefenwerts in der Geometrie der Farbkamera ist die Verwendung der Funktion k4a_transformation_depth_image_to_color_camera(). Die Funktion berechnet unter Verwendung der intrinsischen Kalibrierung der Quellkamera den 3D-Strahl, der vom Fokuspunkt der Quellkamera bis zur angegebenen Pixelkoordinate verläuft. Anschließend wird anhand des Tiefenwerts die genaue Position des 3D-Punkts auf diesem Strahl ermittelt. Dieser Vorgang wird häufig als Projektionsumkehrungsfunktion bezeichnet. Wenn sich Quell- und Zielkamera unterscheiden, transformiert die Funktion den 3D-Punkt über k4a_calibration_3d_to_3d() in das Koordinatensystem der Zielkamera. Wenn eine 2D-Pixelkoordinate nicht mehr im sichtbaren Bereich der Quellkamera liegt, wird der gültige Wert auf „0“ festgelegt.

Konvertierung zwischen 2D-Koordinatensystemen

Die Funktion k4a_calibration_2d_to_2d() konvertiert eine 2D-Pixelkoordinate der Quellkamera in eine 2D-Pixelkoordinate der Zielkamera. Quelle und Ziel müssen auf die Farbkamera oder Tiefenkamera festgelegt sein. Für die Funktion muss der Tiefenwert des Pixels (in Millimeter) im Bild der Quellkamera eingegeben werden. Eine Möglichkeit zum Ableiten des Tiefenwerts in der Geometrie der Farbkamera ist die Verwendung der Funktion k4a_transformation_depth_image_to_color_camera(). Diese Funktion ruft k4a_calibration_2d_to_3d() auf, um die Konvertierung in einen 3D-Punkt des Quellkamerasystems durchzuführen. Anschließend wird k4a_calibration_3d_to_2d() aufgerufen, um die Konvertierung in eine 2D-Pixelkoordinate des Zielkamerabilds durchzuführen. Der gültige Wert wird auf „0“ festgelegt, wenn k4a_calibration_2d_to_3d() oder k4a_calibration_3d_to_2d() ein ungültiges Ergebnis zurückgibt.

Nächste Schritte

Nachdem Sie sich mit Kamerakalibrierungen vertraut gemacht haben, können Sie sich das folgende Thema ansehen:

Außerdem können Sie sich mit folgendem Thema beschäftigen:

Koordinatensysteme