vector_to_rel_poseT_vector_to_rel_poseVectorToRelPoseVectorToRelPose (Operator)

Name

vector_to_rel_poseT_vector_to_rel_poseVectorToRelPoseVectorToRelPose — Bestimmung der relativen Orientierung zweier Kameras unter Verwendung vorgegebener Punktkorrespondenzen und bekannter Kameraparameter sowie Rekonstruktion der 3D Raumpunkte.

Signatur

vector_to_rel_pose( : : Rows1, Cols1, Rows2, Cols2, CovRR1, CovRC1, CovCC1, CovRR2, CovRC2, CovCC2, CamPar1, CamPar2, Method : RelPose, CovRelPose, Error, X, Y, Z, CovXYZ)

Herror T_vector_to_rel_pose(const Htuple Rows1, const Htuple Cols1, const Htuple Rows2, const Htuple Cols2, const Htuple CovRR1, const Htuple CovRC1, const Htuple CovCC1, const Htuple CovRR2, const Htuple CovRC2, const Htuple CovCC2, const Htuple CamPar1, const Htuple CamPar2, const Htuple Method, Htuple* RelPose, Htuple* CovRelPose, Htuple* Error, Htuple* X, Htuple* Y, Htuple* Z, Htuple* CovXYZ)

void VectorToRelPose(const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const HTuple& CovRR1, const HTuple& CovRC1, const HTuple& CovCC1, const HTuple& CovRR2, const HTuple& CovRC2, const HTuple& CovCC2, const HTuple& CamPar1, const HTuple& CamPar2, const HTuple& Method, HTuple* RelPose, HTuple* CovRelPose, HTuple* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* CovXYZ)

HPose HCamPar::VectorToRelPose(const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const HTuple& CovRR1, const HTuple& CovRC1, const HTuple& CovCC1, const HTuple& CovRR2, const HTuple& CovRC2, const HTuple& CovCC2, const HCamPar& CamPar2, const HString& Method, HTuple* CovRelPose, HTuple* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* CovXYZ) const

HPose HCamPar::VectorToRelPose(const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const HTuple& CovRR1, const HTuple& CovRC1, const HTuple& CovCC1, const HTuple& CovRR2, const HTuple& CovRC2, const HTuple& CovCC2, const HCamPar& CamPar2, const HString& Method, HTuple* CovRelPose, double* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* CovXYZ) const

HPose HCamPar::VectorToRelPose(const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const HTuple& CovRR1, const HTuple& CovRC1, const HTuple& CovCC1, const HTuple& CovRR2, const HTuple& CovRC2, const HTuple& CovCC2, const HCamPar& CamPar2, const char* Method, HTuple* CovRelPose, double* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* CovXYZ) const

HPose HCamPar::VectorToRelPose(const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const HTuple& CovRR1, const HTuple& CovRC1, const HTuple& CovCC1, const HTuple& CovRR2, const HTuple& CovRC2, const HTuple& CovCC2, const HCamPar& CamPar2, const wchar_t* Method, HTuple* CovRelPose, double* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* CovXYZ) const   (Nur Windows)

HTuple HPose::VectorToRelPose(const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const HTuple& CovRR1, const HTuple& CovRC1, const HTuple& CovCC1, const HTuple& CovRR2, const HTuple& CovRC2, const HTuple& CovCC2, const HCamPar& CamPar1, const HCamPar& CamPar2, const HString& Method, HTuple* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* CovXYZ)

HTuple HPose::VectorToRelPose(const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const HTuple& CovRR1, const HTuple& CovRC1, const HTuple& CovCC1, const HTuple& CovRR2, const HTuple& CovRC2, const HTuple& CovCC2, const HCamPar& CamPar1, const HCamPar& CamPar2, const HString& Method, double* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* CovXYZ)

HTuple HPose::VectorToRelPose(const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const HTuple& CovRR1, const HTuple& CovRC1, const HTuple& CovCC1, const HTuple& CovRR2, const HTuple& CovRC2, const HTuple& CovCC2, const HCamPar& CamPar1, const HCamPar& CamPar2, const char* Method, double* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* CovXYZ)

