KlassenKlassenKlassenKlassen | | | | Operatoren

vector_to_rel_poseT_vector_to_rel_poseVectorToRelPosevector_to_rel_poseVectorToRelPoseVectorToRelPose (Operator)

Name

vector_to_rel_poseT_vector_to_rel_poseVectorToRelPosevector_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)

Herror 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)

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 HTuple& CamPar1, const HTuple& 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 HTuple& CamPar1, const HTuple& 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 HTuple& CamPar1, const HTuple& CamPar2, const char* Method, double* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* CovXYZ)

void HOperatorSetX.VectorToRelPose(
[in] VARIANT Rows1, [in] VARIANT Cols1, [in] VARIANT Rows2, [in] VARIANT Cols2, [in] VARIANT CovRR1, [in] VARIANT CovRC1, [in] VARIANT CovCC1, [in] VARIANT CovRR2, [in] VARIANT CovRC2, [in] VARIANT CovCC2, [in] VARIANT CamPar1, [in] VARIANT CamPar2, [in] VARIANT Method, [out] VARIANT* RelPose, [out] VARIANT* CovRelPose, [out] VARIANT* Error, [out] VARIANT* X, [out] VARIANT* Y, [out] VARIANT* Z, [out] VARIANT* CovXYZ)

VARIANT HPoseX.VectorToRelPose(
[in] VARIANT Rows1, [in] VARIANT Cols1, [in] VARIANT Rows2, [in] VARIANT Cols2, [in] VARIANT CovRR1, [in] VARIANT CovRC1, [in] VARIANT CovCC1, [in] VARIANT CovRR2, [in] VARIANT CovRC2, [in] VARIANT CovCC2, [in] VARIANT CamPar1, [in] VARIANT CamPar2, [in] BSTR Method, [out] VARIANT* CovRelPose, [out] VARIANT* Error, [out] VARIANT* X, [out] VARIANT* Y, [out] VARIANT* Z, [out] VARIANT* CovXYZ)

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)

HTuple HPose.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, 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, HTuple camPar1, HTuple 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_poseVectorToRelPosevector_to_rel_poseVectorToRelPoseVectorToRelPose ermittelt aus im allgemeinen mindestens sechs vorgegebenen Punktkorrespondenzen eines Stereobildpaares die relative Orientierung der beiden Kameras zueinander. RelPoseRelPoseRelPoseRelPoseRelPoserelPose gibt die Orientierung der Kamera 1 relative zur Kamera 2 an (Siehe create_posecreate_poseCreatePosecreate_poseCreatePoseCreatePose für weitere Information über die Beschreibung von Orientierungen.). Dies steht in Übereinstimmung mit der expliziten Kalibrierung einer Stereokonfiguration mit dem Operator calibrate_camerascalibrate_camerasCalibrateCamerascalibrate_camerasCalibrateCamerasCalibrateCameras. 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 (XXXXXx,YYYYYy,ZZZZZz), 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_poseVectorToRelPosevector_to_rel_poseVectorToRelPoseVectorToRelPose 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_matrixVectorToEssentialMatrixvector_to_essential_matrixVectorToEssentialMatrixVectorToEssentialMatrix, welcher nur Geraden erhaltende, d.h. lineare, Kameras beschreibt. Kameraparameter werden mit den Argumenten CamPar1CamPar1CamPar1CamPar1CamPar1camPar1 und CamPar2CamPar2CamPar2CamPar2CamPar2camPar2 übergeben. Die 3D Richtungsvektoren und werden aus den Punktkoordinaten (Rows1Rows1Rows1Rows1Rows1rows1,Cols1Cols1Cols1Cols1Cols1cols1) und (Rows2Rows2Rows2Rows2Rows2rows2,Cols2Cols2Cols2Cols2Cols2cols2) durch Invertierung der Kameraprojektion berechnet (siehe calibrate_camerascalibrate_camerasCalibrateCamerascalibrate_camerasCalibrateCamerasCalibrateCameras).

Der Parameter MethodMethodMethodMethodMethodmethod 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""normalized_dlt" und 'gold_standard'"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""trans_normalized_dlt" und 'trans_gold_standard'"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""normalized_dlt" oder 'trans_normalized_dlt'"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""gold_standard" oder 'trans_gold_standard'"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 (XXXXXx,YYYYYy,ZZZZZz) der rekonstruierten Raumpunkte. Die optimalen Verfahren berechnen zusätzlich die 3x3 Kovarianzmatrizen CovXYZCovXYZCovXYZCovXYZCovXYZcovXYZ 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 CovRelPoseCovRelPoseCovRelPoseCovRelPoseCovRelPosecovRelPose an, welche eine 6x6 Matrix ist.

