create_scaled_shape_model_xldT_create_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXldcreate_scaled_shape_model_xld (Operator)

Name

create_scaled_shape_model_xldT_create_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXldcreate_scaled_shape_model_xld — Vorbereiten eines isotrop skalierten Formmodells für das Matching aus XLD-Konturen.

Signatur

create_scaled_shape_model_xld(Contours : : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleMin, ScaleMax, ScaleStep, Optimization, Metric, MinContrast : ModelID)

Herror T_create_scaled_shape_model_xld(const Hobject Contours, const Htuple NumLevels, const Htuple AngleStart, const Htuple AngleExtent, const Htuple AngleStep, const Htuple ScaleMin, const Htuple ScaleMax, const Htuple ScaleStep, const Htuple Optimization, const Htuple Metric, const Htuple MinContrast, Htuple* ModelID)

void CreateScaledShapeModelXld(const HObject& Contours, const HTuple& NumLevels, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& AngleStep, const HTuple& ScaleMin, const HTuple& ScaleMax, const HTuple& ScaleStep, const HTuple& Optimization, const HTuple& Metric, const HTuple& MinContrast, HTuple* ModelID)

void HShapeModel::HShapeModel(const HXLDCont& Contours, const HTuple& NumLevels, double AngleStart, double AngleExtent, const HTuple& AngleStep, double ScaleMin, double ScaleMax, const HTuple& ScaleStep, const HTuple& Optimization, const HString& Metric, Hlong MinContrast)

void HShapeModel::HShapeModel(const HXLDCont& Contours, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleMin, double ScaleMax, double ScaleStep, const HString& Optimization, const HString& Metric, Hlong MinContrast)

void HShapeModel::HShapeModel(const HXLDCont& Contours, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleMin, double ScaleMax, double ScaleStep, const char* Optimization, const char* Metric, Hlong MinContrast)

void HShapeModel::HShapeModel(const HXLDCont& Contours, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleMin, double ScaleMax, double ScaleStep, const wchar_t* Optimization, const wchar_t* Metric, Hlong MinContrast)   (Nur Windows)

void HShapeModel::CreateScaledShapeModelXld(const HXLDCont& Contours, const HTuple& NumLevels, double AngleStart, double AngleExtent, const HTuple& AngleStep, double ScaleMin, double ScaleMax, const HTuple& ScaleStep, const HTuple& Optimization, const HString& Metric, Hlong MinContrast)

void HShapeModel::CreateScaledShapeModelXld(const HXLDCont& Contours, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleMin, double ScaleMax, double ScaleStep, const HString& Optimization, const HString& Metric, Hlong MinContrast)

void HShapeModel::CreateScaledShapeModelXld(const HXLDCont& Contours, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleMin, double ScaleMax, double ScaleStep, const char* Optimization, const char* Metric, Hlong MinContrast)

void HShapeModel::CreateScaledShapeModelXld(const HXLDCont& Contours, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleMin, double ScaleMax, double ScaleStep, const wchar_t* Optimization, const wchar_t* Metric, Hlong MinContrast)   (Nur Windows)

HShapeModel HXLDCont::CreateScaledShapeModelXld(const HTuple& NumLevels, double AngleStart, double AngleExtent, const HTuple& AngleStep, double ScaleMin, double ScaleMax, const HTuple& ScaleStep, const HTuple& Optimization, const HString& Metric, Hlong MinContrast) const

HShapeModel HXLDCont::CreateScaledShapeModelXld(Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleMin, double ScaleMax, double ScaleStep, const HString& Optimization, const HString& Metric, Hlong MinContrast) const

HShapeModel HXLDCont::CreateScaledShapeModelXld(Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleMin, double ScaleMax, double ScaleStep, const char* Optimization, const char* Metric, Hlong MinContrast) const

HShapeModel HXLDCont::CreateScaledShapeModelXld(Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleMin, double ScaleMax, double ScaleStep, const wchar_t* Optimization, const wchar_t* Metric, Hlong MinContrast) const   (Nur Windows)

static void HOperatorSet.CreateScaledShapeModelXld(HObject contours, HTuple numLevels, HTuple angleStart, HTuple angleExtent, HTuple angleStep, HTuple scaleMin, HTuple scaleMax, HTuple scaleStep, HTuple optimization, HTuple metric, HTuple minContrast, out HTuple modelID)

public HShapeModel(HXLDCont contours, HTuple numLevels, double angleStart, double angleExtent, HTuple angleStep, double scaleMin, double scaleMax, HTuple scaleStep, HTuple optimization, string metric, int minContrast)

