vector_to_fundamental_matrixT_vector_to_fundamental_matrixVectorToFundamentalMatrixVectorToFundamentalMatrix (Operator)

Name

vector_to_fundamental_matrixT_vector_to_fundamental_matrixVectorToFundamentalMatrixVectorToFundamentalMatrix — Bestimmung der Fundamental-Matrix unter Verwendung vorgegebener Punktkorrespondenzen sowie Rekonstruktion der 3D Raumpunkte.

Signatur

vector_to_fundamental_matrix( : : Rows1, Cols1, Rows2, Cols2, CovRR1, CovRC1, CovCC1, CovRR2, CovRC2, CovCC2, Method : FMatrix, CovFMat, Error, X, Y, Z, W, CovXYZW)

Herror T_vector_to_fundamental_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 Method, Htuple* FMatrix, Htuple* CovFMat, Htuple* Error, Htuple* X, Htuple* Y, Htuple* Z, Htuple* W, Htuple* CovXYZW)

void VectorToFundamentalMatrix(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& Method, HTuple* FMatrix, HTuple* CovFMat, HTuple* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* W, HTuple* CovXYZW)

HTuple HHomMat2D::VectorToFundamentalMatrix(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 HString& Method, double* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* W, HTuple* CovXYZW)

HTuple HHomMat2D::VectorToFundamentalMatrix(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 char* Method, double* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* W, HTuple* CovXYZW)

HTuple HHomMat2D::VectorToFundamentalMatrix(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 wchar_t* Method, double* Error, HTuple* X, HTuple* Y, HTuple* Z, HTuple* W, HTuple* CovXYZW)   (Nur Windows)

static void HOperatorSet.VectorToFundamentalMatrix(HTuple rows1, HTuple cols1, HTuple rows2, HTuple cols2, HTuple covRR1, HTuple covRC1, HTuple covCC1, HTuple covRR2, HTuple covRC2, HTuple covCC2, HTuple method, out HTuple FMatrix, out HTuple covFMat, out HTuple error, out HTuple x, out HTuple y, out HTuple z, out HTuple w, out HTuple covXYZW)

HTuple HHomMat2D.VectorToFundamentalMatrix(HTuple rows1, HTuple cols1, HTuple rows2, HTuple cols2, HTuple covRR1, HTuple covRC1, HTuple covCC1, HTuple covRR2, HTuple covRC2, HTuple covCC2, string method, out double error, out HTuple x, out HTuple y, out HTuple z, out HTuple w, out HTuple covXYZW)

Beschreibung

vector_to_fundamental_matrixvector_to_fundamental_matrixVectorToFundamentalMatrixVectorToFundamentalMatrixVectorToFundamentalMatrix ermittelt aus im allgemeinen mindestens acht vorgegebenen Punktkorrespondenzen (Rows1Rows1Rows1Rows1rows1,Cols1Cols1Cols1Cols1cols1), (Rows2Rows2Rows2Rows2rows2,Cols2Cols2Cols2Cols2cols2) diejenige Fundamental-Matrix FMatrixFMatrixFMatrixFMatrixFMatrix, welche die Epipolargleichung

am besten erfüllt. Zu beachten ist hier die Position von Spalte bzw. Zeile in den Punktkoordinaten. Da die Fundamental-Matrix die projektive Beziehung zweier Stereobilder im 3D Raum wiedergibt, muss die X/Y Notation mit dem Kamera-Koordinaten-System konform sein. (X,Y) Koordinaten entsprechen daher einem (Column,Row) Paar.

Für eine beliebige relative Lage der Kameras zueinander ist die minimale Anzahl an Punktkorrespondenzen acht. MethodMethodMethodMethodmethod ist dann gleich 'normalized_dlt'"normalized_dlt""normalized_dlt""normalized_dlt""normalized_dlt" oder 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard" zu wählen. Sind linke und rechte Kamera identisch und ist zusätzlich die relative Lage zwischen den Kameras eine reine Translation, so ist MethodMethodMethodMethodmethod gleich 'trans_normalized_dlt'"trans_normalized_dlt""trans_normalized_dlt""trans_normalized_dlt""trans_normalized_dlt" oder 'trans_gold_standard'"trans_gold_standard""trans_gold_standard""trans_gold_standard""trans_gold_standard" zu wählen. In diesem speziellen Fall ist die minimale Anzahl an korrespondierenden Punkte nur zwei.

