proj_match_points_ransac_guidedT_proj_match_points_ransac_guidedProjMatchPointsRansacGuidedProjMatchPointsRansacGuided (Operator)

Name

proj_match_points_ransac_guidedT_proj_match_points_ransac_guidedProjMatchPointsRansacGuidedProjMatchPointsRansacGuided — Bestimmt eine projektive Transformationsmatrix automatisch durch Zuordnung von Punkten zwischen zwei Bildern basierend auf einer bekannten Näherung der projektiven Transformationsmatrix.

Signatur

proj_match_points_ransac_guided(Image1, Image2 : : Rows1, Cols1, Rows2, Cols2, GrayMatchMethod, MaskSize, HomMat2DGuide, DistanceTolerance, MatchThreshold, EstimationMethod, DistanceThreshold, RandSeed : HomMat2D, Points1, Points2)

Herror T_proj_match_points_ransac_guided(const Hobject Image1, const Hobject Image2, const Htuple Rows1, const Htuple Cols1, const Htuple Rows2, const Htuple Cols2, const Htuple GrayMatchMethod, const Htuple MaskSize, const Htuple HomMat2DGuide, const Htuple DistanceTolerance, const Htuple MatchThreshold, const Htuple EstimationMethod, const Htuple DistanceThreshold, const Htuple RandSeed, Htuple* HomMat2D, Htuple* Points1, Htuple* Points2)

void ProjMatchPointsRansacGuided(const HObject& Image1, const HObject& Image2, const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const HTuple& GrayMatchMethod, const HTuple& MaskSize, const HTuple& HomMat2DGuide, const HTuple& DistanceTolerance, const HTuple& MatchThreshold, const HTuple& EstimationMethod, const HTuple& DistanceThreshold, const HTuple& RandSeed, HTuple* HomMat2D, HTuple* Points1, HTuple* Points2)

HHomMat2D HImage::ProjMatchPointsRansacGuided(const HImage& Image2, const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const HString& GrayMatchMethod, Hlong MaskSize, const HHomMat2D& HomMat2DGuide, double DistanceTolerance, const HTuple& MatchThreshold, const HString& EstimationMethod, double DistanceThreshold, Hlong RandSeed, HTuple* Points1, HTuple* Points2) const

HHomMat2D HImage::ProjMatchPointsRansacGuided(const HImage& Image2, const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const HString& GrayMatchMethod, Hlong MaskSize, const HHomMat2D& HomMat2DGuide, double DistanceTolerance, Hlong MatchThreshold, const HString& EstimationMethod, double DistanceThreshold, Hlong RandSeed, HTuple* Points1, HTuple* Points2) const

HHomMat2D HImage::ProjMatchPointsRansacGuided(const HImage& Image2, const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const char* GrayMatchMethod, Hlong MaskSize, const HHomMat2D& HomMat2DGuide, double DistanceTolerance, Hlong MatchThreshold, const char* EstimationMethod, double DistanceThreshold, Hlong RandSeed, HTuple* Points1, HTuple* Points2) const

HHomMat2D HImage::ProjMatchPointsRansacGuided(const HImage& Image2, const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const wchar_t* GrayMatchMethod, Hlong MaskSize, const HHomMat2D& HomMat2DGuide, double DistanceTolerance, Hlong MatchThreshold, const wchar_t* EstimationMethod, double DistanceThreshold, Hlong RandSeed, HTuple* Points1, HTuple* Points2) const   (Nur Windows)

HHomMat2D HHomMat2D::ProjMatchPointsRansacGuided(const HImage& Image1, const HImage& Image2, const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const HString& GrayMatchMethod, Hlong MaskSize, double DistanceTolerance, const HTuple& MatchThreshold, const HString& EstimationMethod, double DistanceThreshold, Hlong RandSeed, HTuple* Points1, HTuple* Points2) const

HHomMat2D HHomMat2D::ProjMatchPointsRansacGuided(const HImage& Image1, const HImage& Image2, const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const HString& GrayMatchMethod, Hlong MaskSize, double DistanceTolerance, Hlong MatchThreshold, const HString& EstimationMethod, double DistanceThreshold, Hlong RandSeed, HTuple* Points1, HTuple* Points2) const