public HShapeModel(HXLDCont contours, int numLevels, double angleStart, double angleExtent, double angleStep, double scaleMin, double scaleMax, double scaleStep, string optimization, string metric, int minContrast)

void HShapeModel.CreateScaledShapeModelXld(HXLDCont contours, HTuple numLevels, double angleStart, double angleExtent, HTuple angleStep, double scaleMin, double scaleMax, HTuple scaleStep, HTuple optimization, string metric, int minContrast)

void HShapeModel.CreateScaledShapeModelXld(HXLDCont contours, int numLevels, double angleStart, double angleExtent, double angleStep, double scaleMin, double scaleMax, double scaleStep, string optimization, string metric, int minContrast)

HShapeModel HXLDCont.CreateScaledShapeModelXld(HTuple numLevels, double angleStart, double angleExtent, HTuple angleStep, double scaleMin, double scaleMax, HTuple scaleStep, HTuple optimization, string metric, int minContrast)

HShapeModel HXLDCont.CreateScaledShapeModelXld(int numLevels, double angleStart, double angleExtent, double angleStep, double scaleMin, double scaleMax, double scaleStep, string optimization, string metric, int minContrast)

def create_scaled_shape_model_xld(contours: HObject, num_levels: Union[int, str], angle_start: float, angle_extent: float, angle_step: Union[float, str], scale_min: float, scale_max: float, scale_step: Union[float, str], optimization: MaybeSequence[str], metric: str, min_contrast: int) -> HHandle

Beschreibung

create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXldCreateScaledShapeModelXldcreate_scaled_shape_model_xld erzeugt ein isotrop skaliertes Formmodell für das Matching aus den XLD-Konturen ContoursContoursContoursContourscontourscontours. Die XLD-Konturen repräsentieren dabei die Grauwertkanten des zu suchenden Objekts im Bild. Im Gegensatz zu dem Operator create_scaled_shape_modelcreate_scaled_shape_modelCreateScaledShapeModelCreateScaledShapeModelCreateScaledShapeModelcreate_scaled_shape_model, der ein Formmodell aus einem Bild erzeugt, erzeugt der Operator create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXldCreateScaledShapeModelXldcreate_scaled_shape_model_xld das Formmodell aus XLD-Konturen, d.h., ohne die Verwendung eines Bildes.

Der Ausgabeparameter ModelIDModelIDModelIDModelIDmodelIDmodel_id ist ein Handle für dieses Modell, der in nachfolgenden Aufrufen von find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model verwendet wird. Als Ursprung (Referenzpunkt) des Modells wird der Schwerpunkt des kleinsten umschließenden Rechtecks der Konturen ContoursContoursContoursContourscontourscontours, das parallel zu den Koordinatenachsen liegt, verwendet. Falls ein anderer Ursprung gewünscht wird, kann dieser mit set_shape_model_originset_shape_model_originSetShapeModelOriginSetShapeModelOriginSetShapeModelOriginset_shape_model_origin gesetzt werden. Das Modell wird für mehrere Pyramidenebenen generiert und im Speicher abgelegt. Falls eine vollständige Vorabgenerierung des Modells gewählt wird (siehe unten), wird das Modell in mehreren Rotationen und Skalierungen auf jeder Ebene generiert. Das Modell kann mit set_shape_model_clutterset_shape_model_clutterSetShapeModelClutterSetShapeModelClutterSetShapeModelClutterset_shape_model_clutter um Störparameter erweitert werden.

Eingabeparameter im Detail

NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels:

Die Anzahl der Pyramidenebenen wird mit NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels festgelegt. Sie sollte so groß wie möglich gewählt werden, da hierdurch das Auffinden des Modells erheblich beschleunigt wird. Bei der Wahl von NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels ist aber darauf zu achten, dass das Modell auf der obersten Pyramidenstufe noch erkennbar ist und genügend viele Punkte besitzt (mindestens vier). Falls nicht genügend Modellpunkte erzeugt werden, wird die Anzahl der Pyramidenstufen intern solange reduziert, bis auf der obersten Pyramidenstufe genügend Modellpunkte vorhanden sind. Falls durch diese Anpassung ein Modell mit keiner Pyramidenstufe entstehen würde, d.h. falls schon auf der untersten Pyramidenstufe zu wenige Modellpunkte vorhanden sind, liefert create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXldCreateScaledShapeModelXldcreate_scaled_shape_model_xld eine Fehlermeldung zurück.

