KlassenKlassenKlassenKlassen | | | | Operatoren

vector_to_poseT_vector_to_poseVectorToPosevector_to_poseVectorToPoseVectorToPose (Operator)

Name

vector_to_poseT_vector_to_poseVectorToPosevector_to_poseVectorToPoseVectorToPose — Berechnen einer absoluten Pose aus Punktkorrespondenzen von Welt- zu Bildkoordinaten.

Signatur

vector_to_pose( : : WorldX, WorldY, WorldZ, ImageRow, ImageColumn, CameraParam, Method, QualityType : Pose, Quality)

Herror T_vector_to_pose(const Htuple WorldX, const Htuple WorldY, const Htuple WorldZ, const Htuple ImageRow, const Htuple ImageColumn, const Htuple CameraParam, const Htuple Method, const Htuple QualityType, Htuple* Pose, Htuple* Quality)

Herror vector_to_pose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HTuple& CameraParam, const HTuple& Method, const HTuple& QualityType, HTuple* Pose, HTuple* Quality)

void VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HTuple& CameraParam, const HTuple& Method, const HTuple& QualityType, HTuple* Pose, HTuple* Quality)

static HPose HImage::VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HCamPar& CameraParam, const HString& Method, const HTuple& QualityType, HTuple* Quality)

static HPose HImage::VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HCamPar& CameraParam, const HString& Method, const HString& QualityType, double* Quality)

static HPose HImage::VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HCamPar& CameraParam, const char* Method, const char* QualityType, double* Quality)

HPose HCamPar::VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HString& Method, const HTuple& QualityType, HTuple* Quality) const

HPose HCamPar::VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HString& Method, const HString& QualityType, double* Quality) const

HPose HCamPar::VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const char* Method, const char* QualityType, double* Quality) const

HTuple HPose::VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HCamPar& CameraParam, const HString& Method, const HTuple& QualityType)

double HPose::VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HCamPar& CameraParam, const HString& Method, const HString& QualityType)

double HPose::VectorToPose(const HTuple& WorldX, const HTuple& WorldY, const HTuple& WorldZ, const HTuple& ImageRow, const HTuple& ImageColumn, const HCamPar& CameraParam, const char* Method, const char* QualityType)

void HOperatorSetX.VectorToPose(
[in] VARIANT WorldX, [in] VARIANT WorldY, [in] VARIANT WorldZ, [in] VARIANT ImageRow, [in] VARIANT ImageColumn, [in] VARIANT CameraParam, [in] VARIANT Method, [in] VARIANT QualityType, [out] VARIANT* Pose, [out] VARIANT* Quality)

VARIANT HImageX.VectorToPose(
[in] VARIANT WorldX, [in] VARIANT WorldY, [in] VARIANT WorldZ, [in] VARIANT ImageRow, [in] VARIANT ImageColumn, [in] VARIANT CameraParam, [in] BSTR Method, [in] VARIANT QualityType, [out] VARIANT* Quality)

VARIANT HCamParX.VectorToPose(
[in] VARIANT WorldX, [in] VARIANT WorldY, [in] VARIANT WorldZ, [in] VARIANT ImageRow, [in] VARIANT ImageColumn, [in] VARIANT CameraParam, [in] BSTR Method, [in] VARIANT QualityType, [out] VARIANT* Quality)

VARIANT HPoseX.VectorToPose(
[in] VARIANT WorldX, [in] VARIANT WorldY, [in] VARIANT WorldZ, [in] VARIANT ImageRow, [in] VARIANT ImageColumn, [in] VARIANT CameraParam, [in] BSTR Method, [in] VARIANT QualityType, [out] VARIANT* Quality)

static void HOperatorSet.VectorToPose(HTuple worldX, HTuple worldY, HTuple worldZ, HTuple imageRow, HTuple imageColumn, HTuple cameraParam, HTuple method, HTuple qualityType, out HTuple pose, out HTuple quality)

static HPose HImage.VectorToPose(HTuple worldX, HTuple worldY, HTuple worldZ, HTuple imageRow, HTuple imageColumn, HCamPar cameraParam, string method, HTuple qualityType, out HTuple quality)

static HPose HImage.VectorToPose(HTuple worldX, HTuple worldY, HTuple worldZ, HTuple imageRow, HTuple imageColumn, HCamPar cameraParam, string method, string qualityType, out double quality)

HPose HCamPar.VectorToPose(HTuple worldX, HTuple worldY, HTuple worldZ, HTuple imageRow, HTuple imageColumn, string method, HTuple qualityType, out HTuple quality)

HPose HCamPar.VectorToPose(HTuple worldX, HTuple worldY, HTuple worldZ, HTuple imageRow, HTuple imageColumn, string method, string qualityType, out double quality)

HTuple HPose.VectorToPose(HTuple worldX, HTuple worldY, HTuple worldZ, HTuple imageRow, HTuple imageColumn, HCamPar cameraParam, string method, HTuple qualityType)

