find_planar_uncalib_deformable_modelT_find_planar_uncalib_deformable_modelFindPlanarUncalibDeformableModelFindPlanarUncalibDeformableModelfind_planar_uncalib_deformable_model (Operator)

Name

find_planar_uncalib_deformable_modelT_find_planar_uncalib_deformable_modelFindPlanarUncalibDeformableModelFindPlanarUncalibDeformableModelfind_planar_uncalib_deformable_model — Unkalibrierte Suche nach den besten Matches eines planaren deformierbaren Modells in einem Bild.

Signatur

find_planar_uncalib_deformable_model(Image : : ModelID, AngleStart, AngleExtent, ScaleRMin, ScaleRMax, ScaleCMin, ScaleCMax, MinScore, NumMatches, MaxOverlap, NumLevels, Greediness, GenParamName, GenParamValue : HomMat2D, Score)

Herror T_find_planar_uncalib_deformable_model(const Hobject Image, const Htuple ModelID, const Htuple AngleStart, const Htuple AngleExtent, const Htuple ScaleRMin, const Htuple ScaleRMax, const Htuple ScaleCMin, const Htuple ScaleCMax, const Htuple MinScore, const Htuple NumMatches, const Htuple MaxOverlap, const Htuple NumLevels, const Htuple Greediness, const Htuple GenParamName, const Htuple GenParamValue, Htuple* HomMat2D, Htuple* Score)

void FindPlanarUncalibDeformableModel(const HObject& Image, const HTuple& ModelID, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& ScaleRMin, const HTuple& ScaleRMax, const HTuple& ScaleCMin, const HTuple& ScaleCMax, const HTuple& MinScore, const HTuple& NumMatches, const HTuple& MaxOverlap, const HTuple& NumLevels, const HTuple& Greediness, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* HomMat2D, HTuple* Score)

HHomMat2DArray HDeformableModel::FindPlanarUncalibDeformableModel(const HImage& Image, double AngleStart, double AngleExtent, double ScaleRMin, double ScaleRMax, double ScaleCMin, double ScaleCMax, double MinScore, Hlong NumMatches, double MaxOverlap, const HTuple& NumLevels, double Greediness, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* Score) const

HHomMat2D HDeformableModel::FindPlanarUncalibDeformableModel(const HImage& Image, double AngleStart, double AngleExtent, double ScaleRMin, double ScaleRMax, double ScaleCMin, double ScaleCMax, double MinScore, Hlong NumMatches, double MaxOverlap, Hlong NumLevels, double Greediness, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* Score) const

HHomMat2DArray HImage::FindPlanarUncalibDeformableModel(const HDeformableModel& ModelID, double AngleStart, double AngleExtent, double ScaleRMin, double ScaleRMax, double ScaleCMin, double ScaleCMax, double MinScore, Hlong NumMatches, double MaxOverlap, const HTuple& NumLevels, double Greediness, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* Score) const

HHomMat2D HImage::FindPlanarUncalibDeformableModel(const HDeformableModel& ModelID, double AngleStart, double AngleExtent, double ScaleRMin, double ScaleRMax, double ScaleCMin, double ScaleCMax, double MinScore, Hlong NumMatches, double MaxOverlap, Hlong NumLevels, double Greediness, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* Score) const

static void HOperatorSet.FindPlanarUncalibDeformableModel(HObject image, HTuple modelID, HTuple angleStart, HTuple angleExtent, HTuple scaleRMin, HTuple scaleRMax, HTuple scaleCMin, HTuple scaleCMax, HTuple minScore, HTuple numMatches, HTuple maxOverlap, HTuple numLevels, HTuple greediness, HTuple genParamName, HTuple genParamValue, out HTuple homMat2D, out HTuple score)

HHomMat2D[] HDeformableModel.FindPlanarUncalibDeformableModel(HImage image, double angleStart, double angleExtent, double scaleRMin, double scaleRMax, double scaleCMin, double scaleCMax, double minScore, int numMatches, double maxOverlap, HTuple numLevels, double greediness, HTuple genParamName, HTuple genParamValue, out HTuple score)

HHomMat2D HDeformableModel.FindPlanarUncalibDeformableModel(HImage image, double angleStart, double angleExtent, double scaleRMin, double scaleRMax, double scaleCMin, double scaleCMax, double minScore, int numMatches, double maxOverlap, int numLevels, double greediness, HTuple genParamName, HTuple genParamValue, out HTuple score)

HHomMat2D[] HImage.FindPlanarUncalibDeformableModel(HDeformableModel modelID, double angleStart, double angleExtent, double scaleRMin, double scaleRMax, double scaleCMin, double scaleCMax, double minScore, int numMatches, double maxOverlap, HTuple numLevels, double greediness, HTuple genParamName, HTuple genParamValue, out HTuple score)

