match_rel_pose_ransacT_match_rel_pose_ransacMatchRelPoseRansacMatchRelPoseRansac (Operator)

Name

match_rel_pose_ransacT_match_rel_pose_ransacMatchRelPoseRansacMatchRelPoseRansac — 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)

Beschreibung

Ausgehend von einer Menge charakteristischer Punkte (Rows1Rows1Rows1Rows1rows1,Cols1Cols1Cols1Cols1cols1) und (Rows2Rows2Rows2Rows2rows2,Cols2Cols2Cols2Cols2cols2) in den beiden Eingabebildern Image1Image1Image1Image1image1, Image2Image2Image2Image2image2 und bekannten Kameramaparametern CamPar1CamPar1CamPar1CamPar1camPar1, CamPar2CamPar2CamPar2CamPar2camPar2 bestimmt match_rel_pose_ransacmatch_rel_pose_ransacMatchRelPoseRansacMatchRelPoseRansacMatchRelPoseRansac automatisch die Geometrie der Stereokonfiguration und findet die Korrespondenzen zwischen den Bildpunkten. Die Stereogeometrie ist durch die relative Orientierung RelPoseRelPoseRelPoseRelPoserelPose, auch relative Lage genannt, der Kameras zueinander gegeben, und alle Korrespondenzen müssen die Epipolargleichung erfüllen. RelPoseRelPoseRelPoseRelPoserelPose gibt die Orientierung der Kamera 1 relative zur Kamera 2 an (Siehe create_posecreate_poseCreatePoseCreatePoseCreatePose für weitere Information über die Beschreibung von Orientierungen.). Dies steht in Übereinstimmung mit der expliziten Kalibrierung einer Stereokonfiguration mit dem Operator calibrate_camerascalibrate_camerasCalibrateCamerasCalibrateCamerasCalibrateCameras. 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_posevector_to_rel_poseVectorToRelPoseVectorToRelPoseVectorToRelPose, auch nur bis auf einen globalen Skalierungsfaktor durchgeführt werden kann.

Der Operator match_rel_pose_ransacmatch_rel_pose_ransacMatchRelPoseRansacMatchRelPoseRansacMatchRelPoseRansac ist für ein nichtlineares Kameramodell konzipiert und beschreibt somit auch radiale Linsenverzeichnungen. Dies steht im Gegensatz zum Operator match_essential_matrix_ransacmatch_essential_matrix_ransacMatchEssentialMatrixRansacMatchEssentialMatrixRansacMatchEssentialMatrixRansac, welcher nur Geraden erhaltene, d.h. lineare, Kameras beschreibt. Kameraparameter werden mit den Argumenten CamPar1CamPar1CamPar1CamPar1camPar1 und CamPar2CamPar2CamPar2CamPar2camPar2 übergeben. Die 3D Richtungsvektoren und werden aus den Punktkoordinaten (Rows1Rows1Rows1Rows1rows1,Cols1Cols1Cols1Cols1cols1) und (Rows2Rows2Rows2Rows2rows2,Cols2Cols2Cols2Cols2cols2) durch Invertierung der Kameraprojektion berechnet (siehe Kalibrierung).