double HPose.VectorToPose(HTuple worldX, HTuple worldY, HTuple worldZ, HTuple imageRow, HTuple imageColumn, HCamPar cameraParam, string method, string qualityType)

Beschreibung

Der Operator vector_to_posevector_to_poseVectorToPosevector_to_poseVectorToPoseVectorToPose berechnet eine Pose aus mindestens drei oder vier (abhängig von MethodMethodMethodMethodMethodmethod) Punktkorrespondenzen von 3D-Weltkoordinaten (WorldXWorldXWorldXWorldXWorldXworldX, WorldYWorldYWorldYWorldYWorldYworldY, WorldZWorldZWorldZWorldZWorldZworldZ), gegeben in Metern, und 2D-Bildkoordinaten (ImageRowImageRowImageRowImageRowImageRowimageRow, ImageColumnImageColumnImageColumnImageColumnImageColumnimageColumn), gegeben in Pixeln.

Parameter Method

Je nach Wahl des Parameters MethodMethodMethodMethodMethodmethod kann gewählt werden, welcher Algorithmus für die Berechnung der Pose verwendet werden soll.

Methoden, die für Lochkameras unterstützt werden:

MethodMethodMethodMethodMethodmethod Wann verwenden Minimale Anzahl von Punktkorrespondenzen
'analytic'"analytic""analytic""analytic""analytic""analytic" [1] Standardmethode für allgemeine Verwendung 4
'iterative'"iterative""iterative""iterative""iterative""iterative" [2] Falls nur drei oder vier Punktkorrespondenzen verwendet werden oder falls die Weltpunkte fast planar sind 3
'planar_analytic'"planar_analytic""planar_analytic""planar_analytic""planar_analytic""planar_analytic" [4] Falls die Weltpunkte in einer horizontalen Ebene liegen ( ) 4
Die Zahlen in den eckigen Klammern in der oben stehenden Tabelle verweisen auf die Veröffentlichungen, auf denen die Implementierungen der entsprechenden Methoden basieren.

Methoden, die für telezentrische Kameras unterstützt werden:

MethodMethodMethodMethodMethodmethod Wann verwenden Minimale Anzahl von Punktkorrespondenzen
'telecentric'"telecentric""telecentric""telecentric""telecentric""telecentric" [3] Standardmethode für allgemeine Verwendung 4
'telecentric_robust'"telecentric_robust""telecentric_robust""telecentric_robust""telecentric_robust""telecentric_robust" [3] Für sehr schlecht gestellte Punktkonfigurationen, falls QualityQualityQualityQualityQualityquality einen unerwartet hohen Wert besitzt 4
'telecentric_planar'"telecentric_planar""telecentric_planar""telecentric_planar""telecentric_planar""telecentric_planar" [3] Falls die Weltpunkte in einer horizontalen Ebene liegen ( ) 3
'telecentric_planar_robust'"telecentric_planar_robust""telecentric_planar_robust""telecentric_planar_robust""telecentric_planar_robust""telecentric_planar_robust" [3] Für sehr schlecht gestellte Punktkonfigurationen, in denen die Weltpunkte in einer horizontalen Ebene liegen ( ) und für die QualityQualityQualityQualityQualityquality einen unerwartet hohen Wert besitzt 3
Die Zahlen in den eckigen Klammern in der oben stehenden Tabelle verweisen auf die Veröffentlichungen, auf denen die Implementierungen der entsprechenden Methoden basieren.

Parameter CameraParam und Quality

Zur Lösung des Problems benötigen alle Algorithmen die internen Kameraparameter aus der Kamerakalibrierung, die in CameraParamCameraParamCameraParamCameraParamCameraParamcameraParam übergeben werden.

Zusätzlich kann der Benutzer durch QualityTypeQualityTypeQualityTypeQualityTypeQualityTypequalityType eine oder mehrere Qualitätsmaß-Bewertungen der Pose bestimmen, die mitberechnet werden. Die resultierenden Qualitätsmaße werden in QualityQualityQualityQualityQualityquality aneinandergehängt zurückgeliefert. Derzeit wird nur 'error'"error""error""error""error""error" unterstützt. Es entspricht dem quadratischen Mittelwert der Fehler in Pixeln der projizierten 3D-Weltkoordinaten.

Allgemeine Anmerkungen

Falls eine Methode für planare Weltpunkte gewählt wird, wird angenommen, dass alle Weltpunkte in der Ebene liegen. Daher muss für planare Weltpunkte die z-Komponente der Weltpunkte nicht gesetzt werden (WorldZWorldZWorldZWorldZWorldZworldZ = []), da nur 2D-Korrespondenzen verwendet werden.

Für telezentrische Kameras kann offensichtlicherweise die Translation in z-Richtung nicht bestimmt werden. Sie wird in PosePosePosePosePosepose auf 0 gesetzt.