HTuple HPose::VectorToRelPose(const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const HTuple& CovRR1, const HTuple& CovRC1, const HTuple& CovCC1, const HTuple& CovRR2, const HTuple& CovRC2, const HTuple& CovCC2, const HCamPar& CamPar1, const HCamPar& CamPar2, const wchar_t* Method, double* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* CovXYZ)   (Nur Windows)

static void HOperatorSet.VectorToRelPose(HTuple rows1, HTuple cols1, HTuple rows2, HTuple cols2, HTuple covRR1, HTuple covRC1, HTuple covCC1, HTuple covRR2, HTuple covRC2, HTuple covCC2, HTuple camPar1, HTuple camPar2, HTuple method, out HTuple relPose, out HTuple covRelPose, out HTuple error, out HTuple x, out HTuple y, out HTuple z, out HTuple covXYZ)

HPose HCamPar.VectorToRelPose(HTuple rows1, HTuple cols1, HTuple rows2, HTuple cols2, HTuple covRR1, HTuple covRC1, HTuple covCC1, HTuple covRR2, HTuple covRC2, HTuple covCC2, HCamPar camPar2, string method, out HTuple covRelPose, out HTuple error, out HTuple x, out HTuple y, out HTuple z, out HTuple covXYZ)

HPose HCamPar.VectorToRelPose(HTuple rows1, HTuple cols1, HTuple rows2, HTuple cols2, HTuple covRR1, HTuple covRC1, HTuple covCC1, HTuple covRR2, HTuple covRC2, HTuple covCC2, HCamPar camPar2, string method, out HTuple covRelPose, out double error, out HTuple x, out HTuple y, out HTuple z, out HTuple covXYZ)

HTuple HPose.VectorToRelPose(HTuple rows1, HTuple cols1, HTuple rows2, HTuple cols2, HTuple covRR1, HTuple covRC1, HTuple covCC1, HTuple covRR2, HTuple covRC2, HTuple covCC2, HCamPar camPar1, HCamPar camPar2, string method, out HTuple error, out HTuple x, out HTuple y, out HTuple z, out HTuple covXYZ)

HTuple HPose.VectorToRelPose(HTuple rows1, HTuple cols1, HTuple rows2, HTuple cols2, HTuple covRR1, HTuple covRC1, HTuple covCC1, HTuple covRR2, HTuple covRC2, HTuple covCC2, HCamPar camPar1, HCamPar camPar2, string method, out double error, out HTuple x, out HTuple y, out HTuple z, out HTuple covXYZ)

Beschreibung

vector_to_rel_posevector_to_rel_poseVectorToRelPoseVectorToRelPoseVectorToRelPose ermittelt aus im allgemeinen mindestens sechs vorgegebenen Punktkorrespondenzen eines Stereobildpaares die relative Orientierung der beiden Kameras zueinander. RelPoseRelPoseRelPoseRelPoserelPose gibt die Orientierung der Kamera 1 relative zur Kamera 2 an (Siehe create_posecreate_poseCreatePoseCreatePoseCreatePose für weitere Information über die Beschreibung von Orientierungen.). Dies steht in Übereinstimmung mit der expliziten Kalibrierung einer Stereokonfiguration mit dem Operator calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras. Sei R,t die Rotation beziehungsweise Translation der relativen Orientierung. Die Essential-Matrix E ist dann durch definiert, wobei eine 3x3 schiefsymmetrische Matrix ist, welche das Kreuzprodukt mit dem Vektor t beschreibt. Die gesuchte Orientierung kann mittels der Epipolar-Gleichungen bestimmt werden:

Zu beachten ist, dass die Essential-Matrix eine homogene Größe ist, d.h. sie ist bis auf einen Skalierungsfaktor bestimmt. Somit kann der Translationsvektor der relativen Orientierung auch nur bis auf eine Skalierung berechnet werden. Der Operator wird diesen Vektor auf die Länge eins normiert berechnen. Als Konsequenz ergibt sich, dass die Rekonstruktion der betrachteten Szene, hier in Form der Punkte gegeben durch deren 3D Koordinaten (XXXXx,YYYYy,ZZZZz), auch nur bis auf einen globalen Skalierungsfaktor durchgeführt werden kann. Sollen die absoluten 3D Koordinaten der Szenenpunkte rekonstruiert werden, so ist es notwendig in beiden Bildern einen bekannten Maßstab zu sehen. In der Praxis kann dieser Maßstab z.B. durch den Abstand zweier beliebiger Punkte gegeben sein.

Der Operator vector_to_rel_posevector_to_rel_poseVectorToRelPoseVectorToRelPoseVectorToRelPose ist für ein nichtlineares Kameramodell konzipiert und beschreibt somit auch radiale Linsenverzeichnungen. Dies steht im Gegensatz zum Operator vector_to_essential_matrixvector_to_essential_matrixVectorToEssentialMatrixVectorToEssentialMatrixVectorToEssentialMatrix, welcher nur Geraden erhaltende, d.h. lineare, Kameras beschreibt. Kameraparameter werden mit den Argumenten CamPar1CamPar1CamPar1CamPar1camPar1 und CamPar2CamPar2CamPar2CamPar2camPar2 übergeben. Die 3D Richtungsvektoren und werden aus den Punktkoordinaten (Rows1Rows1Rows1Rows1rows1,Cols1Cols1Cols1Cols1cols1) und (Rows2Rows2Rows2Rows2rows2,Cols2Cols2Cols2Cols2cols2) durch Invertierung der Kameraprojektion berechnet (siehe Kalibrierung).

Der Parameter MethodMethodMethodMethodmethod gibt an, ob die Kameras sich in einer besonderen relativen Orientierung zueinander befinden, und bestimmt auch das Berechnungsverfahren. Für 'normalized_dlt'"normalized_dlt""normalized_dlt""normalized_dlt""normalized_dlt" und 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard" kann die relative Lage der Kameras zueinander beliebig sein. Für 'trans_normalized_dlt'"trans_normalized_dlt""trans_normalized_dlt""trans_normalized_dlt""trans_normalized_dlt" und 'trans_gold_standard'"trans_gold_standard""trans_gold_standard""trans_gold_standard""trans_gold_standard" ist die relative Lage eine reine Translation. In diesem speziellen Fall ist die minimale Anzahl an notwendigen Punktkorrespondenzen nicht sechs, sondern nur zwei.

Wird 'normalized_dlt'"normalized_dlt""normalized_dlt""normalized_dlt""normalized_dlt" oder 'trans_normalized_dlt'"trans_normalized_dlt""trans_normalized_dlt""trans_normalized_dlt""trans_normalized_dlt" gewählt, so ist das Berechnungsverfahren ein lineares Verfahren. Wird 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard" oder 'trans_gold_standard'"trans_gold_standard""trans_gold_standard""trans_gold_standard""trans_gold_standard" gewählt, so ist das Berechnungsverfahren im statistischen Sinne optimal. Beide Verfahren liefern die Koordinaten (XXXXx,YYYYy,ZZZZz) der rekonstruierten Raumpunkte. Die optimalen Verfahren berechnen zusätzlich die 3x3 Kovarianzmatrizen CovXYZCovXYZCovXYZCovXYZcovXYZ der Raumpunkte. Ist n die Anzahl der Korrespondenzen, so werden diese Kovarianzen in einem 9xn Tupel aneinandergehängt. Weiterhin geben die optimalen Verfahren auch die Kovarianz der relativen Lage CovRelPoseCovRelPoseCovRelPoseCovRelPosecovRelPose an, welche eine 6x6 Matrix ist.