HHomMat2D HImage.FindPlanarUncalibDeformableModel(HDeformableModel modelID, double angleStart, double angleExtent, double scaleRMin, double scaleRMax, double scaleCMin, double scaleCMax, double minScore, int numMatches, double maxOverlap, int numLevels, double greediness, HTuple genParamName, HTuple genParamValue, out HTuple score)

def find_planar_uncalib_deformable_model(image: HObject, model_id: HHandle, angle_start: float, angle_extent: float, scale_rmin: float, scale_rmax: float, scale_cmin: float, scale_cmax: float, min_score: float, num_matches: int, max_overlap: float, num_levels: MaybeSequence[int], greediness: float, gen_param_name: Sequence[str], gen_param_value: Sequence[Union[int, float, str]]) -> Tuple[Sequence[float], Sequence[float]]

Beschreibung

Der Operator find_planar_uncalib_deformable_modelfind_planar_uncalib_deformable_modelFindPlanarUncalibDeformableModelFindPlanarUncalibDeformableModelFindPlanarUncalibDeformableModelfind_planar_uncalib_deformable_model sucht die besten NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches Instanzen eines perspektivisch verzerrten deformierbaren Modells ModelIDModelIDModelIDModelIDmodelIDmodel_id in dem Suchbild ImageImageImageImageimageimage. Die Modelle müssen vorher durch create_planar_uncalib_deformable_modelcreate_planar_uncalib_deformable_modelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelcreate_planar_uncalib_deformable_model oder read_deformable_modelread_deformable_modelReadDeformableModelReadDeformableModelReadDeformableModelread_deformable_model erzeugt worden sein.

HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d bestimmt die projektive Transformation (Homographie), welche die Lage des gefundenen Matches beschreibt. Falls mehrere Objekte gefunden werden, werden die verschiedenen Homographien aneinandergefügt. Dann kann eine einzelne Homographie mittels tuple_select_range(HomMat2D,Index*9,(Index+1)*9-1, SelectedHomMat2D)tuple_select_range(HomMat2D,Index*9,(Index+1)*9-1, SelectedHomMat2D)TupleSelectRange(HomMat2D,Index*9,(Index+1)*9-1, SelectedHomMat2D)TupleSelectRange(HomMat2D,Index*9,(Index+1)*9-1, SelectedHomMat2D)TupleSelectRange(HomMat2D,Index*9,(Index+1)*9-1, SelectedHomMat2D)tuple_select_range(HomMat2D,Index*9,(Index+1)*9-1, SelectedHomMat2D) extrahiert werden. Die verschiedenen Ergebnisse sind nach absteigendem ScoreScoreScoreScorescorescore sortiert.

Die Zeilen- und Spaltenkoordinaten des Ursprungs des deformierbaren Modells im Suchbild können durch Aufruf von projective_trans_pixel(HomMat2D,0,0,Row,Column)projective_trans_pixel(HomMat2D,0,0,Row,Column)ProjectiveTransPixel(HomMat2D,0,0,Row,Column)ProjectiveTransPixel(HomMat2D,0,0,Row,Column)ProjectiveTransPixel(HomMat2D,0,0,Row,Column)projective_trans_pixel(HomMat2D,0,0,Row,Column) bestimmt werden.

Normalerweise ist der Ursprung des Modells der Schwerpunkt der Bildregion, welche zur Erzeugung des Formmodells mittels create_planar_uncalib_deformable_modelcreate_planar_uncalib_deformable_modelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelcreate_planar_uncalib_deformable_model verwendet wurde. Der Ursprung kann mit set_deformable_model_originset_deformable_model_originSetDeformableModelOriginSetDeformableModelOriginSetDeformableModelOriginset_deformable_model_origin modifiziert werden.

Die Modellkonturen der gefundenen Instanzen können mittels projective_trans_contour_xldprojective_trans_contour_xldProjectiveTransContourXldProjectiveTransContourXldProjectiveTransContourXldprojective_trans_contour_xld visualisiert werden. Dazu übergibt man die Homographie HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d und die Modellkontur, welche zuvor durch get_deformable_model_contoursget_deformable_model_contoursGetDeformableModelContoursGetDeformableModelContoursGetDeformableModelContoursget_deformable_model_contours extrahiert wurden.

Der ScoreScoreScoreScorescorescore ist eine Bewertung im Intervall 0 bis 1. Dieser kann darauf hinweisen, wie viel des Modells im Bild sichtbar ist.

Beispiel: Die Hälfte des Modells ist im Bild verdeckt. Folglich kann die Bewertung nicht größer als 0.5 sein.

Eingabeparameter im Detail

ImageImageImageImageimageimage:

Der Definitionsbereich des Bildes ImageImageImageImageimageimage gibt den Suchbereich für den Referenzpunkt des Modells an, d.h. für den Schwerpunkt der Region des Bildes, das zur Erzeugung des deformierbaren Modells mit create_planar_uncalib_deformable_modelcreate_planar_uncalib_deformable_modelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelcreate_planar_uncalib_deformable_model verwendet wurde. Ein eventuell mit set_deformable_model_originset_deformable_model_originSetDeformableModelOriginSetDeformableModelOriginSetDeformableModelOriginset_deformable_model_origin anders gesetzter Ursprung wird nicht berücksichtigt. Das Modell wird innerhalb des Definitionsbereiches des Eingabebildes nur an den Stellen gesucht, an denen das Modell vollständig in das Bild passt. Das bedeutet, dass das Modell nicht gefunden werden kann, wenn es aus dem Bild herausragt, selbst wenn eine Bewertung größer als MinScoreMinScoreMinScoreMinScoreminScoremin_score erreichen würde (siehe unten). Außerdem kann es sein, dass das Modell, wenn es in einer der Pyramidenebenen den Bildrand berührt, ebenfalls nicht gefunden wird, auch wenn es im ursprünglichen Bild vollständig enthalten ist. Als Daumenregel gilt hier, dass das Modell dann nicht gefunden werden könnte, wenn seine Distanz zum Bildrand unter fällt. Dieses Verhalten kann mit set_system('border_shape_models','true')set_system("border_shape_models","true")SetSystem("border_shape_models","true")SetSystem("border_shape_models","true")SetSystem("border_shape_models","true")set_system("border_shape_models","true") umgestellt werden, so dass auch Modelle gefunden werden, die aus dem Bild herausragen, falls sie eine Bewertung größer als MinScoreMinScoreMinScoreMinScoreminScoremin_score erreichen. Dabei werden Punkte außerhalb des Bildes als verdeckt angesehen, d.h. sie verringern die Bewertung. Es ist zu beachten, dass dieser Modus die Laufzeit der Suche erhöht. Es ist weiter zu beachten, dass in seltenen Fällen, die typischerweise nur in künstlichen Bildern auftreten, auch dann kein Modell gefunden wird, wenn das Modell in einer Pyramidenebene die reduzierte Bilddomäne berührt. In diesem Fall kann es helfen, die Region der Domäne um , z.B., mit dilation_circledilation_circleDilationCircleDilationCircleDilationCircledilation_circle zu vergrößern.

Winkel- und Skalierungs-Parameter:

Die Parameter AngleStartAngleStartAngleStartAngleStartangleStartangle_start, AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent, ScaleRMinScaleRMinScaleRMinScaleRMinscaleRMinscale_rmin, ScaleRMaxScaleRMaxScaleRMaxScaleRMaxscaleRMaxscale_rmax, ScaleCMinScaleCMinScaleCMinScaleCMinscaleCMinscale_cmin und ScaleCMaxScaleCMaxScaleCMaxScaleCMaxscaleCMaxscale_cmax legen einen grundsätzlichen Bereich bis zu einer anisotropen Transformation fest, der auf der obersten Pyramidenstufe des Bildes erschöpfend durchsucht wird. Die Parameter AngleStartAngleStartAngleStartAngleStartangleStartangle_start und AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent legen den Winkelbereich für die möglichen Rotationen des Modells im Bild fest, die erschöpfend durchsucht werden. ScaleRMinScaleRMinScaleRMinScaleRMinscaleRMinscale_rmin, ScaleRMaxScaleRMaxScaleRMaxScaleRMaxscaleRMaxscale_rmax, ScaleCMinScaleCMinScaleCMinScaleCMinscaleCMinscale_cmin und ScaleCMaxScaleCMaxScaleCMaxScaleCMaxscaleCMaxscale_cmax bestimmen den möglichen Bereich von anisotropen Skalierungen die im Bild erschöpfend durchsucht werden. Eine Skalierung von 1 für beide Skalierungsfaktoren entspricht der Originalgröße des Modells.

Es ist zu beachten, dass der Operator find_planar_uncalib_deformable_modelfind_planar_uncalib_deformable_modelFindPlanarUncalibDeformableModelFindPlanarUncalibDeformableModelFindPlanarUncalibDeformableModelfind_planar_uncalib_deformable_model Objekte außerhalb dieses Bereiches, z.B. auch dann wenn das Objekt perspektivisch verzerrt ist, findet. Demzufolge sind die Bereichsparameter eine Art Hinweis für den Suchalgorithmus find_planar_uncalib_deformable_modelfind_planar_uncalib_deformable_modelFindPlanarUncalibDeformableModelFindPlanarUncalibDeformableModelFindPlanarUncalibDeformableModelfind_planar_uncalib_deformable_model, und ausgehend von diesem Bereich kann in einem größeren Bereich, der von der Anzahl der Pyramidenstufen wie auch vom Bildinhalt abhängt, detektiert werden. Es ist zum Beispiel wichtig zu beachten, dass kleine Skalierungsunterschiede ohne die explizite Angabe eines Skalierungsbereichs detektiert werden, was zu einer schnelleren Ausführungszeit führt.