Die Fundamental-Matrix wird so berechnet, dass ein Fehlermaß minimiert wird. Um dieses Ergebnis zu erreichen, sind verschiedene Algorithmen verfügbar. Welches Verfahren verwendet werden soll, kann ebenfalls mittels des Parameters MethodMethodMethodMethodmethod gesteuert werden. Für MethodMethodMethodMethodmethod gleich 'normalized_dlt'"normalized_dlt""normalized_dlt""normalized_dlt""normalized_dlt" bzw. 'trans_normalized_dlt'"trans_normalized_dlt""trans_normalized_dlt""trans_normalized_dlt""trans_normalized_dlt" wird ein lineares Verfahren verwendet, das einen algebraischen Fehler basierend auf obigen Epipolargleichungen minimiert. Dieses Verfahren bietet im allgemeinen einen guten Kompromiss zwischen Geschwindigkeit und Genauigkeit. Für MethodMethodMethodMethodmethod gleich 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard" bzw. 'trans_gold_standard'"trans_gold_standard""trans_gold_standard""trans_gold_standard""trans_gold_standard" wird eine mathematisch optimale, dafür aber langsamere, Optimierung durchgeführt, die den geometrischen Projektionsfehler von rekonstruierten projektiven 3D Punkten minimiert. In diesem Fall werden neben der Kovarianz-Matrix CovFMatCovFMatCovFMatCovFMatcovFMat der Fundamental-Matrix auch die projektiven Koordinaten (XXXXx,YYYYy,ZZZZz,WWWWw) der rekonstruierten Punkte inklusive ihrer Kovarianzen CovXYZWCovXYZWCovXYZWCovXYZWcovXYZW zurückgegeben. Sei n die Anzahl der Punkte, dann werden die aneinandergehängten Kovarianzen in einem 16xn Tuple übergeben.

Die Größe ErrorErrorErrorErrorerror ist ein Gütemaß für die Schätzung der Fundamental- Matrix und gibt den mittleren euklidischen Abstand in Pixeln zwischen den Punkten und ihren korrespondierenden Epipolarlinien an.

Falls die Methode 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard" bzw. 'trans_gold_standard'"trans_gold_standard""trans_gold_standard""trans_gold_standard""trans_gold_standard" verwendet wird und die Punkte 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 und wird die 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard" bzw. 'trans_gold_standard'"trans_gold_standard""trans_gold_standard""trans_gold_standard""trans_gold_standard" Methode verwendet, so werden zur Berechnung intern Einheits-Kovarianzmatrixen angenommen. Falls 'normalized_dlt'"normalized_dlt""normalized_dlt""normalized_dlt""normalized_dlt" bzw. 'trans_normalized_dlt'"trans_normalized_dlt""trans_normalized_dlt""trans_normalized_dlt""trans_normalized_dlt" verwendet wird oder die Kovarianzen unbekannt sind, können in den Kovarianzparametern leere Tupel übergeben werden.

Sind die Korrespondenzen zwischen den Punkten noch nicht bekannt, so ist match_fundamental_matrix_ransacmatch_fundamental_matrix_ransacMatchFundamentalMatrixRansacMatchFundamentalMatrixRansacMatchFundamentalMatrixRansac 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) >= 8 || 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: []

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

Schätzalgorithmus.

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"

FMatrixFMatrixFMatrixFMatrixFMatrix (output_control)  hom_mat2d HHomMat2D, HTupleHTupleHtuple (real) (double) (double) (double)

Berechnete Fundamental-Matrix.

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

9x9 Kovarianzmatrix der Fundamental-Matrix.

ErrorErrorErrorErrorerror (output_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Mittlerer, quadratischer Epipolar Abstand.

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

X-Koordinaten der rekonstruierten Punkte im projektiven Raum.

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

Y-Koordinaten der rekonstruierten Punkte im projektiven Raum.

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

Z-Koordinaten der rekonstruierten Punkte im projektiven Raum.

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

W-Koordinaten der rekonstruierten Punkte im projektiven Raum.

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

Kovarianzmatrizen der rekonstruierten 3D Punkte.

Vorgänger

match_fundamental_matrix_ransacmatch_fundamental_matrix_ransacMatchFundamentalMatrixRansacMatchFundamentalMatrixRansacMatchFundamentalMatrixRansac

Nachfolger

gen_binocular_proj_rectificationgen_binocular_proj_rectificationGenBinocularProjRectificationGenBinocularProjRectificationGenBinocularProjRectification

Alternativen

vector_to_essential_matrixvector_to_essential_matrixVectorToEssentialMatrixVectorToEssentialMatrixVectorToEssentialMatrix, vector_to_rel_posevector_to_rel_poseVectorToRelPoseVectorToRelPoseVectorToRelPose

Literatur

Richard Hartley, Andrew Zisserman: „Multiple View Geometry in Computer Vision“; Cambridge University Press, Cambridge; 2000.
Olivier Faugeras, Quang-Tuan Luong: „The Geometry of Multiple Images: The Laws That Govern the Formation of Multiple Images of a Scene and Some of Their Applications“; MIT Press, Cambridge, MA; 2001.

Modul

3D Metrology