Falls die Bildpunkte mit einem Operator wie points_foerstnerpoints_foerstnerPointsFoerstnerPointsFoerstnerPointsFoerstner, der die Kovarianzmatrix für jeden Punkt zurückliefert, extrahiert wurden, kann dies in der Berechnung berücksichtigt werden, indem die Kovarianzen in CovRR1CovRR1CovRR1CovRR1covRR1, CovRC1CovRC1CovRC1CovRC1covRC1, CovCC1CovCC1CovCC1CovCC1covCC1 für die Punkte des ersten Bildes und in CovRR2CovRR2CovRR2CovRR2covRR2, CovRC2CovRC2CovRC2CovRC2covRC2, CovCC2CovCC2CovCC2CovCC2covCC2 für die Punkte des zweiten Bildes übergeben werden. Die Kovarianzmatrizen sind symmetrische 2x2 Matrizen. CovRR1CovRR1CovRR1CovRR1covRR1/CovRR2CovRR2CovRR2CovRR2covRR2 und CovCC1CovCC1CovCC1CovCC1covCC1/CovCC2CovCC2CovCC2CovCC2covCC2 sind dabei die Diagonalelemente der Matrizen, während CovRC1CovRC1CovRC1CovRC1covRC1/CovRC2CovRC2CovRC2CovRC2covRC2 die beiden nicht diagonalen Elemente angeben. Sind die Kovarianzen unbekannt, so werden zur Berechnung intern Einheits-Kovarianzmatrizen angenommen, und in den Kovarianzparametern können leere Tupel übergeben werden.

Die Größe ErrorErrorErrorErrorerror ist ein Gütemaß für die Berechnung der relativen Lage und gibt den mittleren euklidischen Abstand in Pixeln zwischen den Punkten und ihren korrespondierenden Epipolarlinien an.

Bei dem Operator vector_to_rel_posevector_to_rel_poseVectorToRelPoseVectorToRelPoseVectorToRelPose ist folgender Spezialfall zu beachten: Liegen alle abgebildeten Raumpunkte in einer einzigen Ebene und liegen zusätzlich alle Raumpunkte näher zu einer der beiden Kameras, so gibt es insgesamt zwei Lösungen. Das heißt, dass in diesem Fall das Problem der Berechnung der relativen Lage nicht eindeutig lösbar ist. Es werden daher auch beide Lösungen ausgegeben. Das bedeutet, dass alle Ausgabeparameter von doppelter Länge sind, wobei die Werte der zweiten Lösung an die Werte der ersten Lösung hinten angehängt sind.

Sind die Korrespondenzen zwischen den Punkten noch nicht bekannt, so ist match_rel_pose_ransacmatch_rel_pose_ransacMatchRelPoseRansacMatchRelPoseRansacMatchRelPoseRansac zur Bestimmung der Korrespondenzen sowie der Stereo-Geometrie zu verwenden.

Ausführungsinformationen

Parameter

Rows1Rows1Rows1Rows1rows1 (input_control)  number-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Eingabepunkte in Bild 1 (Zeilenkoordinate).

Restriktion: length(Rows1) >= 6 || length(Rows1) >= 2

Cols1Cols1Cols1Cols1cols1 (input_control)  number-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Eingabepunkte in Bild 1 (Spaltenkoordinate).

Restriktion: length(Cols1) == length(Rows1)

Rows2Rows2Rows2Rows2rows2 (input_control)  number-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Eingabepunkte in Bild 2 (Zeilenkoordinate).

Restriktion: length(Rows2) == length(Rows1)

Cols2Cols2Cols2Cols2cols2 (input_control)  number-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Eingabepunkte in Bild 2 (Spaltenkoordinate).

Restriktion: length(Cols2) == length(Rows1)

CovRR1CovRR1CovRR1CovRR1covRR1 (input_control)  number-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Varianz in Zeilenrichtung der Punkte in Bild 1.

Defaultwert: []

CovRC1CovRC1CovRC1CovRC1covRC1 (input_control)  number-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Kovarianz der Punkte in Bild 1.

Defaultwert: []

CovCC1CovCC1CovCC1CovCC1covCC1 (input_control)  number-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Varianz in Spaltenrichtung der Punkte in Bild 1.

Defaultwert: []