Falls für NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels 'auto'"auto""auto""auto""auto""auto" übergeben wird, wählt create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXldCreateScaledShapeModelXldcreate_scaled_shape_model_xld die Anzahl der Pyramidenstufen automatisch. Die gewählte Anzahl von Pyramidenstufen kann mit get_shape_model_paramsget_shape_model_paramsGetShapeModelParamsGetShapeModelParamsGetShapeModelParamsget_shape_model_params abgefragt werden. In seltenen Fällen kann es vorkommen, dass create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXldCreateScaledShapeModelXldcreate_scaled_shape_model_xld die Anzahl der Pyramidenstufen zu hoch oder zu niedrig bestimmt. Falls die Anzahl der Pyramidenstufen zu hoch gewählt wird, kann das dazu führen, dass das Modell im Bild nicht erkannt wird oder dass sehr niedrige Parameter für MinScoreMinScoreMinScoreMinScoreminScoremin_score oder GreedinessGreedinessGreedinessGreedinessgreedinessgreediness in find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model selektiert werden müssen, damit das Modell gefunden wird. Falls die Anzahl der Pyramidenstufen zu niedrig gewählt wird, kann es zu erhöhten Laufzeiten in find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model kommen. In diesen Fällen sollte die Anzahl der Pyramidenstufen manuell gewählt werden.

AngleStartAngleStartAngleStartAngleStartangleStartangle_start, AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent und AngleStepAngleStepAngleStepAngleStepangleStepangle_step:

Die Parameter AngleStartAngleStartAngleStartAngleStartangleStartangle_start und AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent legen den Winkelbereich für die möglichen Rotationen des Objektes im Bild fest. Das Objekt kann also mit find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model nur in diesem Winkelbereich gefunden werden. Der Parameter AngleStepAngleStepAngleStepAngleStepangleStepangle_step gibt die Schrittweite der Winkel in dem gewählten Winkelbereich an. Falls bei find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model keine Subpixelgenauigkeit spezifiziert wird, gibt AngleStepAngleStepAngleStepAngleStepangleStepangle_step also die erreichbare Winkelgenauigkeit an. AngleStepAngleStepAngleStepAngleStepangleStepangle_step sollte aufgrund der Größe des Objektes gewählt werden. Kleinere Modelle besitzen nur eine kleine Anzahl von verschiedenen diskreten Rotationen im Bild. Deshalb sollte AngleStepAngleStepAngleStepAngleStepangleStepangle_step für kleinere Modelle größer gewählt werden. Falls AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent kein ganzzahliges Vielfaches von AngleStepAngleStepAngleStepAngleStepangleStepangle_step ist, wird AngleStepAngleStepAngleStepAngleStepangleStepangle_step entsprechend angepasst. Um sicherzustellen, dass find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model für Modellinstanzen ohne Rotation Winkel von exakt 0.0 zurückgibt, wird der Winkelbereich der möglichen Rotationen folgendermaßen angepasst: Wenn kein positiver ganzzahliger Wert n existiert, für den AngleStartAngleStartAngleStartAngleStartangleStartangle_start plus n mal AngleStepAngleStepAngleStepAngleStepangleStepangle_step genau Null ergibt, wird AngleStartAngleStartAngleStartAngleStartangleStartangle_start um höchstens AngleStepAngleStepAngleStepAngleStepangleStepangle_step verringert, und AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent wird um AngleStepAngleStepAngleStepAngleStepangleStepangle_step vergrößert.

ScaleMinScaleMinScaleMinScaleMinscaleMinscale_min, ScaleMaxScaleMaxScaleMaxScaleMaxscaleMaxscale_max und ScaleStepScaleStepScaleStepScaleStepscaleStepscale_step:

Die Parameter ScaleMinScaleMinScaleMinScaleMinscaleMinscale_min und ScaleMaxScaleMaxScaleMaxScaleMaxscaleMaxscale_max legen den Bereich der möglichen Skalierung (Größe) des Objektes im Bild fest. Eine Skalierung von 1 entspricht der Originalgröße des Modells. Der Parameter ScaleStepScaleStepScaleStepScaleStepscaleStepscale_step gibt die Schrittweite der Skalierungen an. Falls bei find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model keine Subpixelgenauigkeit spezifiziert wird, gibt ScaleStepScaleStepScaleStepScaleStepscaleStepscale_step also die erreichbare Genauigkeit der Skalierung an. Wie AngleStepAngleStepAngleStepAngleStepangleStepangle_step sollte ScaleStepScaleStepScaleStepScaleStepscaleStepscale_step aufgrund der Größe des Objektes gewählt werden. Falls der Skalierungsbereich kein ganzzahliges Vielfaches von ScaleStepScaleStepScaleStepScaleStepscaleStepscale_step ist, wird ScaleStepScaleStepScaleStepScaleStepscaleStepscale_step entsprechend angepasst. Um sicherzustellen, dass find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model für Modellinstanzen ohne Skalierung Skalierungen von exakt 1.0 zurückgibt, wird der Bereich der möglichen Skalierungen folgendermaßen angepasst: Wenn kein positiver ganzzahliger Wert n existiert, für den ScaleMinScaleMinScaleMinScaleMinscaleMinscale_min plus n mal ScaleStepScaleStepScaleStepScaleStepscaleStepscale_step genau 1.0 ergibt, wird ScaleMinScaleMinScaleMinScaleMinscaleMinscale_min um höchstens ScaleStepScaleStepScaleStepScaleStepscaleStepscale_step verringert, und ScaleMaxScaleMaxScaleMaxScaleMaxscaleMaxscale_max wird so erhöht, dass der Skalierungsbereich um ScaleStepScaleStepScaleStepScaleStepscaleStepscale_step vergrößert wird.