Falls das Objekt signifikante Skalierungsunterschiede aufweist, aber nur kleine perspektivische Verzeichnungen, benötigt man nur eine isotrope Skalierung und ScaleCMinScaleCMinScaleCMinScaleCMinscaleCMinscale_cmin wie auch ScaleCMaxScaleCMaxScaleCMaxScaleCMaxscaleCMaxscale_cmax sollten auf den Wert 1.0 gesetzt werden, um zu signalisieren, dass keine anisotrope Skalierung benötigt wird. Falls das Objekt auch unter deutlichen Verkippungen erkannt werden soll, benötigt man eine anisotrope Skalierung. In diesem Fall wird die anisotrope Skalierung durch ScaleRMinScaleRMinScaleRMinScaleRMinscaleRMinscale_rmin und ScaleRMaxScaleRMaxScaleRMaxScaleRMaxscaleRMaxscale_rmax in Zeilenrichtung, und durch ScaleCMinScaleCMinScaleCMinScaleCMinscaleCMinscale_cmin und ScaleCMaxScaleCMaxScaleCMaxScaleCMaxscaleCMaxscale_cmax in Spaltenrichtung eingestellt.

Es ist zu beachten, dass die Transformationen intern so behandelt werden, dass erst die Skalierungen und dann die Rotation angewendet werden. Daher sollte das Modell im Normalfall so ausgerichtet werden, dass es im Modellbild horizontal oder vertikal erscheint.

Zusätzlich verarbeitet find_planar_uncalib_deformable_modelfind_planar_uncalib_deformable_modelFindPlanarUncalibDeformableModelFindPlanarUncalibDeformableModelFindPlanarUncalibDeformableModelfind_planar_uncalib_deformable_model die Parameter 'angle_step', 'scale_r_step' und 'scale_c_step', die mit dem Operator create_planar_uncalib_deformable_modelcreate_planar_uncalib_deformable_modelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelcreate_planar_uncalib_deformable_model gesetzt werden können, oder aber, wie unten beschrieben, mit den generischen Parametern GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value. In den meisten Fällen führen die Werte, die automatisch mit create_planar_uncalib_deformable_modelcreate_planar_uncalib_deformable_modelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelcreate_planar_uncalib_deformable_model berechnet werden können, zu guten Resultaten.

Der Parameter 'angle_step' bestimmt die Schrittweite innerhalb des ausgewählten Winkelbereichs. Der Parameter 'angle_step' sollte aufgrund der Größe des Objekts gewählt werden. Kleinere Modelle besitzen nur eine kleine Anzahl von verschiedenen diskreten Rotationen im Bild. Deshalb sollte 'angle_step' für kleinere Modelle größer gewählt werden. Falls AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent kein ganzzahliges Vielfaches von 'angle_step' ist, wird 'angle_step' entsprechend angepasst. Die Parameter 'scale_r_step' und 'scale_c_step' bestimmen die Schrittweite innerhalb des Skalierungsbereichs. Wie auch 'angle_step' sollten 'scale_r_step' und 'scale_c_step' aufgrund der Größe des Modells gewählt werden. Falls der jeweilige Skalierungsbereich kein ganzzahliges Vielfaches von 'scale_r_step' und 'scale_c_step' ist, werden 'scale_r_step' und 'scale_c_step' entsprechend angepasst.

MinScoreMinScoreMinScoreMinScoreminScoremin_score:

Der Parameter MinScoreMinScoreMinScoreMinScoreminScoremin_score bestimmt, welchen Score ein potenzieller Match mindestens haben muss, damit er als Instanz des Modells im Bild angesehen wird. Umso höher MinScoreMinScoreMinScoreMinScoreminScoremin_score gewählt wird, umso schneller wird die Suche im Bild. Falls das Modell niemals verdeckt wird, kann MinScoreMinScoreMinScoreMinScoreminScoremin_score sogar auf 0.8 oder sogar 0.9 gesetzt werden.

NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches:

Die maximale Anzahl der Instanzen, die gefunden werden können, kann mit NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches angegeben werden. Falls mehr als NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches Instanzen einen Wert größer als MinScoreMinScoreMinScoreMinScoreminScoremin_score haben, werden nur die besten NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches zurückgegeben. Falls weniger als NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches gefunden werden, wird nur diese Anzahl zurückgegeben, das heißt, dass der Parameter MinScoreMinScoreMinScoreMinScoreminScoremin_score Vorrang vor NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches hat. Sollen alle Modellinstanzen, deren Bewertung MinScoreMinScoreMinScoreMinScoreminScoremin_score übersteigt, im Bild gefunden werden, muss NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches auf 0 gesetzt werden. In seltenen Fällen muss NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches auf einen höheren Wert als die beabsichtigte Anzahl von gefundenen Instanzen gesetzt werden. Das ist z.B. der Fall, wenn ein kleiner Wert für MinScoreMinScoreMinScoreMinScoreminScoremin_score gesetzt wurde.