Das Matchingverfahren beruht auf charakteristischen Punkten, welche mit Punktoperatoren wie z.B. mit points_foerstnerpoints_foerstnerPointsFoerstnerPointsFoerstnerPointsFoerstner oder points_harrispoints_harrisPointsHarrisPointsHarrisPointsHarris 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 MaskSizeMaskSizeMaskSizeMaskSizemaskSize x MaskSizeMaskSizeMaskSizeMaskSizemaskSize. Es können drei Metriken für die Korrelation gewählt werden. Hat GrayMatchMethodGrayMatchMethodGrayMatchMethodGrayMatchMethodgrayMatchMethod den Wert 'ssd'"ssd""ssd""ssd""ssd", so wird das Quadrat der Grauwertdifferenzen verwendet, 'sad'"sad""sad""sad""sad" entspricht dem Betrag der Grauwertdifferenzen und 'ncc'"ncc""ncc""ncc""ncc" ist die normierte Kreuzkorrelation (siehe auch binocular_disparitybinocular_disparityBinocularDisparityBinocularDisparityBinocularDisparity). Diese Metrik wird über alle Punktpaare minimiert ('ssd'"ssd""ssd""ssd""ssd", 'sad'"sad""sad""sad""sad") bzw. maximiert ('ncc'"ncc""ncc""ncc""ncc"), ein so gefundenes Matching wird aber nur akzeptiert, falls der Wert der Metrik unter dem Wert von MatchThresholdMatchThresholdMatchThresholdMatchThresholdmatchThreshold ('ssd'"ssd""ssd""ssd""ssd", 'sad'"sad""sad""sad""sad") bzw. über demselben ('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 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 (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 RelPoseRelPoseRelPoseRelPoserelPose 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 DistanceThresholdDistanceThresholdDistanceThresholdDistanceThresholddistanceThreshold werden.

Der Parameter EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethod 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 allgmeinen 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 relativen Lage CovRelPoseCovRelPoseCovRelPoseCovRelPosecovRelPose 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 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. Points1Points1Points1Points1points1 enthält die Indizes der zugeordneten Eingabepunkte im ersten Bild, Points2Points2Points2Points2points2 die Indizes der dazu korrespondierenden Punkte im zweiten Bild.

Bei dem Operator match_rel_pose_ransacmatch_rel_pose_ransacMatchRelPoseRansacMatchRelPoseRansacMatchRelPoseRansac 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 RelPoseRelPoseRelPoseRelPoserelPose, CovRelPoseCovRelPoseCovRelPoseCovRelPosecovRelPose 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 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

Parameter

Image1Image1Image1Image1image1 (input_object)  singlechannelimage objectHImageHImageHobject (byte / uint2)

Eingabebild 1.

Image2Image2Image2Image2image2 (input_object)  singlechannelimage objectHImageHImageHobject (byte / uint2)

Eingabebild 2.

Rows1Rows1Rows1Rows1rows1 (input_control)  number-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Zeilenkoordinaten charakteristischer Punkte in Bild 1.

Restriktion: length(Rows1) >= 6 || length(Rows1) >= 3

Cols1Cols1Cols1Cols1cols1 (input_control)  number-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Spaltenkoordinaten charakteristischer Punkte in Bild 1.

Restriktion: length(Cols1) == length(Rows1)

Rows2Rows2Rows2Rows2rows2 (input_control)  number-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Zeilenkoordinaten charakteristischer Punkte in Bild 2.

Restriktion: length(Rows2) >= 6 || length(Rows2) >= 3

Cols2Cols2Cols2Cols2cols2 (input_control)  number-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Spaltenkoordinaten charakteristischer Punkte in Bild 2.

Restriktion: length(Cols2) == length(Rows2)

CamPar1CamPar1CamPar1CamPar1camPar1 (input_control)  campar HCamPar, HTupleHTupleHtuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*)

Kameraparameter der 1. Kamera.

CamPar2CamPar2CamPar2CamPar2camPar2 (input_control)  campar HCamPar, HTupleHTupleHtuple (real / integer / string) (double / int / long / string) (double / Hlong / HString) (double / Hlong / char*)

Kameraparameter der 2. Kamera.