Falls die Bildpunkte mit einem Operator wie points_foerstnerpoints_foerstnerPointsFoerstnerpoints_foerstnerPointsFoerstnerPointsFoerstner, der die Kovarianzmatrix für jeden Punkt zurückliefert, extrahiert wurden, kann dies in der Berechnung berücksichtigt werden, indem die Kovarianzen in CovRR1CovRR1CovRR1CovRR1CovRR1covRR1, CovRC1CovRC1CovRC1CovRC1CovRC1covRC1, CovCC1CovCC1CovCC1CovCC1CovCC1covCC1 für die Punkte des ersten Bildes und in CovRR2CovRR2CovRR2CovRR2CovRR2covRR2, CovRC2CovRC2CovRC2CovRC2CovRC2covRC2, CovCC2CovCC2CovCC2CovCC2CovCC2covCC2 für die Punkte des zweiten Bildes übergeben werden. Die Kovarianzmatrizen sind symmetrische 2x2 Matrizen. CovRR1CovRR1CovRR1CovRR1CovRR1covRR1/CovRR2CovRR2CovRR2CovRR2CovRR2covRR2 und CovCC1CovCC1CovCC1CovCC1CovCC1covCC1/CovCC2CovCC2CovCC2CovCC2CovCC2covCC2 sind dabei die Diagonalelemente der Matrizen, während CovRC1CovRC1CovRC1CovRC1CovRC1covRC1/CovRC2CovRC2CovRC2CovRC2CovRC2covRC2 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 ErrorErrorErrorErrorErrorerror 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_poseVectorToRelPosevector_to_rel_poseVectorToRelPoseVectorToRelPose 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_ransacMatchRelPoseRansacmatch_rel_pose_ransacMatchRelPoseRansacMatchRelPoseRansac zur Bestimmung der Korrespondenzen sowie der Stereo-Geometrie zu verwenden.

Parallelisierung

Parameter

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

Eingabepunkte in Bild 1 (Zeilenkoordinate).

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

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

Eingabepunkte in Bild 1 (Spaltenkoordinate).

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

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

Eingabepunkte in Bild 2 (Zeilenkoordinate).

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

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

Eingabepunkte in Bild 2 (Spaltenkoordinate).

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

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

Varianz in Zeilenrichtung der Punkte in Bild 1.

Defaultwert: []

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

Kovarianz der Punkte in Bild 1.

Defaultwert: []

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

Varianz in Spaltenrichtung der Punkte in Bild 1.

Defaultwert: []

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

Varianz in Zeilenrichtung der Punkte in Bild 2.

Defaultwert: []

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

Kovarianz der Punkte in Bild 2.

Defaultwert: []

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

Varianz in Spaltenrichtung der Punkte in Bild 2.

Defaultwert: []

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

Kameraparameter der 1. Kamera.

Parameteranzahl: CamPar1 == 8 || CamPar1 == 10 || CamPar1 == 12 || CamPar1 == 14

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

Kameraparameter der 2. Kamera.

Parameteranzahl: CamPar2 == 8 || CamPar2 == 10 || CamPar2 == 12 || CamPar2 == 14

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

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

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

Werteliste: 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard", 'normalized_dlt'"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_gold_standard", 'trans_normalized_dlt'"trans_normalized_dlt""trans_normalized_dlt""trans_normalized_dlt""trans_normalized_dlt""trans_normalized_dlt"

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

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

CovRelPoseCovRelPoseCovRelPoseCovRelPoseCovRelPosecovRelPose (output_control)  real-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

6x6 Kovarianzmatrix der relativen Lage.

ErrorErrorErrorErrorErrorerror (output_control)  real(-array) HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Mittlerer, quadratischer Epipolar Abstand.

XXXXXx (output_control)  real-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

X-Koordinaten der rekonstruierten Punkte.

YYYYYy (output_control)  real-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Y-Koordinaten der rekonstruierten Punkte.

ZZZZZz (output_control)  real-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Z-Koordinaten der rekonstruierten Punkte.

CovXYZCovXYZCovXYZCovXYZCovXYZcovXYZ (output_control)  real-array HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Kovarianzmatrizen der rekonstruierten 3D Punkte.

Vorgänger

match_rel_pose_ransacmatch_rel_pose_ransacMatchRelPoseRansacmatch_rel_pose_ransacMatchRelPoseRansacMatchRelPoseRansac

Nachfolger

gen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMap, rel_pose_to_fundamental_matrixrel_pose_to_fundamental_matrixRelPoseToFundamentalMatrixrel_pose_to_fundamental_matrixRelPoseToFundamentalMatrixRelPoseToFundamentalMatrix

Alternativen

vector_to_essential_matrixvector_to_essential_matrixVectorToEssentialMatrixvector_to_essential_matrixVectorToEssentialMatrixVectorToEssentialMatrix, vector_to_fundamental_matrixvector_to_fundamental_matrixVectorToFundamentalMatrixvector_to_fundamental_matrixVectorToFundamentalMatrixVectorToFundamentalMatrix, binocular_calibrationbinocular_calibrationBinocularCalibrationbinocular_calibrationBinocularCalibrationBinocularCalibration

Siehe auch

camera_calibrationcamera_calibrationCameraCalibrationcamera_calibrationCameraCalibrationCameraCalibration

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


KlassenKlassenKlassenKlassen | | | | Operatoren