Beim Tracken der Matches durch die Bildpyramide werden auf jeder Ebene Matches verworfen, die wenig vielversprechend sind. Dadurch ist es möglich, dass Matches verworfen werden, die auf der niedrigsten Pyramidenebene einen höheren Score gehabt hätten. Beispielsweise kann das dazu führen, dass der gefundene Match für NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches gleich 1 nicht mit dem Match mit dem höchsten Score übereinstimmt, der von NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches gleich 0 oder > 1 zurückgegeben wird.

Falls erwartet wird, dass mehrere Objekte mit einem ähnlichen Score gefunden werden können, aber nur das Modell mit dem höchsten Score zurückgegeben werden soll, kann es vorteilhaft sein, NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches zu erhöhen, und dann den Match mit dem höchsten Score auszuwählen.

MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlapmax_overlap:

Falls das Modell Symmetrien aufweist, kann es vorkommen, dass mehrere Instanzen an ähnlichen Positionen im Bild, aber mit verschiedenen Rotationen gefunden werden. Mit dem Parameter MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlapmax_overlap kann bestimmt werden, um welchen Anteil, ausgedrückt als Zahl zwischen 0 und 1, sich zwei Instanzen höchstens überlappen dürfen, damit sie als verschieden angesehen werden, und somit zurückgeliefert werden. Falls sich zwei Instanzen um mehr als MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlapmax_overlap überlappen, wird nur die beste gefundene Instanz zurückgeliefert. Die Berechnung der Überlappung erfolgt anhand der kleinsten umschließenden Rechtecke beliebiger Orientierung der Konturen (siehe smallest_rectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2SmallestRectangle2smallest_rectangle2). Bei MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlapmax_overlap=0 dürfen sich die gefundenen Instanzen nicht überlappen, bei MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlapmax_overlap=1 werden alle gefundenen Instanzen zurückgeliefert.

GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name, GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value:

Mit Hilfe der generischen Parameter GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value können mögliche Parameter angepasst werden, die typischerweise nicht von dem Benutzer verändert werden müssen. Grundsätzlich wird die Position mit hoher Subpixelgenauigkeit ('least_squares_very_high'"least_squares_very_high""least_squares_very_high""least_squares_very_high""least_squares_very_high""least_squares_very_high") durch eine Kleinste-Quadrate Ausgleichung berechnet, das heißt, das die Abstände von Modellpunkten zu ihren korrespondierenden Bildpunkten minimiert werden. Falls diese hohe Genauigkeit von einer Anwendung nicht benötigt wird, kann die Subpixelgenaue Verfeinerung verringert oder sogar ganz ausgeschaltet werden, um die Laufzeit zu verkürzen. Hierzu wird 'subpixel' in GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name und 'none'"none""none""none""none""none", 'least_squares'"least_squares""least_squares""least_squares""least_squares""least_squares" oder 'least_squares_high'"least_squares_high""least_squares_high""least_squares_high""least_squares_high""least_squares_high" für GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value übergeben. Eine weitere Anwendung für GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name und GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value ist das Überschreiben der Diskretisierungsschritte des Suchraums 'angle_step', 'scale_r_step' und 'scale_c_step', die definiert wurden als das Model mit create_planar_uncalib_deformable_modelcreate_planar_uncalib_deformable_modelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelcreate_planar_uncalib_deformable_model erzeugt wurde.

Wie in create_planar_uncalib_deformable_modelcreate_planar_uncalib_deformable_modelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelcreate_planar_uncalib_deformable_model beschrieben, führt der deformierbare Matching-Algorithmus eine vollkommene Suche des Basissuchbereichs, der mit AngleStartAngleStartAngleStartAngleStartangleStartangle_start, AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent, ScaleRMinScaleRMinScaleRMinScaleRMinscaleRMinscale_rmin, ScaleRMaxScaleRMaxScaleRMaxScaleRMaxscaleRMaxscale_rmax, ScaleCMinScaleCMinScaleCMinScaleCMinscaleCMinscale_cmin und ScaleCMaxScaleCMaxScaleCMaxScaleCMaxscaleCMaxscale_cmax angegeben wird, aus. Um die Erkennung von sogar perspektivisch verzeichneten Objekten zu erlauben, wird eine zusätzliche Transformation geschätzt. Diese zusätzliche Transformation bring das Modell vom ursprünglichen Suchbereich in einen größeren, perspektivisch verzeichneten Suchbereich. Dadurch, dass perspektivische Verzeichnungen erlaubt werden, steigt das Risiko von falschen Matches. Eine zusätzliche Verwendung des Parameters GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name ist es, falsch als positiv Klassifizierte Matches zu verwerfen. Das ist zum Beispiel nötig, falls ein kleiner Wert in MinScoreMinScoreMinScoreMinScoreminScoremin_score angegeben wurde und das Bild signifikanten Hintergrund mit ähnlichem Aussehen wie das Modell enthält.