OptimizationOptimizationOptimizationOptimizationoptimizationoptimization:

Bei besonders großen Modellen kann es auch sinnvoll sein, die Anzahl der Modellpunkte durch Setzen des Parameters OptimizationOptimizationOptimizationOptimizationoptimizationoptimization auf einen Wert ungleich 'none'"none""none""none""none""none" zu setzen. Falls OptimizationOptimizationOptimizationOptimizationoptimizationoptimization = 'none'"none""none""none""none""none", werden alle Modellpunkte abgespeichert. Ansonsten wird die Anzahl der Punkte entsprechend dem Parameter OptimizationOptimizationOptimizationOptimizationoptimizationoptimization reduziert. Falls die Anzahl der Punkte reduziert wird, kann es bei find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model notwendig werden, den Parameter GreedinessGreedinessGreedinessGreedinessgreedinessgreediness auf einen kleineren Wert, z.B. 0.7 oder 0.8, zu setzen. Bei kleineren Modellen bewirkt die Reduktion der Anzahl der Punkte keine Beschleunigung, da dadurch typischerweise wesentlich mehr potentielle Instanzen des Modells untersucht werden müssen.

Falls für OptimizationOptimizationOptimizationOptimizationoptimizationoptimization 'auto'"auto""auto""auto""auto""auto" übergeben wird, wählt create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXldCreateScaledShapeModelXldcreate_scaled_shape_model_xld die Reduktion der Punkte automatisch.

MetricMetricMetricMetricmetricmetric:

Der Parameter MetricMetricMetricMetricmetricmetric legt fest, unter welchen Bedingungen das Muster im Bild noch erkannt wird.

Falls MetricMetricMetricMetricmetricmetric = 'use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity""use_polarity", muss das Objekt im Bild dieselben Kontrasteigenschaften aufweisen wie das Modell. Wenn z.B. das Modell ein helles Objekt auf dunklem Hintergrund ist, wird das Objekt im Bild nur dann gefunden, wenn es auch heller als der Hintergrund ist.

Falls MetricMetricMetricMetricmetricmetric = 'ignore_global_polarity'"ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity", wird das Objekt auch dann im Bild gefunden, wenn sich der Kontrast global umkehrt. Im obigen Beispiel würde das Objekt also auch dann gefunden, wenn es dunkler als der Hintergrund ist. Die Laufzeit von find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model erhöht sich in diesem Fall geringfügig.

Es ist zu beachten, dass die beiden Werte 'use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity""use_polarity" und 'ignore_global_polarity'"ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity" für MetricMetricMetricMetricmetricmetric nur dann verwendet werden können, wenn bei allen Konturen, die in ContoursContoursContoursContourscontourscontours übergeben wurden, das Attribut 'edge_direction'"edge_direction""edge_direction""edge_direction""edge_direction""edge_direction" gesetzt ist, da es die Polarität der Kanten festlegt. Für weitere Informationen zu Konturattributen wie 'edge_direction'"edge_direction""edge_direction""edge_direction""edge_direction""edge_direction" siehe get_contour_attrib_xldget_contour_attrib_xldGetContourAttribXldGetContourAttribXldGetContourAttribXldget_contour_attrib_xld. Ansonsten besteht die Möglichkeit, die beiden Werte für MetricMetricMetricMetricmetricmetric mit dem Operator set_shape_model_metricset_shape_model_metricSetShapeModelMetricSetShapeModelMetricSetShapeModelMetricset_shape_model_metric zu setzen, der die Polarität der Kanten aus einem Bild bestimmt.