Für planare Weltpunkte und telezentrische Kameras existieren immer zwei mögliche äquivalente Posen. Diese Mehrdeutigkeit kann nur durch Zusatzwissen aufgelöst werden. vector_to_posevector_to_poseVectorToPosevector_to_poseVectorToPoseVectorToPose gibt in diesem Fall eine beliebige der zwei möglichen Lösungen zurück. Die andere Lösung kann leicht dadurch berechnet werden, dass die Werte von und in PosePosePosePosePosepose durch und ersetzt werden.

Achtung

Die Methode 'analytic'"analytic""analytic""analytic""analytic""analytic" erlaubt maximal 32767 Punktkorrespondenzen als Eingabe.

Parallelisierung

Parameter

WorldXWorldXWorldXWorldXWorldXworldX (input_control)  number-array HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

X-Koordinaten der Weltpunkte.

Parameteranzahl: WorldX >= 4

WorldYWorldYWorldYWorldYWorldYworldY (input_control)  number-array HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Y-Koordinaten der Weltpunkte.

Parameteranzahl: WorldY == WorldX

WorldZWorldZWorldZWorldZWorldZworldZ (input_control)  number-array HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Z-Koordinaten der Weltpunkte.

Parameteranzahl: WorldZ == WorldX || WorldZ == 0

ImageRowImageRowImageRowImageRowImageRowimageRow (input_control)  number-array HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Zeilen-Koordinaten der Bildpunkte.

Parameteranzahl: ImageRow == WorldX

ImageColumnImageColumnImageColumnImageColumnImageColumnimageColumn (input_control)  number-array HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Spalten-Koordinaten der Bildpunkte.

Parameteranzahl: ImageColumn == WorldX

CameraParamCameraParamCameraParamCameraParamCameraParamcameraParam (input_control)  campar HCamPar, HTupleHTupleHTupleHCamParX, VARIANTHtuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*) (double / Hlong / BSTR) (double / Hlong / char*)

Die internen Kameraparameter aus der Kamerakalibrierung.

MethodMethodMethodMethodMethodmethod (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Art des Algorithmus

Defaultwert: 'iterative' "iterative" "iterative" "iterative" "iterative" "iterative"

Werteliste: 'analytic'"analytic""analytic""analytic""analytic""analytic", 'iterative'"iterative""iterative""iterative""iterative""iterative", 'planar_analytic'"planar_analytic""planar_analytic""planar_analytic""planar_analytic""planar_analytic", 'telecentric'"telecentric""telecentric""telecentric""telecentric""telecentric", 'telecentric_planar'"telecentric_planar""telecentric_planar""telecentric_planar""telecentric_planar""telecentric_planar", 'telecentric_planar_robust'"telecentric_planar_robust""telecentric_planar_robust""telecentric_planar_robust""telecentric_planar_robust""telecentric_planar_robust", 'telecentric_robust'"telecentric_robust""telecentric_robust""telecentric_robust""telecentric_robust""telecentric_robust"

QualityTypeQualityTypeQualityTypeQualityTypeQualityTypequalityType (input_control)  string(-array) HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Art des mit Quality zurückgegebenen Qualitätsmaßes.

Defaultwert: 'error' "error" "error" "error" "error" "error"

Werteliste: 'error'"error""error""error""error""error"

PosePosePosePosePosepose (output_control)  pose HPose, HTupleHTupleHTupleHPoseX, VARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Pose.

QualityQualityQualityQualityQualityquality (output_control)  number(-array) HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)

Posequalitätsmaß.

Ergebnis

Sind die Parameterwerte korrekt, dann liefert vector_to_posevector_to_poseVectorToPosevector_to_poseVectorToPoseVectorToPose den Wert 2 (H_MSG_TRUE).

Siehe auch

proj_hom_mat2d_to_poseproj_hom_mat2d_to_poseProjHomMat2dToPoseproj_hom_mat2d_to_poseProjHomMat2dToPoseProjHomMat2dToPose, vector_to_rel_posevector_to_rel_poseVectorToRelPosevector_to_rel_poseVectorToRelPoseVectorToRelPose, camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration

Literatur

[1] Francesc Moreno-Noguer, Vincent Lepetit, and Pascal Fua: „Accurate Non-Iterative O(n) Solution to the PnP Problem“; Eleventh IEEE International Conference on Computer Vision, 2007.
[2] Gerald Schweighofer, and Axel Pinz: „Robust Pose Estimation from a Planar Target“; Transactions on Pattern Analysis and Machine Intelligence (PAMI), 28(12):2024-2030, 2006.
[3] Carsten Steger: „Algorithms for the Orthographic-n-Point Problem“; Journal of Mathematical Imaging and Vision, vol. 60, no. 2, pp. 246-266, 2018.
[4] Zhengyou Zhang: „A flexible new technique for camera calibration.“; Transactions on Pattern Analysis and Machine Intelligence (PAMI), 22(11):1330-1334, 2000.

Modul

Calibration


KlassenKlassenKlassenKlassen | | | | Operatoren