proj_match_points_ransac_guided T_proj_match_points_ransac_guided ProjMatchPointsRansacGuided ProjMatchPointsRansacGuided (Operator)
Name
proj_match_points_ransac_guided T_proj_match_points_ransac_guided ProjMatchPointsRansacGuided ProjMatchPointsRansacGuided
— 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
(Cols1 Cols1 Cols1 Cols1 cols1
,Rows1 Rows1 Rows1 Rows1 rows1
) und
(Cols2 Cols2 Cols2 Cols2 cols2
,Rows2 Rows2 Rows2 Rows2 rows2
) in den beiden Eingabebildern
Image1 Image1 Image1 Image1 image1
und Image2 Image2 Image2 Image2 image2
und einer bekannten Näherung
HomMat2DGuide HomMat2DGuide HomMat2DGuide HomMat2DGuide homMat2DGuide
für die Transformation von Image1 Image1 Image1 Image1 image1
zu
Image2 Image2 Image2 Image2 image2
bestimmt proj_match_points_ransac_guided proj_match_points_ransac_guided ProjMatchPointsRansacGuided ProjMatchPointsRansacGuided ProjMatchPointsRansacGuided
automatisch die Korrespondenz der Punkte und die homogene projektive
Transformationsmatrix HomMat2D HomMat2D HomMat2D HomMat2D homMat2D
, die die korrespondierenden
Punkte in den beiden Bildern am besten ineinander überführt. Die
charakteristischen Punkte können z.B. mit points_foerstner points_foerstner PointsFoerstner PointsFoerstner PointsFoerstner
oder points_harris points_harris PointsHarris PointsHarris PointsHarris
extrahiert werden. Die Näherung
HomMat2DGuide HomMat2DGuide HomMat2DGuide HomMat2DGuide homMat2DGuide
kann z.B. mit
proj_match_points_ransac proj_match_points_ransac ProjMatchPointsRansac ProjMatchPointsRansac ProjMatchPointsRansac
auf niedriger aufgelösten Versionen
von Image1 Image1 Image1 Image1 image1
zu Image2 Image2 Image2 Image2 image2
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
GrayMatchMethod GrayMatchMethod GrayMatchMethod GrayMatchMethod grayMatchMethod
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_disparity binocular_disparity BinocularDisparity BinocularDisparity BinocularDisparity
).
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
MatchThreshold MatchThreshold MatchThreshold MatchThreshold matchThreshold
('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 HomMat2DGuide HomMat2DGuide HomMat2DGuide HomMat2DGuide homMat2DGuide
eingeschränkt. Nur Punkte innerhalb eines Abstandes von
DistanceTolerance DistanceTolerance DistanceTolerance DistanceTolerance distanceTolerance
um die Transformation eines Punktes aus
Image1 Image1 Image1 Image1 image1
mittelsHomMat2DGuide HomMat2DGuide HomMat2DGuide HomMat2DGuide homMat2DGuide
in Image2 Image2 Image2 Image2 image2
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 HomMat2D HomMat2D HomMat2D HomMat2D homMat2D
benutzt. Dabei wird
versucht die Matrix so zu wählen, dass sie bezüglich der Schranke
DistanceThreshold DistanceThreshold DistanceThreshold DistanceThreshold distanceThreshold
zu möglichst vielen Punktpaaren
konsistent ist. DistanceThreshold DistanceThreshold DistanceThreshold DistanceThreshold distanceThreshold
sollte also kleiner als
DistanceTolerance DistanceTolerance DistanceTolerance DistanceTolerance distanceTolerance
sein.
Ist eine solche Auswahl getroffen, wird die zugehörige Matrix unter
Einbeziehung aller konsistenten Punkte nochmals optimiert. Dabei
kann mit EstimationMethod EstimationMethod EstimationMethod EstimationMethod estimationMethod
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_mat2d vector_to_proj_hom_mat2d VectorToProjHomMat2d VectorToProjHomMat2d VectorToProjHomMat2d
verwendet.
Punktepaare, die die Konsistenzbedingung für diese endgültige
Transformation immer noch verletzen, werden aussortiert, der Rest
als Steuerparameter zurückgeliefert. Points1 Points1 Points1 Points1 points1
enthält die
Indizes der gematchten Eingabepunkte im ersten Bild,
Points2 Points2 Points2 Points2 points2
die Indizes der dazu korrespondierenden Punkte im
zweiten Bild.
Der Parameter RandSeed RandSeed RandSeed RandSeed randSeed
kann benutzt werden, um das
randomisierte Verhalten des RANSAC-Verfahrens zu kontrollieren und
somit reproduzierbare Ergebnisse zu erhalten. Wird
RandSeed RandSeed RandSeed RandSeed randSeed
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 RandSeed RandSeed RandSeed RandSeed randSeed
=
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
(input_object) singlechannelimage →
object HImage HImage Hobject (byte / uint2)
Eingabebild 1.
Image2 Image2 Image2 Image2 image2
(input_object) singlechannelimage →
object HImage HImage Hobject (byte / uint2)
Eingabebild 2.
Rows1 Rows1 Rows1 Rows1 rows1
(input_control) point.x-array →
HTuple HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Zeilenkoordinaten charakteristischer Punkte
in Bild 1.
Cols1 Cols1 Cols1 Cols1 cols1
(input_control) point.y-array →
HTuple HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Spaltenkoordinaten charakteristischer Punkte
in Bild 1.
Rows2 Rows2 Rows2 Rows2 rows2
(input_control) point.x-array →
HTuple HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Zeilenkoordinaten charakteristischer Punkte
in Bild 2.
Cols2 Cols2 Cols2 Cols2 cols2
(input_control) point.y-array →
HTuple HTuple Htuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Spaltenkoordinaten charakteristischer Punkte
in Bild 2.
GrayMatchMethod GrayMatchMethod GrayMatchMethod GrayMatchMethod grayMatchMethod
(input_control) string →
HTuple HTuple Htuple (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"
MaskSize MaskSize MaskSize MaskSize maskSize
(input_control) integer →
HTuple HTuple Htuple (integer) (int / long) (Hlong ) (Hlong )
Größe der Grauwertmaske.
Defaultwert: 10
Typischer Wertebereich:
MaskSize
MaskSize
MaskSize
MaskSize
maskSize
≤
90
HomMat2DGuide HomMat2DGuide HomMat2DGuide HomMat2DGuide homMat2DGuide
(input_control) hom_mat2d →
HHomMat2D , HTuple HTuple Htuple (real) (double ) (double ) (double )
Näherung der projektiven Transformationsmatrix
zwischen den zwei Bildern.
DistanceTolerance DistanceTolerance DistanceTolerance DistanceTolerance distanceTolerance
(input_control) real →
HTuple HTuple Htuple (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
MatchThreshold MatchThreshold MatchThreshold MatchThreshold matchThreshold
(input_control) number →
HTuple HTuple Htuple (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
EstimationMethod EstimationMethod EstimationMethod EstimationMethod estimationMethod
(input_control) string →
HTuple HTuple Htuple (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"
DistanceThreshold DistanceThreshold DistanceThreshold DistanceThreshold distanceThreshold
(input_control) real →
HTuple HTuple Htuple (real) (double ) (double ) (double )
Schwelle für Konsistenzüberprüfung.
Defaultwert: 0.2
RandSeed RandSeed RandSeed RandSeed randSeed
(input_control) integer →
HTuple HTuple Htuple (integer) (int / long) (Hlong ) (Hlong )
Startwert für den Zufallszahlengenerator.
Defaultwert: 0
HomMat2D HomMat2D HomMat2D HomMat2D homMat2D
(output_control) hom_mat2d →
HHomMat2D , HTuple HTuple Htuple (real) (double ) (double ) (double )
Homogene projektive Transformationsmatrix.
Points1 Points1 Points1 Points1 points1
(output_control) integer-array →
HTuple HTuple Htuple (integer) (int / long) (Hlong ) (Hlong )
Indizes der akzeptierten Eingabepunkte aus Bild 1.
Points2 Points2 Points2 Points2 points2
(output_control) integer-array →
HTuple HTuple Htuple (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_foerstner points_foerstner PointsFoerstner PointsFoerstner PointsFoerstner
,
points_harris points_harris PointsHarris PointsHarris PointsHarris
Nachfolger
projective_trans_image projective_trans_image ProjectiveTransImage ProjectiveTransImage ProjectiveTransImage
,
projective_trans_image_size projective_trans_image_size ProjectiveTransImageSize ProjectiveTransImageSize ProjectiveTransImageSize
,
projective_trans_region projective_trans_region ProjectiveTransRegion ProjectiveTransRegion ProjectiveTransRegion
,
projective_trans_contour_xld projective_trans_contour_xld ProjectiveTransContourXld ProjectiveTransContourXld ProjectiveTransContourXld
,
projective_trans_point_2d projective_trans_point_2d ProjectiveTransPoint2d ProjectiveTransPoint2d ProjectiveTransPoint2d
,
projective_trans_pixel projective_trans_pixel ProjectiveTransPixel ProjectiveTransPixel ProjectiveTransPixel
Alternativen
hom_vector_to_proj_hom_mat2d hom_vector_to_proj_hom_mat2d HomVectorToProjHomMat2d HomVectorToProjHomMat2d HomVectorToProjHomMat2d
,
vector_to_proj_hom_mat2d vector_to_proj_hom_mat2d VectorToProjHomMat2d VectorToProjHomMat2d VectorToProjHomMat2d
Siehe auch
proj_match_points_ransac proj_match_points_ransac ProjMatchPointsRansac ProjMatchPointsRansac ProjMatchPointsRansac
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