match_fundamental_matrix_distortion_ransacT_match_fundamental_matrix_distortion_ransacMatchFundamentalMatrixDistortionRansacMatchFundamentalMatrixDistortionRansac — Automatische Bestimmung der Fundamental-Matrix und des radialen
Verzeichnungskoeffizienten für ein Stereo-Bildpaar durch Zuordnung
von Bildpunkten.
Hierbei bezeichnen die verzerrten
Bildpunkte relativ zum Bildmittelpunkt und w und h die Breite
und Höhe der Eingabebilder.
match_fundamental_matrix_distortion_ransacmatch_fundamental_matrix_distortion_ransacMatchFundamentalMatrixDistortionRansacMatchFundamentalMatrixDistortionRansacMatchFundamentalMatrixDistortionRansac nimmt also an,
dass der Hauptpunkt, d.h. das Zentrum der radialen Verzeichnungen,
im Bildmittelpunkt liegt.
Zu beachten bei den obigen Formeln ist 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 Kamerakoordinatensystem konform sein.
(X,Y) Koordinaten entsprechen daher einem (Column,Row) Paar.
Das Matchingverfahren beruht auf charakteristischen Punkten, welche
mit Punktoperatoren, wie z.B. points_foerstnerpoints_foerstnerPointsFoerstnerPointsFoerstnerPointsFoerstner oder
points_harrispoints_harrisPointsHarrisPointsHarrisPointsHarris, extrahiert wurden. Die Bestimmung der
Korrespondenzen erfolgt in 2 Schritten: Zuerst werden die
Grauwertkorrelationen der 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 die Fundamental-Matrix und den radialen
Verzeichnungskoeffizienten zu finden, welche die Anzahl der
korrespondierenden Punktpaare unter Erfüllung der Epipolarbedingung
maximieren.
Zur Geschwindigkeitssteigerung kann der Suchbereich für die
Match-Kandidaten auf ein Rechteck, das durch Größe und Verschiebung
spezifiziert wird, 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 RowMoveRowMoveRowMoveRowMoverowMove und ColMoveColMoveColMoveColMovecolMove 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 (automatisch bestimmten) Winkel innerhalb des Intervalls
wird das Verfahren komplett durchlaufen.
Der Parameter EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethod gibt an, ob die Kameras sich
in einer besonderen relativen Orientierung zueinander befinden, und
bestimmt auch das Berechnungsverfahren. Für 'linear'"linear""linear""linear""linear" und
'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard" kann die relative Lage der Kameras
zueinander beliebig sein. 'trans_linear'"trans_linear""trans_linear""trans_linear""trans_linear" oder
'trans_gold_standard'"trans_gold_standard""trans_gold_standard""trans_gold_standard""trans_gold_standard" ist zu wählen, wenn die relative Lage
der beiden Kameras eine reine Translation ist und die linke und
rechte Kamera identisch sind. Für eine eindeutige
Korrespondenzfindung ist die minimale Anzahl an notwendigen
Punktkorrespondenzen im allgemeinen Fall neun und im speziellen Fall
der reinen Translation vier.
Wird EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethod auf 'linear'"linear""linear""linear""linear" oder
'trans_linear'"trans_linear""trans_linear""trans_linear""trans_linear" gesetzt, so ist das Berechnungsverfahren ein
lineares Verfahren. Dieses Verfahren ist sehr schnell. Für den
Fall der reinen Translation (EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethod =
'trans_linear'"trans_linear""trans_linear""trans_linear""trans_linear") liefert das lineare Verfahren genaue
Ergebnisse für geringes bis mittleres Rauschen der Punktkoordinaten
und für die meisten Verzeichnungen (außer sehr kleinen
Verzeichnungen). Für eine beliebige Lage der Kameras
(EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethod = 'linear'"linear""linear""linear""linear") liefert das
lineare Verfahren nur für sehr geringes Rauschen der
Punktkoordinaten und hinreichend große Verzeichnungen genaue
Ergebnisse. Für EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethod 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 Reprojektionsfehler von
rekonstruierten projektiven 3D Punkten minimiert. Für eine
beliebige Lage der Kameras sollte im allgemeinen
EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethod = 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard" gewählt
werden.
Der Wert ErrorErrorErrorErrorerror gibt die Qualität des Matchings an und ist
der mittlere symmetrische euklidische Abstand der Punkte zu ihren
korrespondierenden Epipolarlinien, gemessen in Pixeln.
Punktpaare, welche die Konsistenzbedingungen erfüllen, werden als
Korrespondenzen akzeptiert. Points1Points1Points1Points1points1 enthält die Indizes
der zugeordneten Eingabepunkte im ersten Bild, Points2Points2Points2Points2points2 die
Indizes der dazu korrespondierenden Punkte im zweiten Bild.
Der Parameter RandSeedRandSeedRandSeedRandSeedrandSeed kann benutzt werden, um das
randomisierte Verhalten des RANSAC-Verfahrens zu kontrollieren und
somit reproduzierbare Ergebnisse zu erhalten. Wird
RandSeedRandSeedRandSeedRandSeedrandSeed auf einen positiven Wert gesetzt, so liefert der
Operator bei jedem Aufruf mit denselben Parametern auch dasselbe
Resultat, da der intern verwendete Zufallsgenerator mit
RandSeedRandSeedRandSeedRandSeedrandSeed initialisiert wird. Ist RandSeedRandSeedRandSeedRandSeedrandSeed =
0, so wird der Zufallsgenerator mit der aktuellen Zeit
initialisiert. Daher sind in diesem Fall die Ergebnisse unter
Umständen nicht reproduzierbar.
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.