Name
proj_match_points_ransac_guidedT_proj_match_points_ransac_guidedProjMatchPointsRansacGuidedproj_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.
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)
Herror proj_match_points_ransac_guided(Hobject Image1, 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)
HTuple HImage::ProjMatchPointsRansacGuided(const HImage& 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* Points1, HTuple* Points2) const
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 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
void HOperatorSetX.ProjMatchPointsRansacGuided(
[in] IHUntypedObjectX* Image1, [in] IHUntypedObjectX* Image2, [in] VARIANT Rows1, [in] VARIANT Cols1, [in] VARIANT Rows2, [in] VARIANT Cols2, [in] VARIANT GrayMatchMethod, [in] VARIANT MaskSize, [in] VARIANT HomMat2dGuide, [in] VARIANT DistanceTolerance, [in] VARIANT MatchThreshold, [in] VARIANT EstimationMethod, [in] VARIANT DistanceThreshold, [in] VARIANT RandSeed, [out] VARIANT* HomMat2d, [out] VARIANT* Points1, [out] VARIANT* Points2)
IHHomMat2DX* HImageX.ProjMatchPointsRansacGuided(
[in] IHImageX* Image2, [in] VARIANT Rows1, [in] VARIANT Cols1, [in] VARIANT Rows2, [in] VARIANT Cols2, [in] BSTR GrayMatchMethod, [in] Hlong MaskSize, [in] IHHomMat2DX* HomMat2dGuide, [in] double DistanceTolerance, [in] VARIANT MatchThreshold, [in] BSTR EstimationMethod, [in] double DistanceThreshold, [in] Hlong RandSeed, [out] VARIANT* Points1, [out] VARIANT* Points2)
IHHomMat2DX* HHomMat2DX.ProjMatchPointsRansacGuided(
[in] IHImageX* Image1, [in] IHImageX* Image2, [in] VARIANT Rows1, [in] VARIANT Cols1, [in] VARIANT Rows2, [in] VARIANT Cols2, [in] BSTR GrayMatchMethod, [in] Hlong MaskSize, [in] double DistanceTolerance, [in] VARIANT MatchThreshold, [in] BSTR EstimationMethod, [in] double DistanceThreshold, [in] Hlong RandSeed, [out] VARIANT* Points1, [out] VARIANT* Points2)
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)
Ausgehend von einer Menge charakteristischer Punkte
(Cols1Cols1Cols1Cols1Cols1cols1,Rows1Rows1Rows1Rows1Rows1rows1) und
(Cols2Cols2Cols2Cols2Cols2cols2,Rows2Rows2Rows2Rows2Rows2rows2) in den beiden Eingabebildern
Image1Image1Image1Image1Image1image1 und Image2Image2Image2Image2Image2image2 und einer bekannten Näherung
HomMat2DGuideHomMat2DGuideHomMat2DGuideHomMat2DGuideHomMat2DGuidehomMat2DGuide für die Transformation von Image1Image1Image1Image1Image1image1 zu
Image2Image2Image2Image2Image2image2 bestimmt proj_match_points_ransac_guidedproj_match_points_ransac_guidedProjMatchPointsRansacGuidedproj_match_points_ransac_guidedProjMatchPointsRansacGuidedProjMatchPointsRansacGuided
automatisch die Korrespondenz der Punkte und die homogene projektive
Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DHomMat2DhomMat2D, die die korrespondierenden
Punkte in den beiden Bildern am besten ineinander überführt. Die
charakteristischen Punkte können z.B. mit points_foerstnerpoints_foerstnerPointsFoerstnerpoints_foerstnerPointsFoerstnerPointsFoerstner
oder points_harrispoints_harrisPointsHarrispoints_harrisPointsHarrisPointsHarris extrahiert werden. Die Näherung
HomMat2DGuideHomMat2DGuideHomMat2DGuideHomMat2DGuideHomMat2DGuidehomMat2DGuide kann z.B. mit
proj_match_points_ransacproj_match_points_ransacProjMatchPointsRansacproj_match_points_ransacProjMatchPointsRansacProjMatchPointsRansac auf niedriger aufgelösten Versionen
von Image1Image1Image1Image1Image1image1 zu Image2Image2Image2Image2Image2image2 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 MaskSizeMaskSizeMaskSizeMaskSizeMaskSizemaskSize x MaskSizeMaskSizeMaskSizeMaskSizeMaskSizemaskSize. Es
können drei Metriken für die Korrelation gewählt werden. Hat
GrayMatchMethodGrayMatchMethodGrayMatchMethodGrayMatchMethodGrayMatchMethodgrayMatchMethod 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_disparitybinocular_disparityBinocularDisparitybinocular_disparityBinocularDisparityBinocularDisparity).
Diese Metrik wird über alle
Punktepaare 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
MatchThresholdMatchThresholdMatchThresholdMatchThresholdMatchThresholdmatchThreshold ('ssd'"ssd""ssd""ssd""ssd""ssd", 'sad'"sad""sad""sad""sad""sad") bzw. über
demselben ('ncc'"ncc""ncc""ncc""ncc""ncc") liegt.
Zur Performanzsteigerung wird der Suchbereich für die Matchings
basierend auf der Näherung der Transformation HomMat2DGuideHomMat2DGuideHomMat2DGuideHomMat2DGuideHomMat2DGuidehomMat2DGuide
eingeschränkt. Nur Punkte innerhalb eines Abstandes von
DistanceToleranceDistanceToleranceDistanceToleranceDistanceToleranceDistanceTolerancedistanceTolerance um die Transformation eines Punktes aus
Image1Image1Image1Image1Image1image1 mittelsHomMat2DGuideHomMat2DGuideHomMat2DGuideHomMat2DGuideHomMat2DGuidehomMat2DGuide in Image2Image2Image2Image2Image2image2
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 HomMat2DHomMat2DHomMat2DHomMat2DHomMat2DhomMat2D benutzt. Dabei wird
versucht die Matrix so zu wählen, dass sie bezüglich der Schranke
DistanceThresholdDistanceThresholdDistanceThresholdDistanceThresholdDistanceThresholddistanceThreshold zu möglichst vielen Punktpaaren
konsistent ist. DistanceThresholdDistanceThresholdDistanceThresholdDistanceThresholdDistanceThresholddistanceThreshold sollte also kleiner als
DistanceToleranceDistanceToleranceDistanceToleranceDistanceToleranceDistanceTolerancedistanceTolerance sein.
Ist eine solche Auswahl getroffen, wird die zugehörige Matrix unter
Einbeziehung aller konsistenten Punkte nochmals optimiert. Dabei
kann mit EstimationMethodEstimationMethodEstimationMethodEstimationMethodEstimationMethodestimationMethod zwischen der langsameren, dafür
aber mathematisch optimalen 'gold_standard'"gold_standard""gold_standard""gold_standard""gold_standard""gold_standard" Methode und der
schnelleren 'normalized_dlt'"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_mat2dVectorToProjHomMat2dvector_to_proj_hom_mat2dVectorToProjHomMat2dVectorToProjHomMat2d verwendet.
Punktepaare, die die Konsistenzbedingung für diese endgültige
Transformation immer noch verletzen, werden aussortiert, der Rest
als Steuerparameter zurückgeliefert. Points1Points1Points1Points1Points1points1 enthält die
Indizes der gematchten Eingabepunkte im ersten Bild,
Points2Points2Points2Points2Points2points2 die Indizes der dazu korrespondierenden Punkte im
zweiten Bild.
Der Parameter RandSeedRandSeedRandSeedRandSeedRandSeedrandSeed kann benutzt werden, um das
randomisierte Verhalten des RANSAC-Verfahrens zu kontrollieren und
somit reproduzierbare Ergebnisse zu erhalten. Wird
RandSeedRandSeedRandSeedRandSeedRandSeedrandSeed 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 RandSeedRandSeedRandSeedRandSeedRandSeedrandSeed =
0, so wird der Zufallsgenerator mit der aktuellen Zeit
initialisiert. Daher sind in diesem Fall die Ergebnisse unter
Umständen nicht reproduzierbar.
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
Zeilenkoordinaten charakteristischer Punkte
in Bild 1.
Spaltenkoordinaten charakteristischer Punkte
in Bild 1.
Zeilenkoordinaten charakteristischer Punkte
in Bild 2.
Spaltenkoordinaten charakteristischer Punkte
in Bild 2.
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"
Größe der Grauwertmaske.
Defaultwert: 10
Typischer Wertebereich:
MaskSize
MaskSize
MaskSize
MaskSize
MaskSize
maskSize
≤
90
Näherung der projektiven Transformationsmatrix
zwischen den zwei Bildern.
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
Schwellwert für Grauwertkorrespondenzen.
Defaultwert: 10
Wertevorschläge: 10, 20, 50, 100, 0.9, 0.7
Schätzalgorithmus für Transformationsmatrix.
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"
Schwelle für Konsistenzüberprüfung.
Defaultwert: 0.2
Startwert für den Zufallszahlengenerator.
Defaultwert: 0
Homogene projektive Transformationsmatrix.
Indizes der akzeptierten Eingabepunkte aus Bild 1.
Indizes der akzeptierten Eingabepunkte aus Bild 2.
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)
points_foerstnerpoints_foerstnerPointsFoerstnerpoints_foerstnerPointsFoerstnerPointsFoerstner,
points_harrispoints_harrisPointsHarrispoints_harrisPointsHarrisPointsHarris
projective_trans_imageprojective_trans_imageProjectiveTransImageprojective_trans_imageProjectiveTransImageProjectiveTransImage,
projective_trans_image_sizeprojective_trans_image_sizeProjectiveTransImageSizeprojective_trans_image_sizeProjectiveTransImageSizeProjectiveTransImageSize,
projective_trans_regionprojective_trans_regionProjectiveTransRegionprojective_trans_regionProjectiveTransRegionProjectiveTransRegion,
projective_trans_contour_xldprojective_trans_contour_xldProjectiveTransContourXldprojective_trans_contour_xldProjectiveTransContourXldProjectiveTransContourXld,
projective_trans_point_2dprojective_trans_point_2dProjectiveTransPoint2dprojective_trans_point_2dProjectiveTransPoint2dProjectiveTransPoint2d,
projective_trans_pixelprojective_trans_pixelProjectiveTransPixelprojective_trans_pixelProjectiveTransPixelProjectiveTransPixel
hom_vector_to_proj_hom_mat2dhom_vector_to_proj_hom_mat2dHomVectorToProjHomMat2dhom_vector_to_proj_hom_mat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2d,
vector_to_proj_hom_mat2dvector_to_proj_hom_mat2dVectorToProjHomMat2dvector_to_proj_hom_mat2dVectorToProjHomMat2dVectorToProjHomMat2d
proj_match_points_ransacproj_match_points_ransacProjMatchPointsRansacproj_match_points_ransacProjMatchPointsRansacProjMatchPointsRansac
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.
Matching