Um beliebige, zufällige, perspektivische Verzeichnungen zu unterdrücken, können die Parameter 'angle_change_restriction'"angle_change_restriction""angle_change_restriction""angle_change_restriction""angle_change_restriction""angle_change_restriction" und 'aniso_scale_change_restriction'"aniso_scale_change_restriction""aniso_scale_change_restriction""aniso_scale_change_restriction""aniso_scale_change_restriction""aniso_scale_change_restriction" in GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name verwendet werden. Mit 'angle_change_restriction'"angle_change_restriction""angle_change_restriction""angle_change_restriction""angle_change_restriction""angle_change_restriction" wird die maximal tolerierte Winkelverzeichnung eingeschränkt. Als Standardwert wird verwendet, welcher Ergebnisse mit beliebigen Deformationen zulässt. Wird für 'angle_change_restriction'"angle_change_restriction""angle_change_restriction""angle_change_restriction""angle_change_restriction""angle_change_restriction" der Wert 0 gesetzt, wird keinerlei Deformation erlaubt. Es sollten Werte im Intervall [0, ] verwendet werden. Der Parameter überprüft, ob ein Winkel von 90 Grad an den Ecken des an den Achsen ausgerichteten Rechtecks um die Modellpunkte um mehr als den korrespondierenden GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value für die Modellinstanz verändert wird. Es ist zu beachten, dass dieser Parameter sowohl den affinen (die Scherung) als auch den perspektivischen Anteil der Transformation einschränkt. Zum Beispiel kann mit 'angle_change_restriction'"angle_change_restriction""angle_change_restriction""angle_change_restriction""angle_change_restriction""angle_change_restriction" ein rechteckiges Modell davon abgehalten werden sich zu einem Parallelogramm oder Trapez zu verformen.

Mit dem Parameter 'aniso_scale_change_restriction'"aniso_scale_change_restriction""aniso_scale_change_restriction""aniso_scale_change_restriction""aniso_scale_change_restriction""aniso_scale_change_restriction" kann der anisotrope Skalierungsanteil eingeschränkt werden (der kleinere Anteil geteilt durch den größeren Skalierungsfaktor). Der Wertebereich dieses Parameters reicht vom Standardwert 0.0, der beliebige Deformationen erlaubt, bis zu 1.0, wo keine Deformationen erlaubt sind. Ein Beispiel dafür ist, dass mit diesem Parameter ein quadratisches Modell nicht zu einem rechteckigen Modell verformt werden kann.

NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels:

Mit NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels wird die Anzahl der Pyramidenebenen festgelegt, die bei der Suche verwendet werden soll. Die Anzahl der Ebenen wird gegebenenfalls auf den bei der Erzeugung mit create_planar_uncalib_deformable_modelcreate_planar_uncalib_deformable_modelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelcreate_planar_uncalib_deformable_model angegebenen Bereich beschnitten. Falls NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels als 0 angegeben wird, wird die mit create_planar_uncalib_deformable_modelcreate_planar_uncalib_deformable_modelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelcreate_planar_uncalib_deformable_model angegebene Anzahl verwendet.

GreedinessGreedinessGreedinessGreedinessgreedinessgreediness:

Der Parameter GreedinessGreedinessGreedinessGreedinessgreedinessgreediness bestimmt, wie „gierig“ die Suche durchgeführt werden soll. Für GreedinessGreedinessGreedinessGreedinessgreedinessgreediness=0 wird eine sichere Suchheuristik verwendet, die das Modell, falls im Bild vorhanden, immer findet, wenn die anderen Parameter passend gesetzt sind. Allerdings ist die Suche hiermit relativ zeitaufwendig. Für GreedinessGreedinessGreedinessGreedinessgreedinessgreediness=1 wird eine unsichere Suchheuristik verwendet, bei der es in seltenen Fällen vorkommen kann, dass das Modell nicht gefunden wird, obwohl es im Bild sichtbar ist. Für GreedinessGreedinessGreedinessGreedinessgreedinessgreediness=1 wird die maximale Suchgeschwindigkeit erreicht. In den allermeisten Fällen wird das Formmodell für GreedinessGreedinessGreedinessGreedinessgreedinessgreediness=0.9 immer sicher gefunden.

Ausgabeparameter im Detail

HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d:

Die projektive Transformation (Homographie), die die Position der gefundenen Instanzen des Modells angeben, wird in HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d zurückgegeben. Falls mehrere Objekte gefunden werden, werden die verschiedenen Homographien aneinandergefügt. Eine einzelne Homographie kann mittels tuple_select_range(HomMat2D,Index*9,(Index+1)*9-1, SelectedHomMat2D)tuple_select_range(HomMat2D,Index*9,(Index+1)*9-1, SelectedHomMat2D)TupleSelectRange(HomMat2D,Index*9,(Index+1)*9-1, SelectedHomMat2D)TupleSelectRange(HomMat2D,Index*9,(Index+1)*9-1, SelectedHomMat2D)TupleSelectRange(HomMat2D,Index*9,(Index+1)*9-1, SelectedHomMat2D)tuple_select_range(HomMat2D,Index*9,(Index+1)*9-1, SelectedHomMat2D) extrahiert werden. Die gefundenen Ergebnisse werden absteigend nach ScoreScoreScoreScorescorescore sortiert. Die Zeilen- und Spaltenkoordinaten sind die Koordinaten des Ursprungs des deformierbaren Modells im Suchbild, welches durch einen Aufruf von projective_trans_pixel(HomMat2D,0,0,Row,Column)projective_trans_pixel(HomMat2D,0,0,Row,Column)ProjectiveTransPixel(HomMat2D,0,0,Row,Column)ProjectiveTransPixel(HomMat2D,0,0,Row,Column)ProjectiveTransPixel(HomMat2D,0,0,Row,Column)projective_trans_pixel(HomMat2D,0,0,Row,Column) gefunden werden kann. Standardmäßig ist der Ursprung der Schwerpunkt der Domäne (Region) des Bildes, welches zur Erzeugung des deformierbaren Modells mit create_planar_uncalib_deformable_modelcreate_planar_uncalib_deformable_modelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelcreate_planar_uncalib_deformable_model verwendet wurde. Ein anderer Ursprung kann mit set_deformable_model_originset_deformable_model_originSetDeformableModelOriginSetDeformableModelOriginSetDeformableModelOriginset_deformable_model_origin gesetzt werden. Zu Visualisierungszwecken können die Modellkonturen, die mit get_deformable_model_contoursget_deformable_model_contoursGetDeformableModelContoursGetDeformableModelContoursGetDeformableModelContoursget_deformable_model_contours extrahiert wurden, mit projective_trans_contour_xldprojective_trans_contour_xldProjectiveTransContourXldProjectiveTransContourXldProjectiveTransContourXldprojective_trans_contour_xld and die Stelle projiziert werden, an der die Instanz gefunden wurde (angegeben durch HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d).

ScoreScoreScoreScorescorescore:

Zusätzlich wird eine Bewertung für jede gefundene Instanz in ScoreScoreScoreScorescorescore zurückgegeben. Die Bewertung ist eine Zahl zwischen 0 und 1 und ist ein ungefähres Maß dafür, wie viel von dem Modell im Bild sichtbar ist. Ist beispielsweise die Hälfte des Modells verdeckt, so kann die Bewertung nicht über 0.5 liegen.

Ausführungsinformationen

Parameter

ImageImageImageImageimageimage (input_object)  (multichannel-)image objectHImageHObjectHImageHobject (byte / uint2)

Eingabebild, in dem das Modell gefunden werden soll.

ModelIDModelIDModelIDModelIDmodelIDmodel_id (input_control)  deformable_model HDeformableModel, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des Modells.

AngleStartAngleStartAngleStartAngleStartangleStartangle_start (input_control)  angle.rad HTuplefloatHTupleHtuple (real) (double) (double) (double)

Kleinste auftretende Rotation des Modells.

Defaultwert: -0.39

Wertevorschläge: -3.14, -1.57, -0.79, -0.39, -0.20, 0.0

AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent (input_control)  angle.rad HTuplefloatHTupleHtuple (real) (double) (double) (double)

Ausdehnung des Winkelbereichs.

Defaultwert: 0.78

Wertevorschläge: 6.29, 3.14, 1.57, 0.79, 0.39, 0.0

Restriktion: AngleExtent >= 0

ScaleRMinScaleRMinScaleRMinScaleRMinscaleRMinscale_rmin (input_control)  number HTuplefloatHTupleHtuple (real) (double) (double) (double)

Kleinste auftretende Skalierung des Modells in Zeilenrichtung.

Defaultwert: 1.0

Wertevorschläge: 0.5, 0.6, 0.7, 0.8, 0.9, 1.0

Restriktion: ScaleRMin > 0

ScaleRMaxScaleRMaxScaleRMaxScaleRMaxscaleRMaxscale_rmax (input_control)  number HTuplefloatHTupleHtuple (real) (double) (double) (double)

Größte auftretende Skalierung des Modells in Zeilenrichtung.

Defaultwert: 1.0

Wertevorschläge: 1.0, 1.1, 1.2, 1.3, 1.4, 1.5

Restriktion: ScaleRMax >= ScaleRMin

ScaleCMinScaleCMinScaleCMinScaleCMinscaleCMinscale_cmin (input_control)  number HTuplefloatHTupleHtuple (real) (double) (double) (double)

Kleinste auftretende Skalierung des Modells in Spaltenrichtung.

Defaultwert: 1.0