Falls MetricMetricMetricMetricmetricmetric = 'ignore_local_polarity'"ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity", wird das Modell auch dann gefunden, wenn sich die Kontrastverhältnisse lokal ändern. Dieser Modus kann z.B. dann sinnvoll sein, wenn das Objekt aus einem Teil mittleren Grauwerts besteht, auf dem entweder dunkle oder helle Unterobjekte liegen können. Da sich in diesem Fall die Laufzeit von find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model aber wesentlich erhöht, ist es in solchen Fällen meist sinnvoller, mehrere Modelle mit create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXldCreateScaledShapeModelXldcreate_scaled_shape_model_xld zu erzeugen und mit find_scaled_shape_modelsfind_scaled_shape_modelsFindScaledShapeModelsFindScaledShapeModelsFindScaledShapeModelsfind_scaled_shape_models zu suchen.

Die obigen drei Metriken können nur auf einkanalige Bilder angewendet werden. Falls im Modellbild oder in den Suchbildern ein mehrkanaliges Bild übergeben wird, wird stillschweigend nur der erste Kanal des Bildes verwendet.

Falls MetricMetricMetricMetricmetricmetric = 'ignore_color_polarity'"ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity", wird das Modell auch dann gefunden, falls sich die Farbkontraste lokal ändern können. Dies ist z.B. der Fall, wenn Teile des Objektes ihre Farbe ändern können, z.B. von rot auf grün. Dieser Modus ist insbesondere dann sinnvoll, wenn nicht vorab bekannt ist, in welchen Kanälen das Objekt zu erkennen ist. Auch hier kann sich die Laufzeit von find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model erheblich erhöhen. Die Metrik 'ignore_color_polarity'"ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity" kann auf Bilder mit einer beliebigen Anzahl von Kanälen angewendet werden. Falls sie mit einkanaligen Bildern verwendet wird, hat sie dieselbe Wirkung wie 'ignore_local_polarity'"ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity". Es ist zu beachten, dass für MetricMetricMetricMetricmetricmetric = 'ignore_color_polarity'"ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity" die Kanäle nicht einer spektralen Unterteilung des Lichtes (wie z.B. bei einem RGB-Bild) entsprechen müssen. Die Kanäle können z.B. auch durch Beleuchtung des Objektes aus unterschiedlichen Richtungen entstanden sein.

