match_rel_pose_ransac T_match_rel_pose_ransac MatchRelPoseRansac MatchRelPoseRansac match_rel_pose_ransac (Operator)
Name
match_rel_pose_ransac T_match_rel_pose_ransac MatchRelPoseRansac MatchRelPoseRansac match_rel_pose_ransac
— Automatische Bestimmung der relativen Orientierung zweier Kameras
durch Zuordnung von Bildpunkten.
Signatur
match_rel_pose_ransac (Image1 , Image2 : : Rows1 , Cols1 , Rows2 , Cols2 , CamPar1 , CamPar2 , GrayMatchMethod , MaskSize , RowMove , ColMove , RowTolerance , ColTolerance , Rotation , MatchThreshold , EstimationMethod , DistanceThreshold , RandSeed : RelPose , CovRelPose , Error , Points1 , Points2 )
Herror T_match_rel_pose_ransac (const Hobject Image1 , const Hobject Image2 , const Htuple Rows1 , const Htuple Cols1 , const Htuple Rows2 , const Htuple Cols2 , const Htuple CamPar1 , const Htuple CamPar2 , const Htuple GrayMatchMethod , const Htuple MaskSize , const Htuple RowMove , const Htuple ColMove , const Htuple RowTolerance , const Htuple ColTolerance , const Htuple Rotation , const Htuple MatchThreshold , const Htuple EstimationMethod , const Htuple DistanceThreshold , const Htuple RandSeed , Htuple* RelPose , Htuple* CovRelPose , Htuple* Error , Htuple* Points1 , Htuple* Points2 )
void MatchRelPoseRansac (const HObject& Image1 , const HObject& Image2 , const HTuple& Rows1 , const HTuple& Cols1 , const HTuple& Rows2 , const HTuple& Cols2 , const HTuple& CamPar1 , const HTuple& CamPar2 , const HTuple& GrayMatchMethod , const HTuple& MaskSize , const HTuple& RowMove , const HTuple& ColMove , const HTuple& RowTolerance , const HTuple& ColTolerance , const HTuple& Rotation , const HTuple& MatchThreshold , const HTuple& EstimationMethod , const HTuple& DistanceThreshold , const HTuple& RandSeed , HTuple* RelPose , HTuple* CovRelPose , HTuple* Error , HTuple* Points1 , HTuple* Points2 )
HPose HImage ::MatchRelPoseRansac (const HImage& Image2 , const HTuple& Rows1 , const HTuple& Cols1 , const HTuple& Rows2 , const HTuple& Cols2 , const HCamPar& CamPar1 , const HCamPar& CamPar2 , const HString& GrayMatchMethod , Hlong MaskSize , Hlong RowMove , Hlong ColMove , Hlong RowTolerance , Hlong ColTolerance , const HTuple& Rotation , const HTuple& MatchThreshold , const HString& EstimationMethod , const HTuple& DistanceThreshold , Hlong RandSeed , HTuple* CovRelPose , HTuple* Error , HTuple* Points1 , HTuple* Points2 ) const
HPose HImage ::MatchRelPoseRansac (const HImage& Image2 , const HTuple& Rows1 , const HTuple& Cols1 , const HTuple& Rows2 , const HTuple& Cols2 , const HCamPar& CamPar1 , const HCamPar& CamPar2 , const HString& GrayMatchMethod , Hlong MaskSize , Hlong RowMove , Hlong ColMove , Hlong RowTolerance , Hlong ColTolerance , double Rotation , Hlong MatchThreshold , const HString& EstimationMethod , double DistanceThreshold , Hlong RandSeed , HTuple* CovRelPose , double* Error , HTuple* Points1 , HTuple* Points2 ) const
HPose HImage ::MatchRelPoseRansac (const HImage& Image2 , const HTuple& Rows1 , const HTuple& Cols1 , const HTuple& Rows2 , const HTuple& Cols2 , const HCamPar& CamPar1 , const HCamPar& CamPar2 , const char* GrayMatchMethod , Hlong MaskSize , Hlong RowMove , Hlong ColMove , Hlong RowTolerance , Hlong ColTolerance , double Rotation , Hlong MatchThreshold , const char* EstimationMethod , double DistanceThreshold , Hlong RandSeed , HTuple* CovRelPose , double* Error , HTuple* Points1 , HTuple* Points2 ) const
HPose HImage ::MatchRelPoseRansac (const HImage& Image2 , const HTuple& Rows1 , const HTuple& Cols1 , const HTuple& Rows2 , const HTuple& Cols2 , const HCamPar& CamPar1 , const HCamPar& CamPar2 , const wchar_t* GrayMatchMethod , Hlong MaskSize , Hlong RowMove , Hlong ColMove , Hlong RowTolerance , Hlong ColTolerance , double Rotation , Hlong MatchThreshold , const wchar_t* EstimationMethod , double DistanceThreshold , Hlong RandSeed , HTuple* CovRelPose , double* Error , HTuple* Points1 , HTuple* Points2 ) const
(Nur Windows)
HPose HCamPar ::MatchRelPoseRansac (const HImage& Image1 , const HImage& Image2 , const HTuple& Rows1 , const HTuple& Cols1 , const HTuple& Rows2 , const HTuple& Cols2 , const HCamPar& CamPar2 , const HString& GrayMatchMethod , Hlong MaskSize , Hlong RowMove , Hlong ColMove , Hlong RowTolerance , Hlong ColTolerance , const HTuple& Rotation , const HTuple& MatchThreshold , const HString& EstimationMethod , const HTuple& DistanceThreshold , Hlong RandSeed , HTuple* CovRelPose , HTuple* Error , HTuple* Points1 , HTuple* Points2 ) const
HPose HCamPar ::MatchRelPoseRansac (const HImage& Image1 , const HImage& Image2 , const HTuple& Rows1 , const HTuple& Cols1 , const HTuple& Rows2 , const HTuple& Cols2 , const HCamPar& CamPar2 , const HString& GrayMatchMethod , Hlong MaskSize , Hlong RowMove , Hlong ColMove , Hlong RowTolerance , Hlong ColTolerance , double Rotation , Hlong MatchThreshold , const HString& EstimationMethod , double DistanceThreshold , Hlong RandSeed , HTuple* CovRelPose , double* Error , HTuple* Points1 , HTuple* Points2 ) const
HPose HCamPar ::MatchRelPoseRansac (const HImage& Image1 , const HImage& Image2 , const HTuple& Rows1 , const HTuple& Cols1 , const HTuple& Rows2 , const HTuple& Cols2 , const HCamPar& CamPar2 , const char* GrayMatchMethod , Hlong MaskSize , Hlong RowMove , Hlong ColMove , Hlong RowTolerance , Hlong ColTolerance , double Rotation , Hlong MatchThreshold , const char* EstimationMethod , double DistanceThreshold , Hlong RandSeed , HTuple* CovRelPose , double* Error , HTuple* Points1 , HTuple* Points2 ) const
HPose HCamPar ::MatchRelPoseRansac (const HImage& Image1 , const HImage& Image2 , const HTuple& Rows1 , const HTuple& Cols1 , const HTuple& Rows2 , const HTuple& Cols2 , const HCamPar& CamPar2 , const wchar_t* GrayMatchMethod , Hlong MaskSize , Hlong RowMove , Hlong ColMove , Hlong RowTolerance , Hlong ColTolerance , double Rotation , Hlong MatchThreshold , const wchar_t* EstimationMethod , double DistanceThreshold , Hlong RandSeed , HTuple* CovRelPose , double* Error , HTuple* Points1 , HTuple* Points2 ) const
(Nur Windows)
HTuple HPose ::MatchRelPoseRansac (const HImage& Image1 , const HImage& Image2 , const HTuple& Rows1 , const HTuple& Cols1 , const HTuple& Rows2 , const HTuple& Cols2 , const HCamPar& CamPar1 , const HCamPar& CamPar2 , const HString& GrayMatchMethod , Hlong MaskSize , Hlong RowMove , Hlong ColMove , Hlong RowTolerance , Hlong ColTolerance , const HTuple& Rotation , const HTuple& MatchThreshold , const HString& EstimationMethod , const HTuple& DistanceThreshold , Hlong RandSeed , HTuple* Error , HTuple* Points1 , HTuple* Points2 )
HTuple HPose ::MatchRelPoseRansac (const HImage& Image1 , const HImage& Image2 , const HTuple& Rows1 , const HTuple& Cols1 , const HTuple& Rows2 , const HTuple& Cols2 , const HCamPar& CamPar1 , const HCamPar& CamPar2 , const HString& GrayMatchMethod , Hlong MaskSize , Hlong RowMove , Hlong ColMove , Hlong RowTolerance , Hlong ColTolerance , double Rotation , Hlong MatchThreshold , const HString& EstimationMethod , double DistanceThreshold , Hlong RandSeed , double* Error , HTuple* Points1 , HTuple* Points2 )
HTuple HPose ::MatchRelPoseRansac (const HImage& Image1 , const HImage& Image2 , const HTuple& Rows1 , const HTuple& Cols1 , const HTuple& Rows2 , const HTuple& Cols2 , const HCamPar& CamPar1 , const HCamPar& CamPar2 , const char* GrayMatchMethod , Hlong MaskSize , Hlong RowMove , Hlong ColMove , Hlong RowTolerance , Hlong ColTolerance , double Rotation , Hlong MatchThreshold , const char* EstimationMethod , double DistanceThreshold , Hlong RandSeed , double* Error , HTuple* Points1 , HTuple* Points2 )
HTuple HPose ::MatchRelPoseRansac (const HImage& Image1 , const HImage& Image2 , const HTuple& Rows1 , const HTuple& Cols1 , const HTuple& Rows2 , const HTuple& Cols2 , const HCamPar& CamPar1 , const HCamPar& CamPar2 , const wchar_t* GrayMatchMethod , Hlong MaskSize , Hlong RowMove , Hlong ColMove , Hlong RowTolerance , Hlong ColTolerance , double Rotation , Hlong MatchThreshold , const wchar_t* EstimationMethod , double DistanceThreshold , Hlong RandSeed , double* Error , HTuple* Points1 , HTuple* Points2 )
(Nur Windows)
static void HOperatorSet .MatchRelPoseRansac (HObject image1 , HObject image2 , HTuple rows1 , HTuple cols1 , HTuple rows2 , HTuple cols2 , HTuple camPar1 , HTuple camPar2 , HTuple grayMatchMethod , HTuple maskSize , HTuple rowMove , HTuple colMove , HTuple rowTolerance , HTuple colTolerance , HTuple rotation , HTuple matchThreshold , HTuple estimationMethod , HTuple distanceThreshold , HTuple randSeed , out HTuple relPose , out HTuple covRelPose , out HTuple error , out HTuple points1 , out HTuple points2 )
HPose HImage .MatchRelPoseRansac (HImage image2 , HTuple rows1 , HTuple cols1 , HTuple rows2 , HTuple cols2 , HCamPar camPar1 , HCamPar camPar2 , string grayMatchMethod , int maskSize , int rowMove , int colMove , int rowTolerance , int colTolerance , HTuple rotation , HTuple matchThreshold , string estimationMethod , HTuple distanceThreshold , int randSeed , out HTuple covRelPose , out HTuple error , out HTuple points1 , out HTuple points2 )
HPose HImage .MatchRelPoseRansac (HImage image2 , HTuple rows1 , HTuple cols1 , HTuple rows2 , HTuple cols2 , HCamPar camPar1 , HCamPar camPar2 , string grayMatchMethod , int maskSize , int rowMove , int colMove , int rowTolerance , int colTolerance , double rotation , int matchThreshold , string estimationMethod , double distanceThreshold , int randSeed , out HTuple covRelPose , out double error , out HTuple points1 , out HTuple points2 )
HPose HCamPar .MatchRelPoseRansac (HImage image1 , HImage image2 , HTuple rows1 , HTuple cols1 , HTuple rows2 , HTuple cols2 , HCamPar camPar2 , string grayMatchMethod , int maskSize , int rowMove , int colMove , int rowTolerance , int colTolerance , HTuple rotation , HTuple matchThreshold , string estimationMethod , HTuple distanceThreshold , int randSeed , out HTuple covRelPose , out HTuple error , out HTuple points1 , out HTuple points2 )
HPose HCamPar .MatchRelPoseRansac (HImage image1 , HImage image2 , HTuple rows1 , HTuple cols1 , HTuple rows2 , HTuple cols2 , HCamPar camPar2 , string grayMatchMethod , int maskSize , int rowMove , int colMove , int rowTolerance , int colTolerance , double rotation , int matchThreshold , string estimationMethod , double distanceThreshold , int randSeed , out HTuple covRelPose , out double error , out HTuple points1 , out HTuple points2 )
HTuple HPose .MatchRelPoseRansac (HImage image1 , HImage image2 , HTuple rows1 , HTuple cols1 , HTuple rows2 , HTuple cols2 , HCamPar camPar1 , HCamPar camPar2 , string grayMatchMethod , int maskSize , int rowMove , int colMove , int rowTolerance , int colTolerance , HTuple rotation , HTuple matchThreshold , string estimationMethod , HTuple distanceThreshold , int randSeed , out HTuple error , out HTuple points1 , out HTuple points2 )
HTuple HPose .MatchRelPoseRansac (HImage image1 , HImage image2 , HTuple rows1 , HTuple cols1 , HTuple rows2 , HTuple cols2 , HCamPar camPar1 , HCamPar camPar2 , string grayMatchMethod , int maskSize , int rowMove , int colMove , int rowTolerance , int colTolerance , double rotation , int matchThreshold , string estimationMethod , double distanceThreshold , int randSeed , out double error , out HTuple points1 , out HTuple points2 )
def match_rel_pose_ransac (image_1 : HObject, image_2 : HObject, rows_1 : Sequence[Union[float, int]], cols_1 : Sequence[Union[float, int]], rows_2 : Sequence[Union[float, int]], cols_2 : Sequence[Union[float, int]], cam_par_1 : Sequence[Union[float, int, str]], cam_par_2 : Sequence[Union[float, int, str]], gray_match_method : str, mask_size : int, row_move : int, col_move : int, row_tolerance : int, col_tolerance : int, rotation : MaybeSequence[Union[float, int]], match_threshold : Union[int, float], estimation_method : str, distance_threshold : Union[float, int], rand_seed : int) -> Tuple[Sequence[Union[int, float]], Sequence[float], Sequence[float], Sequence[int], Sequence[int]]
def match_rel_pose_ransac_s (image_1 : HObject, image_2 : HObject, rows_1 : Sequence[Union[float, int]], cols_1 : Sequence[Union[float, int]], rows_2 : Sequence[Union[float, int]], cols_2 : Sequence[Union[float, int]], cam_par_1 : Sequence[Union[float, int, str]], cam_par_2 : Sequence[Union[float, int, str]], gray_match_method : str, mask_size : int, row_move : int, col_move : int, row_tolerance : int, col_tolerance : int, rotation : MaybeSequence[Union[float, int]], match_threshold : Union[int, float], estimation_method : str, distance_threshold : Union[float, int], rand_seed : int) -> Tuple[Sequence[Union[int, float]], Sequence[float], float, Sequence[int], Sequence[int]]
Beschreibung
Ausgehend von einer Menge charakteristischer Punkte
(Rows1 Rows1 Rows1 Rows1 rows1 rows_1
,Cols1 Cols1 Cols1 Cols1 cols1 cols_1
) und
(Rows2 Rows2 Rows2 Rows2 rows2 rows_2
,Cols2 Cols2 Cols2 Cols2 cols2 cols_2
) in den beiden Eingabebildern
Image1 Image1 Image1 Image1 image1 image_1
, Image2 Image2 Image2 Image2 image2 image_2
und bekannten Kameramaparametern
CamPar1 CamPar1 CamPar1 CamPar1 camPar1 cam_par_1
, CamPar2 CamPar2 CamPar2 CamPar2 camPar2 cam_par_2
bestimmt match_rel_pose_ransac match_rel_pose_ransac MatchRelPoseRansac MatchRelPoseRansac MatchRelPoseRansac match_rel_pose_ransac
automatisch die Geometrie
der Stereokonfiguration und findet die Korrespondenzen zwischen den
Bildpunkten. Die Stereogeometrie ist durch die relative
Orientierung RelPose RelPose RelPose RelPose relPose rel_pose
, auch relative Lage genannt,
der Kameras zueinander gegeben, und alle Korrespondenzen müssen die
Epipolargleichung erfüllen.
RelPose RelPose RelPose RelPose relPose rel_pose
gibt die Orientierung der Kamera 1 relative zur
Kamera 2 an (Siehe create_pose create_pose CreatePose CreatePose CreatePose create_pose
für weitere Information
über die Beschreibung von Orientierungen.).
Dies steht in Übereinstimmung mit der expliziten Kalibrierung einer
Stereokonfiguration mit dem Operator calibrate_cameras calibrate_cameras CalibrateCameras CalibrateCameras CalibrateCameras calibrate_cameras
.
Sei R,t die Rotation beziehungsweise Translation der relativen
Orientierung. Die Essential-Matrix E ist dann durch
definiert,
wobei
eine 3x3 schiefsymmetrische
Matrix ist, welche das Kreuzprodukt mit dem Vektor t beschreibt.
Die gesuchte Lage kann mittels der Epipolar-Gleichungen bestimmt werden:
Beachte, dass die Essential-Matrix eine homogene Größe ist, d.h. sie
ist bis auf einen Skalierungsfaktor bestimmt. Somit kann der
Translationsvektor der relativen Orientierung auch nur bis auf eine
Skalierung berechnet werden. Der Operator wird diesen Vektor
auf die Länge eins normiert berechnen. Als Konsequenz ergibt sich, dass
eine anschließende Rekonstruktion der betrachteten Szene,
z.B. mittels des Operators vector_to_rel_pose vector_to_rel_pose VectorToRelPose VectorToRelPose VectorToRelPose vector_to_rel_pose
, auch nur
bis auf einen globalen Skalierungsfaktor durchgeführt werden
kann.
Der Operator match_rel_pose_ransac match_rel_pose_ransac MatchRelPoseRansac MatchRelPoseRansac MatchRelPoseRansac match_rel_pose_ransac
ist für ein nichtlineares
Kameramodell konzipiert und beschreibt somit auch radiale
Linsenverzeichnungen. Dies steht im Gegensatz zum Operator
match_essential_matrix_ransac match_essential_matrix_ransac MatchEssentialMatrixRansac MatchEssentialMatrixRansac MatchEssentialMatrixRansac match_essential_matrix_ransac
, welcher nur Geraden
erhaltene, d.h. lineare, Kameras beschreibt. Kameraparameter
werden mit den Argumenten CamPar1 CamPar1 CamPar1 CamPar1 camPar1 cam_par_1
und CamPar2 CamPar2 CamPar2 CamPar2 camPar2 cam_par_2
übergeben. Die 3D Richtungsvektoren
und
werden
aus den Punktkoordinaten (Rows1 Rows1 Rows1 Rows1 rows1 rows_1
,Cols1 Cols1 Cols1 Cols1 cols1 cols_1
) und
(Rows2 Rows2 Rows2 Rows2 rows2 rows_2
,Cols2 Cols2 Cols2 Cols2 cols2 cols_2
) durch Invertierung der
Kameraprojektion berechnet (siehe Kalibrierung ).
Das Matchingverfahren beruht auf charakteristischen Punkten, welche mit
Punktoperatoren wie z.B. mit points_foerstner points_foerstner PointsFoerstner PointsFoerstner PointsFoerstner points_foerstner
oder
points_harris points_harris PointsHarris PointsHarris PointsHarris points_harris
extrahiert wurden.
Die Bestimmung der relativen Lage 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 relativen Lage zu finden, welche die Anzahl
der korrespondierenden Punktpaare unter Erfüllung der Epipolarbedingung
maximiert.
Die Größe der Grauwertfenster beträgt MaskSize MaskSize MaskSize MaskSize maskSize mask_size
x MaskSize MaskSize MaskSize MaskSize maskSize mask_size
. Es
können drei Metriken für die Korrelation gewählt werden. Hat
GrayMatchMethod GrayMatchMethod GrayMatchMethod GrayMatchMethod grayMatchMethod gray_match_method
den Wert 'ssd' "ssd" "ssd" "ssd" "ssd" "ssd" , so wird das
Quadrat der Grauwertdifferenzen verwendet, 'sad' "sad" "sad" "sad" "sad" "sad" entspricht
dem Betrag der Grauwertdifferenzen und 'ncc' "ncc" "ncc" "ncc" "ncc" "ncc" ist die
normierte Kreuzkorrelation (siehe auch binocular_disparity binocular_disparity BinocularDisparity BinocularDisparity BinocularDisparity binocular_disparity
).
Diese Metrik wird über alle Punktpaare
minimiert ('ssd' "ssd" "ssd" "ssd" "ssd" "ssd" , 'sad' "sad" "sad" "sad" "sad" "sad" ) bzw. maximiert
('ncc' "ncc" "ncc" "ncc" "ncc" "ncc" ), ein so gefundenes Matching wird aber nur
akzeptiert, falls der Wert der Metrik unter dem Wert von
MatchThreshold MatchThreshold MatchThreshold MatchThreshold matchThreshold match_threshold
('ssd' "ssd" "ssd" "ssd" "ssd" "ssd" , 'sad' "sad" "sad" "sad" "sad" "sad" ) bzw. über
demselben ('ncc' "ncc" "ncc" "ncc" "ncc" "ncc" ) liegt.
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 RowMove RowMove RowMove RowMove rowMove row_move
und ColMove ColMove ColMove ColMove colMove col_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 Rotation Rotation Rotation Rotation rotation rotation
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.
Ist das initiale Punktmatching bestimmt, wird es anschließend durch
einen randomisierten Auswahlalgorithmus (RANSAC) zur Bestimmung der
relativen Lage RelPose RelPose RelPose RelPose relPose rel_pose
benutzt. Dabei wird diejenige relative Lage
bestimmt, welche mit einer maximalen Anzahl an Korrespondenzen konsistent
ist.
Damit ein Punktpaar als Korrespondenz akzeptiert wird, darf der Abstand
der Punkte von der korrespondierenden Epipolarlinie nicht größer als
DistanceThreshold DistanceThreshold DistanceThreshold DistanceThreshold distanceThreshold distance_threshold
werden.
Der Parameter EstimationMethod EstimationMethod EstimationMethod EstimationMethod estimationMethod estimation_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" "normalized_dlt" und
'gold_standard' "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" "trans_normalized_dlt" und 'trans_gold_standard' "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" "normalized_dlt" oder 'trans_normalized_dlt' "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" "gold_standard" oder 'trans_gold_standard' "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 relativen Lage CovRelPose CovRelPose CovRelPose CovRelPose covRelPose cov_rel_pose
wird zusätzlich
berechnet.
Es ist zu beachten, dass sich je nach gewähltem Verfahren nicht nur die
berechnete Lage unterscheidet, sondern auch die zugeordneten
Punkte verschieden sein können.
Der Wert Error Error Error Error error error
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. Points1 Points1 Points1 Points1 points1 points_1
enthält die Indizes der
zugeordneten Eingabepunkte im ersten Bild, Points2 Points2 Points2 Points2 points2 points_2
die Indizes der
dazu korrespondierenden Punkte im zweiten Bild.
Bei dem Operator match_rel_pose_ransac match_rel_pose_ransac MatchRelPoseRansac MatchRelPoseRansac MatchRelPoseRansac match_rel_pose_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 relativen Lage nicht eindeutig lösbar ist.
Es werden daher auch beide Lösungen ausgegeben. Das bedeutet, dass
die Ausgabeparameter RelPose RelPose RelPose RelPose relPose rel_pose
, CovRelPose CovRelPose CovRelPose CovRelPose covRelPose cov_rel_pose
und
Error Error Error Error error error
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 RandSeed RandSeed RandSeed RandSeed randSeed rand_seed
kann benutzt werden, um das
randomisierte Verhalten des RANSAC-Verfahrens zu kontrollieren und
somit reproduzierbare Ergebnisse zu erhalten. Wird
RandSeed RandSeed RandSeed RandSeed randSeed rand_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
RandSeed RandSeed RandSeed RandSeed randSeed rand_seed
initialisiert wird. Ist RandSeed RandSeed RandSeed RandSeed randSeed rand_seed
=
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).
Wird ohne Parallelisierung verarbeitet.
Parameter
Image1 Image1 Image1 Image1 image1 image_1
(input_object) singlechannelimage →
object HImage HObject HImage Hobject (byte / uint2)
Eingabebild 1.
Image2 Image2 Image2 Image2 image2 image_2
(input_object) singlechannelimage →
object HImage HObject HImage Hobject (byte / uint2)
Eingabebild 2.
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)
Zeilenkoordinaten charakteristischer Punkte
in Bild 1.
Restriktion: length(Rows1) >= 6 || length(Rows1) >= 3
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)
Spaltenkoordinaten charakteristischer Punkte
in Bild 1.
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)
Zeilenkoordinaten charakteristischer Punkte
in Bild 2.
Restriktion: length(Rows2) >= 6 || length(Rows2) >= 3
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)
Spaltenkoordinaten charakteristischer Punkte
in Bild 2.
Restriktion: length(Cols2) == length(Rows2)
CamPar1 CamPar1 CamPar1 CamPar1 camPar1 cam_par_1
(input_control) campar →
HCamPar , HTuple Sequence[Union[float, int, str]] HTuple Htuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*)
Kameraparameter der 1. Kamera.
CamPar2 CamPar2 CamPar2 CamPar2 camPar2 cam_par_2
(input_control) campar →
HCamPar , HTuple Sequence[Union[float, int, str]] HTuple Htuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*)
Kameraparameter der 2. Kamera.
GrayMatchMethod GrayMatchMethod GrayMatchMethod GrayMatchMethod grayMatchMethod gray_match_method
(input_control) string →
HTuple str HTuple Htuple (string) (string ) (HString ) (char* )
Metrik für den Vergleich der Grauwerte.
Defaultwert:
'ssd'
"ssd"
"ssd"
"ssd"
"ssd"
"ssd"
Werteliste: 'ncc' "ncc" "ncc" "ncc" "ncc" "ncc" , 'sad' "sad" "sad" "sad" "sad" "sad" , 'ssd' "ssd" "ssd" "ssd" "ssd" "ssd"
MaskSize MaskSize MaskSize MaskSize maskSize mask_size
(input_control) integer →
HTuple int HTuple Htuple (integer) (int / long) (Hlong ) (Hlong )
Größe der Grauwertmaske.
Defaultwert: 10
Typischer Wertebereich: 3
≤
MaskSize
MaskSize
MaskSize
MaskSize
maskSize
mask_size
≤
15
Restriktion: MaskSize >= 1
RowMove RowMove RowMove RowMove rowMove row_move
(input_control) integer →
HTuple int HTuple Htuple (integer) (int / long) (Hlong ) (Hlong )
Mittlere Zeilenverschiebung.
Defaultwert: 0
Typischer Wertebereich: 0
≤
RowMove
RowMove
RowMove
RowMove
rowMove
row_move
≤
200
ColMove ColMove ColMove ColMove colMove col_move
(input_control) integer →
HTuple int HTuple Htuple (integer) (int / long) (Hlong ) (Hlong )
Mittlere Spaltenverschiebung.
Defaultwert: 0
Typischer Wertebereich: 0
≤
ColMove
ColMove
ColMove
ColMove
colMove
col_move
≤
200
RowTolerance RowTolerance RowTolerance RowTolerance rowTolerance row_tolerance
(input_control) integer →
HTuple int HTuple Htuple (integer) (int / long) (Hlong ) (Hlong )
Halbe Höhe des Suchfensters für das Punktmatching.
Defaultwert: 200
Typischer Wertebereich: 50
≤
RowTolerance
RowTolerance
RowTolerance
RowTolerance
rowTolerance
row_tolerance
≤
200
Restriktion: RowTolerance >= 1
ColTolerance ColTolerance ColTolerance ColTolerance colTolerance col_tolerance
(input_control) integer →
HTuple int HTuple Htuple (integer) (int / long) (Hlong ) (Hlong )
Halbe Breite des Suchfensters für das Punktmatching.
Defaultwert: 200
Typischer Wertebereich: 50
≤
ColTolerance
ColTolerance
ColTolerance
ColTolerance
colTolerance
col_tolerance
≤
200
Restriktion: ColTolerance >= 1
Rotation Rotation Rotation Rotation rotation rotation
(input_control) angle.rad(-array) →
HTuple MaybeSequence[Union[float, int]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Drehwinkelbereich.
Defaultwert: 0.0
Wertevorschläge: 0.0, 0.1, -0.1, 0.7854, 1.571, 3.142
MatchThreshold MatchThreshold MatchThreshold MatchThreshold matchThreshold match_threshold
(input_control) number →
HTuple Union[int, float] HTuple Htuple (integer / real) (int / long / double) (Hlong / double) (Hlong / double)
Schwellenwert für Grauwertkorrespondenzen.
Defaultwert: 10
Wertevorschläge: 10, 20, 50, 100, 0.9, 0.7
EstimationMethod EstimationMethod EstimationMethod EstimationMethod estimationMethod estimation_method
(input_control) string →
HTuple str HTuple Htuple (string) (string ) (HString ) (char* )
Algorithmus zur Berechnung der relativen Lage
und zur Auswahl spezieller relativer Lagen.
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"
DistanceThreshold DistanceThreshold DistanceThreshold DistanceThreshold distanceThreshold distance_threshold
(input_control) number →
HTuple Union[float, int] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Maximale Abweichung eines Punktes von seiner
Epipolarlinie.
Defaultwert: 1
Typischer Wertebereich: 0.5
≤
DistanceThreshold
DistanceThreshold
DistanceThreshold
DistanceThreshold
distanceThreshold
distance_threshold
≤
5
Restriktion: DistanceThreshold > 0
RandSeed RandSeed RandSeed RandSeed randSeed rand_seed
(input_control) integer →
HTuple int HTuple Htuple (integer) (int / long) (Hlong ) (Hlong )
Startwert für den Zufallszahlengenerator.
Defaultwert: 0
RelPose RelPose RelPose RelPose relPose rel_pose
(output_control) pose →
HPose , HTuple Sequence[Union[int, float]] HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Berechnete relative Orientierung/Lage der Kameras
zueinander (3D-Lage).
CovRelPose CovRelPose CovRelPose CovRelPose covRelPose cov_rel_pose
(output_control) real-array →
HTuple Sequence[float] HTuple Htuple (real) (double ) (double ) (double )
6x6 Kovarianzmatrix der relativen
Orientierung.
Error Error Error Error error error
(output_control) real(-array) →
HTuple Sequence[float] HTuple Htuple (real) (double ) (double ) (double )
Mittlerer, quadratischer Epipolar Abstand.
Points1 Points1 Points1 Points1 points1 points_1
(output_control) integer-array →
HTuple Sequence[int] HTuple Htuple (integer) (int / long) (Hlong ) (Hlong )
Indizes der zugeordneten Eingabepunkte aus Bild 1.
Points2 Points2 Points2 Points2 points2 points_2
(output_control) integer-array →
HTuple Sequence[int] HTuple Htuple (integer) (int / long) (Hlong ) (Hlong )
Indizes der zugeordneten Eingabepunkte aus Bild 2.
Vorgänger
points_foerstner points_foerstner PointsFoerstner PointsFoerstner PointsFoerstner points_foerstner
,
points_harris points_harris PointsHarris PointsHarris PointsHarris points_harris
Nachfolger
vector_to_rel_pose vector_to_rel_pose VectorToRelPose VectorToRelPose VectorToRelPose vector_to_rel_pose
,
gen_binocular_rectification_map gen_binocular_rectification_map GenBinocularRectificationMap GenBinocularRectificationMap GenBinocularRectificationMap gen_binocular_rectification_map
Siehe auch
binocular_calibration binocular_calibration BinocularCalibration BinocularCalibration BinocularCalibration binocular_calibration
,
match_fundamental_matrix_ransac match_fundamental_matrix_ransac MatchFundamentalMatrixRansac MatchFundamentalMatrixRansac MatchFundamentalMatrixRansac match_fundamental_matrix_ransac
,
match_essential_matrix_ransac match_essential_matrix_ransac MatchEssentialMatrixRansac MatchEssentialMatrixRansac MatchEssentialMatrixRansac match_essential_matrix_ransac
,
create_pose create_pose CreatePose CreatePose CreatePose create_pose
Literatur
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.
Modul
3D Metrology