Wertevorschläge: 0.5, 0.6, 0.7, 0.8, 0.9, 1.0

Restriktion: ScaleCMin > 0

ScaleCMaxScaleCMaxScaleCMaxScaleCMaxscaleCMaxscale_cmax (input_control)  number HTuplefloatHTupleHtuple (real) (double) (double) (double)

Größte auftretende Skalierung des Modells in Spaltenrichtung.

Defaultwert: 1.0

Wertevorschläge: 1.0, 1.1, 1.2, 1.3, 1.4, 1.5

Restriktion: ScaleCMax >= ScaleCMin

MinScoreMinScoreMinScoreMinScoreminScoremin_score (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Minimale Bewertung der zu findenden Instanzen des Modells.

Defaultwert: 0.5

Wertevorschläge: 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0

Typischer Wertebereich: 0 ≤ MinScore MinScore MinScore MinScore minScore min_score ≤ 1

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.05

NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches (input_control)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Anzahl der zu findenden Instanzen des Modells (oder 0 für alle Treffer).

Defaultwert: 1

Wertevorschläge: 0, 1, 2, 3, 4, 5, 10, 20

MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlapmax_overlap (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

Maximale Überlappung der zu findenden Instanzen des Modells.

Defaultwert: 1.0

Wertevorschläge: 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0

Typischer Wertebereich: 0 ≤ MaxOverlap MaxOverlap MaxOverlap MaxOverlap maxOverlap max_overlap ≤ 1

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.05

NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels (input_control)  integer(-array) HTupleMaybeSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Anzahl der verwendeten Pyramidenebenen (und unterste zu verwendende Pyramidenebene falls |NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels| = 2).

Defaultwert: 0

Werteliste: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

GreedinessGreedinessGreedinessGreedinessgreedinessgreediness (input_control)  real HTuplefloatHTupleHtuple (real) (double) (double) (double)

„Gierigkeit“ der Suchheuristik (0: sicher aber langsam; 1: schnell aber Matches können „übersehen“ werden).

Defaultwert: 0.9

Wertevorschläge: 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0

Typischer Wertebereich: 0 ≤ Greediness Greediness Greediness Greediness greediness greediness ≤ 1

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.05

GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name (input_control)  string-array HTupleSequence[str]HTupleHtuple (string) (string) (HString) (char*)

Namen der allgemeinen Parameter.

Defaultwert: []

Werteliste: [], 'angle_change_restriction'"angle_change_restriction""angle_change_restriction""angle_change_restriction""angle_change_restriction""angle_change_restriction", 'angle_step'"angle_step""angle_step""angle_step""angle_step""angle_step", 'aniso_scale_change_restriction'"aniso_scale_change_restriction""aniso_scale_change_restriction""aniso_scale_change_restriction""aniso_scale_change_restriction""aniso_scale_change_restriction", 'scale_c_step'"scale_c_step""scale_c_step""scale_c_step""scale_c_step""scale_c_step", 'scale_r_step'"scale_r_step""scale_r_step""scale_r_step""scale_r_step""scale_r_step", 'subpixel'"subpixel""subpixel""subpixel""subpixel""subpixel"

GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value (input_control)  integer-array HTupleSequence[Union[int, float, str]]HTupleHtuple (integer / real / string) (int / long / double / string) (Hlong / double / HString) (Hlong / double / char*)

Werte der allgemeinen Parameter.

Defaultwert: []

Werteliste: [], 'least_squares'"least_squares""least_squares""least_squares""least_squares""least_squares", 'least_squares_high'"least_squares_high""least_squares_high""least_squares_high""least_squares_high""least_squares_high", 'least_squares_very_high'"least_squares_very_high""least_squares_very_high""least_squares_very_high""least_squares_very_high""least_squares_very_high", 'none'"none""none""none""none""none"

HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d (output_control)  hom_mat2d(-array) HHomMat2D, HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Homographie zwischen Modell und gefundenem Objekt.

ScoreScoreScoreScorescorescore (output_control)  real-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Bewertung der gefundenen Instanzen des Modells.

Ergebnis

Sind die Parameterwerte korrekt, dann liefert find_planar_uncalib_deformable_modelfind_planar_uncalib_deformable_modelFindPlanarUncalibDeformableModelFindPlanarUncalibDeformableModelFindPlanarUncalibDeformableModelfind_planar_uncalib_deformable_model den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

create_planar_uncalib_deformable_modelcreate_planar_uncalib_deformable_modelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelCreatePlanarUncalibDeformableModelcreate_planar_uncalib_deformable_model, read_deformable_modelread_deformable_modelReadDeformableModelReadDeformableModelReadDeformableModelread_deformable_model

Alternativen

find_planar_calib_deformable_modelfind_planar_calib_deformable_modelFindPlanarCalibDeformableModelFindPlanarCalibDeformableModelFindPlanarCalibDeformableModelfind_planar_calib_deformable_model

Modul

Matching