vector_to_fundamental_matrix T_vector_to_fundamental_matrix VectorToFundamentalMatrix VectorToFundamentalMatrix vector_to_fundamental_matrix (Operator)
Name
vector_to_fundamental_matrix T_vector_to_fundamental_matrix VectorToFundamentalMatrix VectorToFundamentalMatrix vector_to_fundamental_matrix
— 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 )
def vector_to_fundamental_matrix (rows_1 : Sequence[Union[float, int]], cols_1 : Sequence[Union[float, int]], rows_2 : Sequence[Union[float, int]], cols_2 : Sequence[Union[float, int]], cov_rr1 : Sequence[Union[float, int]], cov_rc1 : Sequence[Union[float, int]], cov_cc1 : Sequence[Union[float, int]], cov_rr2 : Sequence[Union[float, int]], cov_rc2 : Sequence[Union[float, int]], cov_cc2 : Sequence[Union[float, int]], method : str) -> Tuple[Sequence[float], Sequence[float], float, Sequence[float], Sequence[float], Sequence[float], Sequence[float], Sequence[float]]
Beschreibung
vector_to_fundamental_matrix vector_to_fundamental_matrix VectorToFundamentalMatrix VectorToFundamentalMatrix VectorToFundamentalMatrix vector_to_fundamental_matrix
ermittelt aus im allgemeinen mindestens
acht vorgegebenen Punktkorrespondenzen (Rows1 Rows1 Rows1 Rows1 rows1 rows_1
,Cols1 Cols1 Cols1 Cols1 cols1 cols_1
),
(Rows2 Rows2 Rows2 Rows2 rows2 rows_2
,Cols2 Cols2 Cols2 Cols2 cols2 cols_2
) diejenige Fundamental-Matrix
FMatrix FMatrix FMatrix FMatrix FMatrix fmatrix
, 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.
Method Method Method Method method method
ist dann gleich 'normalized_dlt' "normalized_dlt" "normalized_dlt" "normalized_dlt" "normalized_dlt" "normalized_dlt" oder
'gold_standard' "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 Method Method Method Method method method
gleich 'trans_normalized_dlt' "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" "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 Method Method Method Method method method
gesteuert
werden. Für Method Method Method Method method method
gleich 'normalized_dlt' "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" "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 Method Method Method Method method method
gleich 'gold_standard' "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" "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
CovFMat CovFMat CovFMat CovFMat covFMat cov_fmat
der Fundamental-Matrix auch die projektiven Koordinaten
(X X X X x x
,Y Y Y Y y y
,Z Z Z Z z z
,W W W W w w
) der rekonstruierten Punkte
inklusive ihrer Kovarianzen CovXYZW CovXYZW CovXYZW CovXYZW covXYZW cov_xyzw
zurückgegeben.
Sei n die Anzahl der Punkte, dann werden die
aneinandergehängten Kovarianzen in einem 16xn Tuple
übergeben.
Die Größe Error Error Error Error error error
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" "gold_standard" bzw.
'trans_gold_standard' "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_foerstner points_foerstner PointsFoerstner PointsFoerstner PointsFoerstner points_foerstner
, der die Kovarianzmatrix
für jeden Punkt zurückliefert, extrahiert wurden, kann dies in der
Berechnung berücksichtigt werden, indem die Kovarianzen in
CovRR1 CovRR1 CovRR1 CovRR1 covRR1 cov_rr1
, CovRC1 CovRC1 CovRC1 CovRC1 covRC1 cov_rc1
, CovCC1 CovCC1 CovCC1 CovCC1 covCC1 cov_cc1
für die Punkte des
ersten Bildes und in CovRR2 CovRR2 CovRR2 CovRR2 covRR2 cov_rr2
, CovRC2 CovRC2 CovRC2 CovRC2 covRC2 cov_rc2
,
CovCC2 CovCC2 CovCC2 CovCC2 covCC2 cov_cc2
für die Punkte des zweiten Bildes übergeben werden.
Die Kovarianzmatrizen sind symmetrische 2x2
Matrizen. CovRR1 CovRR1 CovRR1 CovRR1 covRR1 cov_rr1
/CovRR2 CovRR2 CovRR2 CovRR2 covRR2 cov_rr2
und
CovCC1 CovCC1 CovCC1 CovCC1 covCC1 cov_cc1
/CovCC2 CovCC2 CovCC2 CovCC2 covCC2 cov_cc2
sind dabei die Diagonalelemente der
Matrizen, während CovRC1 CovRC1 CovRC1 CovRC1 covRC1 cov_rc1
/CovRC2 CovRC2 CovRC2 CovRC2 covRC2 cov_rc2
die beiden nicht diagonalen
Elemente angeben.
Sind die Kovarianzen unbekannt und wird die 'gold_standard' "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" "trans_gold_standard" Methode
verwendet, so werden zur Berechnung intern Einheits-Kovarianzmatrixen
angenommen. Falls 'normalized_dlt' "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" "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_ransac match_fundamental_matrix_ransac MatchFundamentalMatrixRansac MatchFundamentalMatrixRansac MatchFundamentalMatrixRansac match_fundamental_matrix_ransac
zur Bestimmung
der Korrespondenzen sowie der Stereo-Geometrie zu verwenden.
Ausführungsinformationen
Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
Wird ohne Parallelisierung verarbeitet.
Parameter
Rows1 Rows1 Rows1 Rows1 rows1 rows_1
(input_control) number-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Eingabepunkte in Bild 1 (Zeilenkoordinate).
Restriktion: length(Rows1) >= 8 || length(Rows1) >= 2
Cols1 Cols1 Cols1 Cols1 cols1 cols_1
(input_control) number-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Eingabepunkte in Bild 1 (Spaltenkoordinate).
Restriktion: length(Cols1) == length(Rows1)
Rows2 Rows2 Rows2 Rows2 rows2 rows_2
(input_control) number-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Eingabepunkte in Bild 2 (Zeilenkoordinate).
Restriktion: length(Rows2) == length(Rows1)
Cols2 Cols2 Cols2 Cols2 cols2 cols_2
(input_control) number-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Eingabepunkte in Bild 2 (Spaltenkoordinate).
Restriktion: length(Cols2) == length(Rows1)
CovRR1 CovRR1 CovRR1 CovRR1 covRR1 cov_rr1
(input_control) number-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Varianz in Zeilenrichtung der Punkte in Bild 1.
Defaultwert: []
CovRC1 CovRC1 CovRC1 CovRC1 covRC1 cov_rc1
(input_control) number-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Kovarianz der Punkte in Bild 1.
Defaultwert: []
CovCC1 CovCC1 CovCC1 CovCC1 covCC1 cov_cc1
(input_control) number-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Varianz in Spaltenrichtung der Punkte in Bild 1.
Defaultwert: []
CovRR2 CovRR2 CovRR2 CovRR2 covRR2 cov_rr2
(input_control) number-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Varianz in Zeilenrichtung der Punkte in Bild 2.
Defaultwert: []
CovRC2 CovRC2 CovRC2 CovRC2 covRC2 cov_rc2
(input_control) number-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Kovarianz der Punkte in Bild 2.
Defaultwert: []
CovCC2 CovCC2 CovCC2 CovCC2 covCC2 cov_cc2
(input_control) number-array →
HTuple Sequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Varianz in Spaltenrichtung der Punkte in Bild 2.
Defaultwert: []
Method Method Method Method method method
(input_control) string →
HTuple str HTuple Htuple (string) (string ) (HString ) (char* )
Schätzalgorithmus.
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"
FMatrix FMatrix FMatrix FMatrix FMatrix fmatrix
(output_control) hom_mat2d →
HHomMat2D , HTuple Sequence[float] HTuple Htuple (real) (double ) (double ) (double )
Berechnete Fundamental-Matrix.
CovFMat CovFMat CovFMat CovFMat covFMat cov_fmat
(output_control) real-array →
HTuple Sequence[float] HTuple Htuple (real) (double ) (double ) (double )
9x9 Kovarianzmatrix der
Fundamental-Matrix.
Error Error Error Error error error
(output_control) real →
HTuple float HTuple Htuple (real) (double ) (double ) (double )
Mittlerer, quadratischer Epipolar Abstand.
X X X X x x
(output_control) real-array →
HTuple Sequence[float] HTuple Htuple (real) (double ) (double ) (double )
X-Koordinaten der rekonstruierten Punkte im
projektiven Raum.
Y Y Y Y y y
(output_control) real-array →
HTuple Sequence[float] HTuple Htuple (real) (double ) (double ) (double )
Y-Koordinaten der rekonstruierten Punkte im
projektiven Raum.
Z Z Z Z z z
(output_control) real-array →
HTuple Sequence[float] HTuple Htuple (real) (double ) (double ) (double )
Z-Koordinaten der rekonstruierten Punkte im
projektiven Raum.
W W W W w w
(output_control) real-array →
HTuple Sequence[float] HTuple Htuple (real) (double ) (double ) (double )
W-Koordinaten der rekonstruierten Punkte im
projektiven Raum.
CovXYZW CovXYZW CovXYZW CovXYZW covXYZW cov_xyzw
(output_control) real-array →
HTuple Sequence[float] HTuple Htuple (real) (double ) (double ) (double )
Kovarianzmatrizen der rekonstruierten 3D Punkte.
Vorgänger
match_fundamental_matrix_ransac match_fundamental_matrix_ransac MatchFundamentalMatrixRansac MatchFundamentalMatrixRansac MatchFundamentalMatrixRansac match_fundamental_matrix_ransac
Nachfolger
gen_binocular_proj_rectification gen_binocular_proj_rectification GenBinocularProjRectification GenBinocularProjRectification GenBinocularProjRectification gen_binocular_proj_rectification
Alternativen
vector_to_essential_matrix vector_to_essential_matrix VectorToEssentialMatrix VectorToEssentialMatrix VectorToEssentialMatrix vector_to_essential_matrix
,
vector_to_rel_pose vector_to_rel_pose VectorToRelPose VectorToRelPose VectorToRelPose vector_to_rel_pose
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