reconstruct_points_stereo
— 3D-Punktrekonstruktion mit kalibriertem Mehrbild-Stereoaufbau.
reconstruct_points_stereo( : : StereoModelID, Row, Column, CovIP, CameraIdx, PointIdx : X, Y, Z, CovWP, PointIdxOut)
Der Operator reconstruct_points_stereo
rekonstruiert 3D-Punkte
von Punktkorrespondenzen, die in einem vom kalibrierten Kamerasetup
aufgenommenen Bildarray extrahiert worden sind. Das kalibrierte
Kamerasetup wird an das Stereomodell StereoModelID
während
seines Erstellens angehängt (siehe create_stereo_model
).
Es ist zu beachten, dass das Stereomodell mit dem Typ
'points_3d' erstellt werden muss, ansonsten gibt der Operator
reconstruct_points_stereo
einen Fehler zurück.
Die Punktkorrespondenzen werden in den Parametern Row
,
Column
, CameraIdx
, and PointIdx
in der Form
vier gleich langer Tupel übergeben. Jede Menge
(Row[I],Column[I],CameraIdx[I],PointIdx[I])
entspricht den
Bildkoordinaten (Row
, Column
) eines 3D-Punktes
(PointIdx
) im Bild einer Kamera (CameraIdx
).
Die rekonstruierten 3D-Punktkoordinaten werden in den drei gleich langen
Ausgabetupeln X
, Y
, and Z
zurückgegeben.
Die Koordinaten sind im Koordinatensystems des am Stereomodell
angehängten Kamerasetups definiert (siehe create_camera_setup_model
).
Das Tupel PointIdxOut
enthält die entsprechenden Punktindizes.
Der Rekonstruktionsalgorithmus funktioniert wie folgt: Erst werden
die Punktkorrespondenzen eines 3D-Punkts gesucht, indem alle
Eingabemengen mit demselben PointIdx
aufgesammelt werden.
Danach werden die Informationen Row
, Column
, und
CameraIdx
von den angesammelten Mengen benutzt, um Sichtlinien
von der jeweiligen Kamera durch den entsprechenden Bildpunkt
[Row,Column]
zu projizieren. Wenn 2 oder mehr Sichtlinien für
einen Punkt PointIdx
gefunden werden, werden diese alle in der Welt
geschnitten und der Schnittpunkt als Ausgabemenge
(X[J],Y[J],Z[J],PointIdxOut[J])
gespeichert. Der Schnittpunkt wird
durch die Methode der kleinsten Quadrate berechnet, ohne potenzielle
falsche Sichtlinien zu suchen und sie zu unterdrücken (z.B. wenn
ein Bildpunkt fälschlicherweise einem 3D-Punkt zugeordnet wird).
Zur Berechnung der Kovarianzmatrizen der rekonstruierten 3D-Punkte
müssen statistische Informationen über die extrahierten Bildkoordinaten
(d.h. Kovarianzmatrizen der Bildpunkte;
siehe z.B. points_foerstner
) verfügbar sein und in dem
Parameter CovIP
übergeben werden. Falls jedoch keine
Kovarianzmatrizen für die rekonstruierten 3D-Punkte benötigt werden
oder keine Kovarianzmatrizen für die Bildpunkte verfügbar sind, kann
ein leeres Tupel an CovIP
übergeben werden. Somit wird dann keine
Kovarianzmatrix für die 3D Punkte berechnet.
Die Kovarianzmatrix eines Bildpunktes ist:
Die Kovarianzmatrizen sind symmetrische 2x2
Matrizen, bei denen
die Einträge der Hauptdiagonalen die Varianz der Bildpunkte in
Zeilenrichtung bzw. Spaltenrichtung repräsentieren.
Für jeden Bildpunkt muss im Parameter CovIP
eine Kovarianzmatrix
in Form eines Tupels mit 4 Elementen übergeben werden:
Somit ist |CovIP|=4*|Row|
und CovIP[I*4:I*4+3]
sind die 4
Kovarianzmatrixwerte des I.
Bildpunktes.
Die berechnete Kovarianzmatrix für einen erfolgreich rekonstruierten 3D-Punkt
ist durch eine symmetrische 3x3
Matrix definiert:
Die Einträge der Hauptdiagonalen repräsentieren die Varianzen der
rekonstruierten 3D-Punkte in Richtung der x-, y- und z-Achse.
Die berechneten Matrizen werden im Parameter CovWP
in Form
von Tupeln, bestehend aus 9 Elementen, zurückgegeben:
Somit ist |CovWP|=9*|X|
und CovWP[J*9:J*9+8]
sind die 9
Kovarianzmatrixwerte des J.
3D-Punktes. Es ist zu beachten,
dass, wenn der an dem Stereomodell angehängte Kamerasetup Kovarianzmatrizen
für die internen Kameraparameter enthält, diese in der Berechnung
der CovWP
auch miteinbezogen werden.
Wenn im Stereomodell ein gültiger kleinster umschließender Quader definiert
ist (siehe set_stereo_model_param
), werden Ausgabe-3D-Punkte
außerhalb des Quaders ausgeschnitten. Ist der Quader ungültig, wird er
nicht berücksichtigt und alle Punkten zurückgegeben, die gefunden
werden könnten.
StereoModelID
(input_control) stereo_model →
(handle)
Handle des Stereomodells.
Row
(input_control) number(-array) →
(real / integer)
Zeilenkoordinaten der extrahierten Bildmerkmale.
Column
(input_control) number(-array) →
(real / integer)
Spaltenkoordinaten der extrahierten Bildmerkmale.
CovIP
(input_control) number-array →
(real / integer)
Kovarianzmatrizen der extrahierten Bildmerkmale.
Defaultwert: []
CameraIdx
(input_control) number →
(integer)
Kameraindizes der Kameras, in welchen die Bildmerkmale extrahiert worden sind.
Wertevorschläge: 0, 1, 2
PointIdx
(input_control) number →
(integer)
Zuordnung der extrahierten Bildmerkmale zu den beobachteten 3D-Punkten.
Wertevorschläge: 0, 1, 2
X
(output_control) real(-array) →
(real)
X-Koordinaten der rekonstruierten 3D-Punkte.
Y
(output_control) number(-array) →
(real)
Y-Koordinaten der rekonstruierten 3D-Punkte.
Z
(output_control) number(-array) →
(real)
Z-Koordinaten der rekonstruierten 3D-Punkte.
CovWP
(output_control) number(-array) →
(real)
Kovarianzmatrizen der rekonstruierten 3D-Punkte.
PointIdxOut
(output_control) number(-array) →
(integer)
Indizes der rekonstruierten 3D-Punkte.
reconstruct_surface_stereo
,
intersect_lines_of_sight
3D Metrology