GrayMatchMethodGrayMatchMethodGrayMatchMethodGrayMatchMethodgrayMatchMethod (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Metrik für den Vergleich der Grauwerte.

Defaultwert: 'ssd' "ssd" "ssd" "ssd" "ssd"

Werteliste: 'ncc'"ncc""ncc""ncc""ncc", 'sad'"sad""sad""sad""sad", 'ssd'"ssd""ssd""ssd""ssd"

MaskSizeMaskSizeMaskSizeMaskSizemaskSize (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Größe der Grauwertmaske.

Defaultwert: 10

Typischer Wertebereich: 3 ≤ MaskSize MaskSize MaskSize MaskSize maskSize ≤ 15

Restriktion: MaskSize >= 1

RowMoveRowMoveRowMoveRowMoverowMove (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Mittlere Zeilenverschiebung.

Defaultwert: 0

Typischer Wertebereich: 0 ≤ RowMove RowMove RowMove RowMove rowMove ≤ 200

ColMoveColMoveColMoveColMovecolMove (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Mittlere Spaltenverschiebung.

Defaultwert: 0

Typischer Wertebereich: 0 ≤ ColMove ColMove ColMove ColMove colMove ≤ 200

RowToleranceRowToleranceRowToleranceRowTolerancerowTolerance (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Halbe Höhe des Suchfensters für das Punktmatching.

Defaultwert: 200

Typischer Wertebereich: 50 ≤ RowTolerance RowTolerance RowTolerance RowTolerance rowTolerance ≤ 200

Restriktion: RowTolerance >= 1

ColToleranceColToleranceColToleranceColTolerancecolTolerance (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Halbe Breite des Suchfensters für das Punktmatching.

Defaultwert: 200

Typischer Wertebereich: 50 ≤ ColTolerance ColTolerance ColTolerance ColTolerance colTolerance ≤ 200

Restriktion: ColTolerance >= 1

RotationRotationRotationRotationrotation (input_control)  angle.rad(-array) HTupleHTupleHtuple (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

MatchThresholdMatchThresholdMatchThresholdMatchThresholdmatchThreshold (input_control)  number HTupleHTupleHtuple (integer / real) (int / long / double) (Hlong / double) (Hlong / double)

Schwellwert für Grauwertkorrespondenzen.

Defaultwert: 10

Wertevorschläge: 10, 20, 50, 100, 0.9, 0.7

EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethod (input_control)  string HTupleHTupleHtuple (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"

Werteliste: 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard", '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_normalized_dlt'"trans_normalized_dlt""trans_normalized_dlt""trans_normalized_dlt""trans_normalized_dlt"

DistanceThresholdDistanceThresholdDistanceThresholdDistanceThresholddistanceThreshold (input_control)  number HTupleHTupleHtuple (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 ≤ 5

Restriktion: DistanceThreshold > 0

RandSeedRandSeedRandSeedRandSeedrandSeed (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Startwert für den Zufallszahlengenerator.

Defaultwert: 0

RelPoseRelPoseRelPoseRelPoserelPose (output_control)  pose HPose, HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Berechnete relative Orientierung/Lage der Kameras zueinander (3D-Lage).

CovRelPoseCovRelPoseCovRelPoseCovRelPosecovRelPose (output_control)  real-array HTupleHTupleHtuple (real) (double) (double) (double)

6x6 Kovarianzmatrix der relativen Orientierung.

ErrorErrorErrorErrorerror (output_control)  real(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Mittlerer, quadratischer Epipolar Abstand.

Points1Points1Points1Points1points1 (output_control)  integer-array HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Indizes der zugeordneten Eingabepunkte aus Bild 1.

Points2Points2Points2Points2points2 (output_control)  integer-array HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Indizes der zugeordneten Eingabepunkte aus Bild 2.

Vorgänger

points_foerstnerpoints_foerstnerPointsFoerstnerPointsFoerstnerPointsFoerstner, points_harrispoints_harrisPointsHarrisPointsHarrisPointsHarris

Nachfolger

vector_to_rel_posevector_to_rel_poseVectorToRelPoseVectorToRelPoseVectorToRelPose, gen_binocular_rectification_mapgen_binocular_rectification_mapGenBinocularRectificationMapGenBinocularRectificationMapGenBinocularRectificationMap

Siehe auch

binocular_calibrationbinocular_calibrationBinocularCalibrationBinocularCalibrationBinocularCalibration, match_fundamental_matrix_ransacmatch_fundamental_matrix_ransacMatchFundamentalMatrixRansacMatchFundamentalMatrixRansacMatchFundamentalMatrixRansac, match_essential_matrix_ransacmatch_essential_matrix_ransacMatchEssentialMatrixRansacMatchEssentialMatrixRansacMatchEssentialMatrixRansac, create_posecreate_poseCreatePoseCreatePoseCreatePose

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