HHomMat2D HHomMat2D::ProjMatchPointsRansacGuided(const HImage& Image1, const HImage& Image2, const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const char* GrayMatchMethod, Hlong MaskSize, double DistanceTolerance, Hlong MatchThreshold, const char* EstimationMethod, double DistanceThreshold, Hlong RandSeed, HTuple* Points1, HTuple* Points2) const

HHomMat2D HHomMat2D::ProjMatchPointsRansacGuided(const HImage& Image1, const HImage& Image2, const HTuple& Rows1, const HTuple& Cols1, const HTuple& Rows2, const HTuple& Cols2, const wchar_t* GrayMatchMethod, Hlong MaskSize, double DistanceTolerance, Hlong MatchThreshold, const wchar_t* EstimationMethod, double DistanceThreshold, Hlong RandSeed, HTuple* Points1, HTuple* Points2) const   (Nur Windows)

static void HOperatorSet.ProjMatchPointsRansacGuided(HObject image1, HObject image2, HTuple rows1, HTuple cols1, HTuple rows2, HTuple cols2, HTuple grayMatchMethod, HTuple maskSize, HTuple homMat2DGuide, HTuple distanceTolerance, HTuple matchThreshold, HTuple estimationMethod, HTuple distanceThreshold, HTuple randSeed, out HTuple homMat2D, out HTuple points1, out HTuple points2)

HHomMat2D HImage.ProjMatchPointsRansacGuided(HImage image2, HTuple rows1, HTuple cols1, HTuple rows2, HTuple cols2, string grayMatchMethod, int maskSize, HHomMat2D homMat2DGuide, double distanceTolerance, HTuple matchThreshold, string estimationMethod, double distanceThreshold, int randSeed, out HTuple points1, out HTuple points2)

HHomMat2D HImage.ProjMatchPointsRansacGuided(HImage image2, HTuple rows1, HTuple cols1, HTuple rows2, HTuple cols2, string grayMatchMethod, int maskSize, HHomMat2D homMat2DGuide, double distanceTolerance, int matchThreshold, string estimationMethod, double distanceThreshold, int randSeed, out HTuple points1, out HTuple points2)

HHomMat2D HHomMat2D.ProjMatchPointsRansacGuided(HImage image1, HImage image2, HTuple rows1, HTuple cols1, HTuple rows2, HTuple cols2, string grayMatchMethod, int maskSize, double distanceTolerance, HTuple matchThreshold, string estimationMethod, double distanceThreshold, int randSeed, out HTuple points1, out HTuple points2)

HHomMat2D HHomMat2D.ProjMatchPointsRansacGuided(HImage image1, HImage image2, HTuple rows1, HTuple cols1, HTuple rows2, HTuple cols2, string grayMatchMethod, int maskSize, double distanceTolerance, int matchThreshold, string estimationMethod, double distanceThreshold, int randSeed, out HTuple points1, out HTuple points2)

Beschreibung

Ausgehend von einer Menge charakteristischer Punkte (Cols1Cols1Cols1Cols1cols1,Rows1Rows1Rows1Rows1rows1) und (Cols2Cols2Cols2Cols2cols2,Rows2Rows2Rows2Rows2rows2) in den beiden Eingabebildern Image1Image1Image1Image1image1 und Image2Image2Image2Image2image2 und einer bekannten Näherung HomMat2DGuideHomMat2DGuideHomMat2DGuideHomMat2DGuidehomMat2DGuide für die Transformation von Image1Image1Image1Image1image1 zu Image2Image2Image2Image2image2 bestimmt proj_match_points_ransac_guidedproj_match_points_ransac_guidedProjMatchPointsRansacGuidedProjMatchPointsRansacGuidedProjMatchPointsRansacGuided automatisch die Korrespondenz der Punkte und die homogene projektive Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2D, die die korrespondierenden Punkte in den beiden Bildern am besten ineinander überführt. Die charakteristischen Punkte können z.B. mit points_foerstnerpoints_foerstnerPointsFoerstnerPointsFoerstnerPointsFoerstner oder points_harrispoints_harrisPointsHarrisPointsHarrisPointsHarris extrahiert werden. Die Näherung HomMat2DGuideHomMat2DGuideHomMat2DGuideHomMat2DGuidehomMat2DGuide kann z.B. mit proj_match_points_ransacproj_match_points_ransacProjMatchPointsRansacProjMatchPointsRansacProjMatchPointsRansac auf niedriger aufgelösten Versionen von Image1Image1Image1Image1image1 zu Image2Image2Image2Image2image2 bestimmt werden.

