match_essential_matrix_ransacT_match_essential_matrix_ransacMatchEssentialMatrixRansacMatchEssentialMatrixRansacmatch_essential_matrix_ransac — Automatische Bestimmung der Essential-Matrix für ein Stereo-Bildpaar durch
Zuordnung von Bildpunkten.
Der Operator match_essential_matrix_ransacmatch_essential_matrix_ransacMatchEssentialMatrixRansacMatchEssentialMatrixRansacmatch_essential_matrix_ransac ist für ein lineares
Kameramodell konzipiert. Die internen Kameraparameter werden durch die
Argumente CamMat1CamMat1CamMat1camMat1cam_mat_1, CamMat2CamMat2CamMat2camMat2cam_mat_2 ü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:
Das Matchingverfahren beruht auf charakteristischen Punkten, welche mit
Punktoperatoren, wie z.B. points_foerstnerpoints_foerstnerPointsFoerstnerPointsFoerstnerpoints_foerstner oder
points_harrispoints_harrisPointsHarrisPointsHarrispoints_harris, extrahiert wurden.
Die Bestimmung der Essential-Matrix und der Korrespondenzen erfolgt
in 2 Schritten: Zuerst
werden die Grauwertkorrelationen von Umgebungen der Eingabepunkte im
ersten und zweiten Bild bestimmt und anhand dieser ein initiales
Matching zwischen den Punkten ermittelt. Dann wird das RANSAC-Verfahren
angewendet, um diejenige Essential-Matrix zu finden, welche die Anzahl
der korrespondierenden Punktpaare unter Erfüllung der Epipolarbedingung
maximiert.
Zur Geschwindigkeitssteigerung kann der Suchbereich für das Matching
eingeschränkt werden. Nur Punkte innerhalb eines Punkte großen Fensters werden
betrachtet. Die Verschiebung des Mittelpunkts dieses Fensters im
zweiten Bild gegenüber der Position des aktuellen Punktes im ersten
Bild wird durch die Parameter RowMoveRowMoveRowMoverowMoverow_move und ColMoveColMoveColMovecolMovecol_move
bestimmt.
Falls die Kameras nicht nur verschoben sind, sondern die zweite
Kamera gegenüber der ersten um die optische Achse gedreht worden
ist, kann im Parameter RotationRotationRotationrotationrotation eine Schätzung des
Drehwinkels bzw. ein Winkelintervall im Bogenmaß übergeben
werden. Eine gute Schätzung des Winkels erhöht die Qualität des
Grauwertwertmatchings. Falls sich die tatsächliche Rotation zu
stark von der angegebenen Schätzung unterscheidet, schlägt das
Matching typischerweise fehl. In diesem Fall sollte ein
Winkelintervall angegeben werden. Je größer das angegebene
Winkelintervall, desto langsamer läuft der Operator, denn für alle
relevanten (endlich vielen) Winkel innerhalb des Intervalls wird das
Verfahren komplett durchlaufen.
Der Parameter EstimationMethodEstimationMethodEstimationMethodestimationMethodestimation_method 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.
Für eine eindeutige Korrespondenzfindung ist die minimale Anzahl an
notwendigen Punktkorrespondenzen im allgemeinen Fall sechs und im speziellen
Fall der reinen Translation drei.
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,
und die Kovarianz der Essential-Matrix CovEMatCovEMatCovEMatcovEMatcov_emat wird zusätzlich
berechnet.
Es ist zu beachten, dass sich je nach gewähltem Verfahren nicht nur die
berechnete Essential-Matrix unterscheidet, sondern auch die zugeordneten
Punkte verschieden sein können.
Der Wert ErrorErrorErrorerrorerror gibt die Qualität des Matchings an und ist
der mittlere euklidische Abstand der Punkte zu ihren
korrespondierenden Epipolarlinien gemessen in Pixeln.
Punktpaare, welche die Konsistenzbedingungen erfüllen, werden als
Korrespondenzen akzeptiert. Points1Points1Points1points1points_1 enthält die Indizes der
zugeordneten Eingabepunkte im ersten Bild, Points2Points2Points2points2points_2 die Indizes der
dazu korrespondierenden Punkte im zweiten Bild.
Bei dem Operator match_essential_matrix_ransacmatch_essential_matrix_ransacMatchEssentialMatrixRansacMatchEssentialMatrixRansacmatch_essential_matrix_ransac ist folgender
Spezialfall zu beachten:
Liegen alle zugeordneten Raumpunkte in einer einzigen Ebene und
zusätzlich alle 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
die Ausgabeparameter EMatrixEMatrixEMatrixEMatrixematrix, CovEMatCovEMatCovEMatcovEMatcov_emat und ErrorErrorErrorerrorerror
von doppelter Länge sind, wobei die Werte der zweiten Lösung an die Werte
der ersten Lösung hinten angehängt sind.
Der Parameter RandSeedRandSeedRandSeedrandSeedrand_seed kann benutzt werden, um das
randomisierte Verhalten des RANSAC-Verfahrens zu kontrollieren und
somit reproduzierbare Ergebnisse zu erhalten. Wird
RandSeedRandSeedRandSeedrandSeedrand_seed auf einen positiven Wert gesetzt, so liefert der
Operator bei jedem Aufruf mit denselben Parametern auch dasselbe
Resultat, da der intern verwendete Zufallsgenerator mit
RandSeedRandSeedRandSeedrandSeedrand_seed initialisiert wird. Ist RandSeedRandSeedRandSeedrandSeedrand_seed =
0, so wird der Zufallsgenerator mit der aktuellen Zeit
initialisiert. Daher sind in diesem Fall die Ergebnisse unter
Umständen nicht reproduzierbar.
Welcher Wert für den HALCON Systemparameter
'seed_rand'"seed_rand""seed_rand""seed_rand""seed_rand" (siehe set_systemset_systemSetSystemSetSystemset_system) gesetzt ist hat keinen
Einfluss auf das Ergebnis von match_essential_matrix_ransacmatch_essential_matrix_ransacMatchEssentialMatrixRansacMatchEssentialMatrixRansacmatch_essential_matrix_ransac.
Ausführungsinformationen
Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
Richard Hartley, Andrew Zisserman: „Multiple View Geometry in
Computer Vision“; Cambridge University Press, Cambridge; 2003.
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.