Es ist auch zu beachten, dass die beiden ersten Werte für MetricMetricMetricMetricmetricmetric ('use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity""use_polarity" und 'ignore_global_polarity'"ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity") nur dann verwendet werden können, wenn bei allen Konturen, die in ContoursContoursContoursContourscontourscontours übergeben wurden, das Attribut 'edge_direction'"edge_direction""edge_direction""edge_direction""edge_direction""edge_direction" gesetzt ist, da es die Polarität der Kanten festlegt. Für weitere Informationen zu Konturattributen wie 'edge_direction'"edge_direction""edge_direction""edge_direction""edge_direction""edge_direction" siehe get_contour_attrib_xldget_contour_attrib_xldGetContourAttribXldGetContourAttribXldGetContourAttribXldget_contour_attrib_xld. Ansonsten besteht die Möglichkeit, die beiden Werte für MetricMetricMetricMetricmetricmetric mit dem Operator set_shape_model_metricset_shape_model_metricSetShapeModelMetricSetShapeModelMetricSetShapeModelMetricset_shape_model_metric zu setzen, der die Polarität der Kanten aus einem Bild bestimmt.

MinContrastMinContrastMinContrastMinContrastminContrastmin_contrast:

Mit MinContrastMinContrastMinContrastMinContrastminContrastmin_contrast wird festgelegt, welchen Grauwertkontrast die Objektkanten später bei der Erkennung mit find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model im Suchbild mindestens besitzen müssen. Mit anderen Worten stellt dieser Parameter somit eine Abgrenzung des Objektes von Rauschen im Bild dar. Eine gute Wahl ist deshalb der Bereich von Grauwertänderungen, der durch das Rauschen im Bild verursacht wird. Falls die Grauwerte z.B. in einem Bereich von 10 Graustufen durch Rauschen schwanken, sollte MinContrastMinContrastMinContrastMinContrastminContrastmin_contrast auf 10 gesetzt werden. Falls mehrkanalige Bilder für das Modell und für die Suchbilder verwendet werden, und falls der Parameter MetricMetricMetricMetricmetricmetric auf 'ignore_color_polarity'"ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity" gesetzt wird (siehe oben), muss das Rauschen in einem Kanal noch mit der Wurzel der Anzahl der Kanäle multipliziert werden, um MinContrastMinContrastMinContrastMinContrastminContrastmin_contrast zu bestimmen. Falls die Grauwerte in einem Kanal z.B. in einem Bereich von 10 Graustufen schwanken, sollte MinContrastMinContrastMinContrastMinContrastminContrastmin_contrast bei einem dreikanaligen Bild auf 17 gesetzt werden. Falls das Modell später in sehr kontrastarmen Bildern erkannt werden soll, muss MinContrastMinContrastMinContrastMinContrastminContrastmin_contrast entsprechend klein gewählt werden. Falls das Modell mit erheblichen Verdeckungen erkannt werden soll, sollte MinContrastMinContrastMinContrastMinContrastminContrastmin_contrast etwas größer als der Grauwertbereich, der durch das Rauschen verursacht wird, gewählt werden, um eine robuste und genaue Lageschätzung des verdeckten Modells zu gewährleisten.

Vollständige Vorabgenerierung des Modells

Optional kann in OptimizationOptimizationOptimizationOptimizationoptimizationoptimization ein zweiter Wert übergeben werden. Dieser Wert legt fest, ob das Modell vollständig vorab generiert wird oder nicht. Der zweite Wert von OptimizationOptimizationOptimizationOptimizationoptimizationoptimization ist hierzu auf 'pregeneration'"pregeneration""pregeneration""pregeneration""pregeneration""pregeneration" oder 'no_pregeneration'"no_pregeneration""no_pregeneration""no_pregeneration""no_pregeneration""no_pregeneration" zu setzen. Falls der zweite Wert nicht angegeben wird, wird der mit set_system('pregenerate_shape_models',...)set_system("pregenerate_shape_models",...)SetSystem("pregenerate_shape_models",...)SetSystem("pregenerate_shape_models",...)SetSystem("pregenerate_shape_models",...)set_system("pregenerate_shape_models",...) eingestellte Modus verwendet. Mit der Standardeinstellung ('pregenerate_shape_models'"pregenerate_shape_models""pregenerate_shape_models""pregenerate_shape_models""pregenerate_shape_models""pregenerate_shape_models" = 'false'"false""false""false""false""false") wird das Modell nicht vollständig vorab generiert. Die vollständige Vorabgenerierung des Modells führt im Normalfall zu leicht geringeren Laufzeiten in find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model, da das Modell nicht zur Laufzeit transformiert werden muss. Allerdings sind in diesem Fall der Speicherbedarf und die Zeit, die zur Modellerzeugung benötigt wird, wesentlich höher. Zu beachten ist auch, dass in den zwei Modi nicht dieselben Ergebnisse erwartet werden können, da intern bei der Transformation zur Laufzeit notwendigerweise andere Daten für die transformierten Modelle entstehen, als bei der Vorabgenerierung. Falls das Modell nicht vorab generiert wird, werden z.B. in find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model typischerweise leicht niedrigere Bewertungen (Scores) zurückgeliefert, so dass es unter Umständen notwendig sein kann, einen niedrigeren Wert für MinScoreMinScoreMinScoreMinScoreminScoremin_score als bei vollständiger Vorabgenerierung zu verwenden. Außerdem können sich die durch Interpolation gewonnenen Subpixelpositionen geringfügig unterscheiden. Falls höchste Genauigkeit gewünscht wird, sollte die Lage des Modells mittels Ausgleichsrechnung (Least-Squares Adjustment) bestimmt werden.

Falls eine vollständige Vorabgenerierung des Modells gewählt wird, wird das Modell in dem gewählten Winkelbereich und Skalierungsbereich vorab generiert und im Speicher abgelegt. Der Speicherbedarf zur Speicherung des Modells ist also proportional zur Anzahl der Winkelschritte, zur Anzahl der Skalierungsschritte und zur Anzahl der Punkte im Modell. Wenn also AngleStepAngleStepAngleStepAngleStepangleStepangle_step oder ScaleStepScaleStepScaleStepScaleStepscaleStepscale_step zu klein bzw. AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent oder der Skalierungsbereich zu groß gewählt werden, kann es vorkommen, dass das Modell nicht mehr in den (virtuellen) Speicher passt. In diesem Fall muss entweder AngleStepAngleStepAngleStepAngleStepangleStepangle_step oder ScaleStepScaleStepScaleStepScaleStepscaleStepscale_step größer oder AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent oder der Skalierungsbereich kleiner gewählt werden. In jedem Fall ist es aus Laufzeitgründen vorteilhaft, wenn das Modell komplett in den Hauptspeicher passt und somit ein Paging durch das Betriebssystem vermieden werden kann. Da die Möglichkeit zur subpixelgenauen Winkelbestimmung in find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model gegeben ist, kann bei Modellen mit einem Durchmesser von ca. 200 Pixeln AngleStepAngleStepAngleStepAngleStepangleStepangle_step >= 1° und ScaleStepScaleStepScaleStepScaleStepscaleStepscale_step >= 0.02 gewählt werden.

Falls AngleStepAngleStepAngleStepAngleStepangleStepangle_step = 0 oder ScaleStepScaleStepScaleStepScaleStepscaleStepscale_step = 'auto'"auto""auto""auto""auto""auto" übergeben wird, wählt create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXldCreateScaledShapeModelXldcreate_scaled_shape_model_xld automatisch eine Schrittweite für die Winkel bzw. Skalierungen basierend auf der Größe des Modells aus. Die automatisch gewählten Schrittweiten können mit get_shape_model_paramsget_shape_model_paramsGetShapeModelParamsGetShapeModelParamsGetShapeModelParamsget_shape_model_params abgefragt werden.

Falls eine vollständige Vorabgenerierung des Modells nicht gewählt wird, wird das Modell nur in einer Referenzlage auf jeder Ebene erzeugt. In diesem Fall muss das Modell zur Laufzeit in find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model auf die verschiedenen Winkel und Skalierungen transformiert werden. Dadurch kann es vorkommen, dass das Auffinden des Modells etwas mehr Zeit benötigt.

Es ist zu beachten, dass vorabgenerierte Modelle für eine spezifische Bildgröße bestimmt sind. Aus Laufzeitgründen ist die Verwendung von Bildern mit verschiedenen Größen während der Suche mit dem gleichen Modell nicht parallel möglich. In diesem Fall müssen Kopien des gleichen Modells verwendet werden. Anderenfalls kann das Programm abstürzen.

Achtung

Die XLD-Konturen, die in ContoursContoursContoursContourscontourscontours übergeben werden, sollten in etwa auf die mittlere Größe skaliert worden sein, in der das Objekt in den Suchbildern erscheint. Das Produkt sollte also etwa 1 ergeben.

Im Gegensatz zum Operator create_scaled_shape_modelcreate_scaled_shape_modelCreateScaledShapeModelCreateScaledShapeModelCreateScaledShapeModelcreate_scaled_shape_model ist es nicht möglich die Mindestgröße der Modellkomponenten anzugeben. Um kleine Modellkomponenten im Formmodell zu vermeiden, können kurze Konturen vor dem Aufruf von create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXldCreateScaledShapeModelXldcreate_scaled_shape_model_xld mit dem Operator select_contours_xldselect_contours_xldSelectContoursXldSelectContoursXldSelectContoursXldselect_contours_xld eliminiert werden.

Ausführungsinformationen

Dieser Operator liefert ein Handle zurück. Es ist zu beachten, dass der Zustand einer Instanz dieses Handletyps durch bestimmte Operatoren geändert werden kann, obwohl das Handle als Eingabeparameter in diesen Operatoren verwendet wird.

Parameter

ContoursContoursContoursContourscontourscontours (input_object)  xld_cont(-array) objectHXLDContHObjectHXLDContHobject

Eingabekonturen, die zum Aufbau des Modells verwendet werden.

NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels (input_control)  integer HTupleUnion[int, str]HTupleHtuple (integer / string) (int / long / string) (Hlong / HString) (Hlong / char*)

Maximale Anzahl von Pyramidenebenen.

Defaultwert: 'auto' "auto" "auto" "auto" "auto" "auto"

Werteliste: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'auto'"auto""auto""auto""auto""auto"

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

Kleinste auftretende Rotation des Musters.

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.79

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

Restriktion: AngleExtent >= 0

AngleStepAngleStepAngleStepAngleStepangleStepangle_step (input_control)  angle.rad HTupleUnion[float, str]HTupleHtuple (real / string) (double / string) (double / HString) (double / char*)

Schrittweite der Winkel (Auflösung).

Defaultwert: 'auto' "auto" "auto" "auto" "auto" "auto"

Wertevorschläge: 'auto'"auto""auto""auto""auto""auto", 0.0175, 0.0349, 0.0524, 0.0698, 0.0873

Restriktion: AngleStep >= 0 && AngleStep <= pi / 2

ScaleMinScaleMinScaleMinScaleMinscaleMinscale_min (input_control)  number HTuplefloatHTupleHtuple (real) (double) (double) (double)

Kleinste auftretende Skalierung des Musters.

Defaultwert: 0.9

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

Restriktion: ScaleMin > 0

ScaleMaxScaleMaxScaleMaxScaleMaxscaleMaxscale_max (input_control)  number HTuplefloatHTupleHtuple (real) (double) (double) (double)

Größte auftretende Skalierung des Musters.

Defaultwert: 1.1

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

Restriktion: ScaleMax >= ScaleMin

ScaleStepScaleStepScaleStepScaleStepscaleStepscale_step (input_control)  number HTupleUnion[float, str]HTupleHtuple (real / string) (double / string) (double / HString) (double / char*)

Schrittweite der Skalierungen (Auflösung).

Defaultwert: 'auto' "auto" "auto" "auto" "auto" "auto"

Wertevorschläge: 'auto'"auto""auto""auto""auto""auto", 0.01, 0.02, 0.05, 0.1, 0.15, 0.2

Restriktion: ScaleStep >= 0

OptimizationOptimizationOptimizationOptimizationoptimizationoptimization (input_control)  string(-array) HTupleMaybeSequence[str]HTupleHtuple (string) (string) (HString) (char*)

Art der Optimierung und optional Methode der Modellgenerierung.

Defaultwert: 'auto' "auto" "auto" "auto" "auto" "auto"

Werteliste: 'auto'"auto""auto""auto""auto""auto", 'no_pregeneration'"no_pregeneration""no_pregeneration""no_pregeneration""no_pregeneration""no_pregeneration", 'none'"none""none""none""none""none", 'point_reduction_high'"point_reduction_high""point_reduction_high""point_reduction_high""point_reduction_high""point_reduction_high", 'point_reduction_low'"point_reduction_low""point_reduction_low""point_reduction_low""point_reduction_low""point_reduction_low", 'point_reduction_medium'"point_reduction_medium""point_reduction_medium""point_reduction_medium""point_reduction_medium""point_reduction_medium", 'pregeneration'"pregeneration""pregeneration""pregeneration""pregeneration""pregeneration"

MetricMetricMetricMetricmetricmetric (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Art der zum Matchen verwendeten Metrik.

Defaultwert: 'ignore_local_polarity' "ignore_local_polarity" "ignore_local_polarity" "ignore_local_polarity" "ignore_local_polarity" "ignore_local_polarity"

Werteliste: 'ignore_color_polarity'"ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity", 'ignore_global_polarity'"ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity", 'ignore_local_polarity'"ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity", 'use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity""use_polarity"

MinContrastMinContrastMinContrastMinContrastminContrastmin_contrast (input_control)  number HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Minimaler Kontrast des Objektes in den Suchbildern.

Defaultwert: 5

Wertevorschläge: 1, 2, 3, 5, 7, 10, 20, 30, 40

ModelIDModelIDModelIDModelIDmodelIDmodel_id (output_control)  shape_model HShapeModel, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des Modells.

Ergebnis

Sind die Parameterwerte korrekt, dann liefert create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXldCreateScaledShapeModelXldcreate_scaled_shape_model_xld den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt. Wenn der Parameter NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels so gewählt wurde, dass das Modell zu wenige Punkte besitzt, wird die Fehlermeldung 8510 zurückgeliefert.

Vorgänger

read_contour_xld_dxfread_contour_xld_dxfReadContourXldDxfReadContourXldDxfReadContourXldDxfread_contour_xld_dxf, edges_sub_pixedges_sub_pixEdgesSubPixEdgesSubPixEdgesSubPixedges_sub_pix, select_contours_xldselect_contours_xldSelectContoursXldSelectContoursXldSelectContoursXldselect_contours_xld

Nachfolger

find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModelFindScaledShapeModelfind_scaled_shape_model, find_scaled_shape_modelsfind_scaled_shape_modelsFindScaledShapeModelsFindScaledShapeModelsFindScaledShapeModelsfind_scaled_shape_models, get_shape_model_paramsget_shape_model_paramsGetShapeModelParamsGetShapeModelParamsGetShapeModelParamsget_shape_model_params, clear_shape_modelclear_shape_modelClearShapeModelClearShapeModelClearShapeModelclear_shape_model, write_shape_modelwrite_shape_modelWriteShapeModelWriteShapeModelWriteShapeModelwrite_shape_model, set_shape_model_originset_shape_model_originSetShapeModelOriginSetShapeModelOriginSetShapeModelOriginset_shape_model_origin, set_shape_model_paramset_shape_model_paramSetShapeModelParamSetShapeModelParamSetShapeModelParamset_shape_model_param, set_shape_model_metricset_shape_model_metricSetShapeModelMetricSetShapeModelMetricSetShapeModelMetricset_shape_model_metric, set_shape_model_clutterset_shape_model_clutterSetShapeModelClutterSetShapeModelClutterSetShapeModelClutterset_shape_model_clutter

Alternativen

create_generic_shape_modelcreate_generic_shape_modelCreateGenericShapeModelCreateGenericShapeModelCreateGenericShapeModelcreate_generic_shape_model

Siehe auch

set_systemset_systemSetSystemSetSystemSetSystemset_system, get_systemget_systemGetSystemGetSystemGetSystemget_system

Modul

Matching