Die Bestimmung der Transformation 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. Die Größe dieser Grauwertfenster beträgt . 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 Punktepaare 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 Performanzsteigerung wird der Suchbereich für die Matchings basierend auf der Näherung der Transformation HomMat2DGuideHomMat2DGuideHomMat2DGuideHomMat2DGuidehomMat2DGuide eingeschränkt. Nur Punkte innerhalb eines Abstandes von DistanceToleranceDistanceToleranceDistanceToleranceDistanceTolerancedistanceTolerance um die Transformation eines Punktes aus Image1Image1Image1Image1image1 mittelsHomMat2DGuideHomMat2DGuideHomMat2DGuideHomMat2DGuidehomMat2DGuide in Image2Image2Image2Image2image2 liegen, werden für das Matching in Betracht gezogen.

Ist das initiale Punktmatching bestimmt, wird es anschließend durch einen randomisierten Auswahlalgorithmus (RANSAC) zur Bestimmung der Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2D benutzt. Dabei wird versucht die Matrix so zu wählen, dass sie bezüglich der Schranke DistanceThresholdDistanceThresholdDistanceThresholdDistanceThresholddistanceThreshold zu möglichst vielen Punktpaaren konsistent ist. DistanceThresholdDistanceThresholdDistanceThresholdDistanceThresholddistanceThreshold sollte also kleiner als DistanceToleranceDistanceToleranceDistanceToleranceDistanceTolerancedistanceTolerance sein.

Ist eine solche Auswahl getroffen, wird die zugehörige Matrix unter Einbeziehung aller konsistenten Punkte nochmals optimiert. Dabei kann mit EstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethod zwischen der langsameren, dafür aber mathematisch optimalen 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard" Methode und der schnelleren 'normalized_dlt'"normalized_dlt""normalized_dlt""normalized_dlt""normalized_dlt" gewählt werden. Dabei werden die Verfahren von vector_to_proj_hom_mat2dvector_to_proj_hom_mat2dVectorToProjHomMat2dVectorToProjHomMat2dVectorToProjHomMat2d verwendet.

Punktepaare, die die Konsistenzbedingung für diese endgültige Transformation immer noch verletzen, werden aussortiert, der Rest als Steuerparameter zurückgeliefert. Points1Points1Points1Points1points1 enthält die Indizes der gematchten 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 dem angegebenen Startwert 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)  point.x-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Zeilenkoordinaten charakteristischer Punkte in Bild 1.

Cols1Cols1Cols1Cols1cols1 (input_control)  point.y-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Spaltenkoordinaten charakteristischer Punkte in Bild 1.

Rows2Rows2Rows2Rows2rows2 (input_control)  point.x-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Zeilenkoordinaten charakteristischer Punkte in Bild 2.

Cols2Cols2Cols2Cols2cols2 (input_control)  point.y-array HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Spaltenkoordinaten charakteristischer Punkte in Bild 2.

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: MaskSize MaskSize MaskSize MaskSize maskSize ≤ 90

HomMat2DGuideHomMat2DGuideHomMat2DGuideHomMat2DGuidehomMat2DGuide (input_control)  hom_mat2d HHomMat2D, HTupleHTupleHtuple (real) (double) (double) (double)

Näherung der projektiven Transformationsmatrix zwischen den zwei Bildern.

DistanceToleranceDistanceToleranceDistanceToleranceDistanceTolerancedistanceTolerance (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Toleranz des Suchfensters für das Punktmatching.

Defaultwert: 20.0

Wertevorschläge: 0.2, 0.5, 1.0, 2.0, 3.0, 5.0, 10.0, 20.0, 50.0

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*)

Schätzalgorithmus für Transformationsmatrix.

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"