CovRR2CovRR2CovRR2CovRR2covRR2 (input_control)  number-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Varianz in Zeilenrichtung der Punkte in Bild 2.

Defaultwert: []

CovRC2CovRC2CovRC2CovRC2covRC2 (input_control)  number-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Kovarianz der Punkte in Bild 2.

Defaultwert: []

CovCC2CovCC2CovCC2CovCC2covCC2 (input_control)  number-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Varianz in Spaltenrichtung der Punkte in Bild 2.

Defaultwert: []

CamPar1CamPar1CamPar1CamPar1camPar1 (input_control)  campar HCamPar, HTupleHTupleHtuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*)

Kameraparameter der 1. Kamera.

CamPar2CamPar2CamPar2CamPar2camPar2 (input_control)  campar HCamPar, HTupleHTupleHtuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*)

Kameraparameter der 2. Kamera.

MethodMethodMethodMethodmethod (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Algorithmus zur Berechnung der relativen Lage und zur Auswahl spezieller relativer Lagen.

Defaultwert: 'normalized_dlt' "normalized_dlt" "normalized_dlt" "normalized_dlt" "normalized_dlt"

Werteliste: 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard", 'normalized_dlt'"normalized_dlt""normalized_dlt""normalized_dlt""normalized_dlt", 'trans_gold_standard'"trans_gold_standard""trans_gold_standard""trans_gold_standard""trans_gold_standard", 'trans_normalized_dlt'"trans_normalized_dlt""trans_normalized_dlt""trans_normalized_dlt""trans_normalized_dlt"

RelPoseRelPoseRelPoseRelPoserelPose (output_control)  pose HPose, HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Berechnete relative Lage der Kameras zueinander (3D-Lage).

CovRelPoseCovRelPoseCovRelPoseCovRelPosecovRelPose (output_control)  real-array HTupleHTupleHtuple (real) (double) (double) (double)

6x6 Kovarianzmatrix der relativen Lage.

ErrorErrorErrorErrorerror (output_control)  real(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Mittlerer, quadratischer Epipolar Abstand.

XXXXx (output_control)  real-array HTupleHTupleHtuple (real) (double) (double) (double)

X-Koordinaten der rekonstruierten Punkte.

YYYYy (output_control)  real-array HTupleHTupleHtuple (real) (double) (double) (double)

Y-Koordinaten der rekonstruierten Punkte.

ZZZZz (output_control)  real-array HTupleHTupleHtuple (real) (double) (double) (double)

Z-Koordinaten der rekonstruierten Punkte.

CovXYZCovXYZCovXYZCovXYZcovXYZ (output_control)  real-array HTupleHTupleHtuple (real) (double) (double) (double)

Kovarianzmatrizen der rekonstruierten 3D Punkte.

Vorgänger

match_rel_pose_ransacmatch_rel_pose_ransacMatchRelPoseRansacMatchRelPoseRansacMatchRelPoseRansac

Nachfolger

gen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMapGenBinocularRectificationMap, rel_pose_to_fundamental_matrixrel_pose_to_fundamental_matrixRelPoseToFundamentalMatrixRelPoseToFundamentalMatrixRelPoseToFundamentalMatrix

Alternativen

vector_to_essential_matrixvector_to_essential_matrixVectorToEssentialMatrixVectorToEssentialMatrixVectorToEssentialMatrix, vector_to_fundamental_matrixvector_to_fundamental_matrixVectorToFundamentalMatrixVectorToFundamentalMatrixVectorToFundamentalMatrix, binocular_calibrationbinocular_calibrationBinocularCalibrationBinocularCalibrationBinocularCalibration

Siehe auch

camera_calibrationcamera_calibrationCameraCalibrationCameraCalibrationCameraCalibration

Literatur

Richard Hartley, Andrew Zisserman: „Multiple View Geometry in Computer Vision“; Cambridge University Press, Cambridge; 2003.
J.Chris McGlone (editor): „Manual of Photogrammetry“; American Society for Photogrammetry and Remote Sensing ; 2004.

Modul

3D Metrology