Name
vector_to_essential_matrixT_vector_to_essential_matrixVectorToEssentialMatrixvector_to_essential_matrixVectorToEssentialMatrixVectorToEssentialMatrix — Bestimmung der Essential-Matrix unter Verwendung vorgegebener
Punktkorrespondenzen und bekannter Kameramatrizen sowie Rekonstruktion der 3D
Raumpunkte.
vector_to_essential_matrix( : : Rows1, Cols1, Rows2, Cols2, CovRR1, CovRC1, CovCC1, CovRR2, CovRC2, CovCC2, CamMat1, CamMat2, Method : EMatrix, CovEMat, Error, X, Y, Z, CovXYZ)
Herror T_vector_to_essential_matrix(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 CamMat1, const Htuple CamMat2, const Htuple Method, Htuple* EMatrix, Htuple* CovEMat, Htuple* Error, Htuple* X, Htuple* Y, Htuple* Z, Htuple* CovXYZ)
Herror vector_to_essential_matrix(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& CamMat1, const HTuple& CamMat2, const HTuple& Method, HTuple* EMatrix, HTuple* CovEMat, HTuple* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* CovXYZ)
void VectorToEssentialMatrix(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& CamMat1, const HTuple& CamMat2, const HTuple& Method, HTuple* EMatrix, HTuple* CovEMat, HTuple* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* CovXYZ)
HHomMat2D HHomMat2D::VectorToEssentialMatrix(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 HHomMat2D& CamMat2, const HString& Method, HTuple* CovEMat, HTuple* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* CovXYZ) const
HHomMat2D HHomMat2D::VectorToEssentialMatrix(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 HHomMat2D& CamMat2, const HString& Method, HTuple* CovEMat, double* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* CovXYZ) const
HHomMat2D HHomMat2D::VectorToEssentialMatrix(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 HHomMat2D& CamMat2, const char* Method, HTuple* CovEMat, double* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* CovXYZ) const
void HOperatorSetX.VectorToEssentialMatrix(
[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 CamMat1, [in] VARIANT CamMat2, [in] VARIANT Method, [out] VARIANT* EMatrix, [out] VARIANT* CovEMat, [out] VARIANT* Error, [out] VARIANT* X, [out] VARIANT* Y, [out] VARIANT* Z, [out] VARIANT* CovXYZ)
IHHomMat2DX* HHomMat2DX.VectorToEssentialMatrix(
[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] IHHomMat2DX* CamMat2, [in] BSTR Method, [out] VARIANT* CovEMat, [out] VARIANT* Error, [out] VARIANT* X, [out] VARIANT* Y, [out] VARIANT* Z, [out] VARIANT* CovXYZ)
static void HOperatorSet.VectorToEssentialMatrix(HTuple rows1, HTuple cols1, HTuple rows2, HTuple cols2, HTuple covRR1, HTuple covRC1, HTuple covCC1, HTuple covRR2, HTuple covRC2, HTuple covCC2, HTuple camMat1, HTuple camMat2, HTuple method, out HTuple EMatrix, out HTuple covEMat, out HTuple error, out HTuple x, out HTuple y, out HTuple z, out HTuple covXYZ)
HHomMat2D HHomMat2D.VectorToEssentialMatrix(HTuple rows1, HTuple cols1, HTuple rows2, HTuple cols2, HTuple covRR1, HTuple covRC1, HTuple covCC1, HTuple covRR2, HTuple covRC2, HTuple covCC2, HHomMat2D camMat2, string method, out HTuple covEMat, out HTuple error, out HTuple x, out HTuple y, out HTuple z, out HTuple covXYZ)
HHomMat2D HHomMat2D.VectorToEssentialMatrix(HTuple rows1, HTuple cols1, HTuple rows2, HTuple cols2, HTuple covRR1, HTuple covRC1, HTuple covCC1, HTuple covRR2, HTuple covRC2, HTuple covCC2, HHomMat2D camMat2, string method, out HTuple covEMat, out double error, out HTuple x, out HTuple y, out HTuple z, out HTuple covXYZ)
vector_to_essential_matrixvector_to_essential_matrixVectorToEssentialMatrixvector_to_essential_matrixVectorToEssentialMatrixVectorToEssentialMatrix ermittelt aus im allgemeinen mindestens
sechs vorgegebenen Punktkorrespondenzen (Rows1Rows1Rows1Rows1Rows1rows1,Cols1Cols1Cols1Cols1Cols1cols1),
(Rows2Rows2Rows2Rows2Rows2rows2,Cols2Cols2Cols2Cols2Cols2cols2) diejenige Essential-Matrix
EMatrixEMatrixEMatrixEMatrixEMatrixEMatrix, welche die Epipolargleichung
T
/ X2 \ / X1 \
| Y2 | * EMatrix * | Y1 | = 0
\ 1 / \ 1 /
am besten erfüllt.
Der Operator vector_to_essential_matrixvector_to_essential_matrixVectorToEssentialMatrixvector_to_essential_matrixVectorToEssentialMatrixVectorToEssentialMatrix ist für ein lineares
Kameramodell konzipiert. Die internen Kameraparameter werden durch die
Argumente CamMat1CamMat1CamMat1CamMat1CamMat1camMat1, CamMat2CamMat2CamMat2CamMat2CamMat2camMat2 übergeben, welche
3x3 obere Dreiecksmatrizen sind und eine affine
Transformation beschreiben. Die Beziehung zwischen einem 3D Richtungsvektor
(X,Y,1) und dessen (projektiven) 2D Bildkoordinaten (col,row,1) ist:
/ col \ / X \ / f/Sx s Cx \
| row | = CamMat * | Y | mit CamMat = | 0 f/Sy Cy | .
\ 1 / \ 1 / \ 0 0 1 /
Zu beachten ist hier die Reihenfolge (Spalte/Zeile), welche mit der (x,y)
Notation im Kamerakoordinatensystem konform gehen muss.
Die Brennweite ist mit f bezeichnet, Sx,Sy sind
Skalierungsfaktoren, s beschreibt eine Scherung und
(Cx,Cy) gibt den Bildhauptpunkt
an.
Hauptsächlich sind dies die Elemente aus den Kameraparametern, wie sie z.B.
in calibrate_camerascalibrate_camerasCalibrateCamerascalibrate_camerasCalibrateCamerasCalibrateCameras verwendet werden. Alternativ kann eine
Kameramatrix auch durch andere Elemente beschrieben werden, siehe
z.B. stationary_camera_self_calibrationstationary_camera_self_calibrationStationaryCameraSelfCalibrationstationary_camera_self_calibrationStationaryCameraSelfCalibrationStationaryCameraSelfCalibration.
Multipliziert man die (projektiven) Bildkoordinaten mit der
invertierten Kameramatrix, so erhält man die 3D
Richtungsvektoren für die Epipolargleichung.
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" and '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 die Kovarianz der Essential-Matrix
CovEMatCovEMatCovEMatCovEMatCovEMatcovEMat an, welche eine 9x9 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
Essential-Matrix und gibt den mittleren euklidischen Abstand in Pixeln
zwischen den Punkten und ihren korrespondierenden Epipolarlinien an.
Bei dem Operator vector_to_essential_matrixvector_to_essential_matrixVectorToEssentialMatrixvector_to_essential_matrixVectorToEssentialMatrixVectorToEssentialMatrix 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 Essential-Matrix 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_essential_matrix_ransacmatch_essential_matrix_ransacMatchEssentialMatrixRansacmatch_essential_matrix_ransacMatchEssentialMatrixRansacMatchEssentialMatrixRansac zur Bestimmung
der Korrespondenzen sowie der Stereo-Geometrie zu verwenden.
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
Eingabepunkte in Bild 1 (Zeilenkoordinate).
Restriktion: length(Rows1) >= 6 || length(Rows1) >= 2
Eingabepunkte in Bild 1 (Spaltenkoordinate).
Restriktion: length(Cols1) == length(Rows1)
Eingabepunkte in Bild 2 (Zeilenkoordinate).
Restriktion: length(Rows2) == length(Rows1)
Eingabepunkte in Bild 2 (Spaltenkoordinate).
Restriktion: length(Cols2) == length(Rows1)
Varianz in Zeilenrichtung der Punkte in Bild 1.
Defaultwert: []
Kovarianz der Punkte in Bild 1.
Defaultwert: []
Varianz in Spaltenrichtung der Punkte in Bild 1.
Defaultwert: []
Varianz in Zeilenrichtung der Punkte in Bild 2.
Defaultwert: []
Kovarianz der Punkte in Bild 2.
Defaultwert: []
Varianz in Spaltenrichtung der Punkte in Bild 2.
Defaultwert: []
Kameramatrix der 1. Kamera.
Kameramatrix der 2. Kamera.
Algorithmus zur Berechnung der Essential-Matrix
und zur Auswahl spezieller relativer Orientierungen.
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"
Berechnete Essential-Matrix.
9x9 Kovarianzmatrix der
Essential-Matrix.
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.
Kovarianzmatrizen der rekonstruierten 3D Punkte.
match_essential_matrix_ransacmatch_essential_matrix_ransacMatchEssentialMatrixRansacmatch_essential_matrix_ransacMatchEssentialMatrixRansacMatchEssentialMatrixRansac
essential_to_fundamental_matrixessential_to_fundamental_matrixEssentialToFundamentalMatrixessential_to_fundamental_matrixEssentialToFundamentalMatrixEssentialToFundamentalMatrix
vector_to_rel_posevector_to_rel_poseVectorToRelPosevector_to_rel_poseVectorToRelPoseVectorToRelPose,
vector_to_fundamental_matrixvector_to_fundamental_matrixVectorToFundamentalMatrixvector_to_fundamental_matrixVectorToFundamentalMatrixVectorToFundamentalMatrix
stationary_camera_self_calibrationstationary_camera_self_calibrationStationaryCameraSelfCalibrationstationary_camera_self_calibrationStationaryCameraSelfCalibrationStationaryCameraSelfCalibration
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.
3D Metrology