DistanceThresholdDistanceThresholdDistanceThresholdDistanceThresholddistanceThreshold (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Schwelle für Konsistenzüberprüfung.

Defaultwert: 0.2

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

Startwert für den Zufallszahlengenerator.

Defaultwert: 0

HomMat2DHomMat2DHomMat2DHomMat2DhomMat2D (output_control)  hom_mat2d HHomMat2D, HTupleHTupleHtuple (real) (double) (double) (double)

Homogene projektive Transformationsmatrix.

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

Indizes der akzeptierten Eingabepunkte aus Bild 1.

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

Indizes der akzeptierten Eingabepunkte aus Bild 2.

Beispiel (HDevelop)

zoom_image_factor (Image1, Image1Zoomed, 0.5, 0.5, 'constant')
zoom_image_factor (Image2, Image2Zoomed, 0.5, 0.5, 'constant')
points_foerstner (Image1Zoomed, 1, 2, 3, 200, 0.3, 'gauss', 'false', \
                  Rows1, Cols1, _, _, _, _, _, _, _, _)
points_foerstner (Image2Zoomed, 1, 2, 3, 200, 0.3, 'gauss', 'false', \
                  Rows2, Cols2, _, _, _, _, _, _, _, _)
get_image_pointer1 (Image1Zoomed, Pointer, Type, Width, Height)
proj_match_points_ransac (Image1Zoomed, Image2Zoomed, Rows1, Cols1, \
                          Rows2, Cols2, 'ncc', 10, 0, 0, \
                          Height, Width, 0, 0.5, 'gold_standard', \
                          5, 0, HomMat2D, Points1, Points2)
hom_mat2d_scale_local (HomMat2D, 0.5, 0.5, HomMat2DGuide)
hom_mat2d_scale (HomMat2DGuide, 2, 2, 0, 0, HomMat2DGuide)
points_foerstner (Image1, 1, 2, 3, 200, 0.3, 'gauss', 'false', \
                  Rows1, Cols1, _, _, _, _, _, _, _, _)
points_foerstner (Image2, 1, 2, 3, 200, 0.3, 'gauss', 'false', \
                  Rows2, Cols2, _, _, _, _, _, _, _, _)
proj_match_points_ransac_guided (Image1, Image2, Rows1, Cols1, \
                                 Rows2, Cols2, 'ncc', 10, \
                                 HomMat2DGuide, 40, 0.5, \
                                 'gold_standard', 10, 0, HomMat2D, \
                                 Points1, Points2)

Vorgänger

points_foerstnerpoints_foerstnerPointsFoerstnerPointsFoerstnerPointsFoerstner, points_harrispoints_harrisPointsHarrisPointsHarrisPointsHarris

Nachfolger

projective_trans_imageprojective_trans_imageProjectiveTransImageProjectiveTransImageProjectiveTransImage, projective_trans_image_sizeprojective_trans_image_sizeProjectiveTransImageSizeProjectiveTransImageSizeProjectiveTransImageSize, projective_trans_regionprojective_trans_regionProjectiveTransRegionProjectiveTransRegionProjectiveTransRegion, projective_trans_contour_xldprojective_trans_contour_xldProjectiveTransContourXldProjectiveTransContourXldProjectiveTransContourXld, projective_trans_point_2dprojective_trans_point_2dProjectiveTransPoint2dProjectiveTransPoint2dProjectiveTransPoint2d, projective_trans_pixelprojective_trans_pixelProjectiveTransPixelProjectiveTransPixelProjectiveTransPixel

Alternativen

hom_vector_to_proj_hom_mat2dhom_vector_to_proj_hom_mat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2d, vector_to_proj_hom_mat2dvector_to_proj_hom_mat2dVectorToProjHomMat2dVectorToProjHomMat2dVectorToProjHomMat2d

Siehe auch

proj_match_points_ransacproj_match_points_ransacProjMatchPointsRansacProjMatchPointsRansacProjMatchPointsRansac

Literatur

Richard Hartley, Andrew Zisserman: „Multiple View Geometry in Computer Vision“; Cambridge University Press, Cambridge; 2000.
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

Matching