create_aniso_shape_modelT_create_aniso_shape_modelCreateAnisoShapeModelCreateAnisoShapeModel (Operator)

Name

create_aniso_shape_modelT_create_aniso_shape_modelCreateAnisoShapeModelCreateAnisoShapeModel — Vorbereiten eines anisotrop skalierten Formmodells für das Matching.

Signatur

create_aniso_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleRMin, ScaleRMax, ScaleRStep, ScaleCMin, ScaleCMax, ScaleCStep, Optimization, Metric, Contrast, MinContrast : ModelID)

Herror T_create_aniso_shape_model(const Hobject Template, const Htuple NumLevels, const Htuple AngleStart, const Htuple AngleExtent, const Htuple AngleStep, const Htuple ScaleRMin, const Htuple ScaleRMax, const Htuple ScaleRStep, const Htuple ScaleCMin, const Htuple ScaleCMax, const Htuple ScaleCStep, const Htuple Optimization, const Htuple Metric, const Htuple Contrast, const Htuple MinContrast, Htuple* ModelID)

void CreateAnisoShapeModel(const HObject& Template, const HTuple& NumLevels, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& AngleStep, const HTuple& ScaleRMin, const HTuple& ScaleRMax, const HTuple& ScaleRStep, const HTuple& ScaleCMin, const HTuple& ScaleCMax, const HTuple& ScaleCStep, const HTuple& Optimization, const HTuple& Metric, const HTuple& Contrast, const HTuple& MinContrast, HTuple* ModelID)

void HShapeModel::HShapeModel(const HImage& Template, const HTuple& NumLevels, double AngleStart, double AngleExtent, const HTuple& AngleStep, double ScaleRMin, double ScaleRMax, const HTuple& ScaleRStep, double ScaleCMin, double ScaleCMax, const HTuple& ScaleCStep, const HTuple& Optimization, const HString& Metric, const HTuple& Contrast, const HTuple& MinContrast)

void HShapeModel::HShapeModel(const HImage& Template, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleRMin, double ScaleRMax, double ScaleRStep, double ScaleCMin, double ScaleCMax, double ScaleCStep, const HString& Optimization, const HString& Metric, Hlong Contrast, Hlong MinContrast)

void HShapeModel::HShapeModel(const HImage& Template, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleRMin, double ScaleRMax, double ScaleRStep, double ScaleCMin, double ScaleCMax, double ScaleCStep, const char* Optimization, const char* Metric, Hlong Contrast, Hlong MinContrast)

void HShapeModel::HShapeModel(const HImage& Template, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleRMin, double ScaleRMax, double ScaleRStep, double ScaleCMin, double ScaleCMax, double ScaleCStep, const wchar_t* Optimization, const wchar_t* Metric, Hlong Contrast, Hlong MinContrast)   (Nur Windows)

void HShapeModel::CreateAnisoShapeModel(const HImage& Template, const HTuple& NumLevels, double AngleStart, double AngleExtent, const HTuple& AngleStep, double ScaleRMin, double ScaleRMax, const HTuple& ScaleRStep, double ScaleCMin, double ScaleCMax, const HTuple& ScaleCStep, const HTuple& Optimization, const HString& Metric, const HTuple& Contrast, const HTuple& MinContrast)

void HShapeModel::CreateAnisoShapeModel(const HImage& Template, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleRMin, double ScaleRMax, double ScaleRStep, double ScaleCMin, double ScaleCMax, double ScaleCStep, const HString& Optimization, const HString& Metric, Hlong Contrast, Hlong MinContrast)

void HShapeModel::CreateAnisoShapeModel(const HImage& Template, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleRMin, double ScaleRMax, double ScaleRStep, double ScaleCMin, double ScaleCMax, double ScaleCStep, const char* Optimization, const char* Metric, Hlong Contrast, Hlong MinContrast)

void HShapeModel::CreateAnisoShapeModel(const HImage& Template, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleRMin, double ScaleRMax, double ScaleRStep, double ScaleCMin, double ScaleCMax, double ScaleCStep, const wchar_t* Optimization, const wchar_t* Metric, Hlong Contrast, Hlong MinContrast)   (Nur Windows)

HShapeModel HImage::CreateAnisoShapeModel(const HTuple& NumLevels, double AngleStart, double AngleExtent, const HTuple& AngleStep, double ScaleRMin, double ScaleRMax, const HTuple& ScaleRStep, double ScaleCMin, double ScaleCMax, const HTuple& ScaleCStep, const HTuple& Optimization, const HString& Metric, const HTuple& Contrast, const HTuple& MinContrast) const

HShapeModel HImage::CreateAnisoShapeModel(Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleRMin, double ScaleRMax, double ScaleRStep, double ScaleCMin, double ScaleCMax, double ScaleCStep, const HString& Optimization, const HString& Metric, Hlong Contrast, Hlong MinContrast) const

HShapeModel HImage::CreateAnisoShapeModel(Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleRMin, double ScaleRMax, double ScaleRStep, double ScaleCMin, double ScaleCMax, double ScaleCStep, const char* Optimization, const char* Metric, Hlong Contrast, Hlong MinContrast) const

HShapeModel HImage::CreateAnisoShapeModel(Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, double ScaleRMin, double ScaleRMax, double ScaleRStep, double ScaleCMin, double ScaleCMax, double ScaleCStep, const wchar_t* Optimization, const wchar_t* Metric, Hlong Contrast, Hlong MinContrast) const   (Nur Windows)

static void HOperatorSet.CreateAnisoShapeModel(HObject template, HTuple numLevels, HTuple angleStart, HTuple angleExtent, HTuple angleStep, HTuple scaleRMin, HTuple scaleRMax, HTuple scaleRStep, HTuple scaleCMin, HTuple scaleCMax, HTuple scaleCStep, HTuple optimization, HTuple metric, HTuple contrast, HTuple minContrast, out HTuple modelID)

public HShapeModel(HImage template, HTuple numLevels, double angleStart, double angleExtent, HTuple angleStep, double scaleRMin, double scaleRMax, HTuple scaleRStep, double scaleCMin, double scaleCMax, HTuple scaleCStep, HTuple optimization, string metric, HTuple contrast, HTuple minContrast)

public HShapeModel(HImage template, int numLevels, double angleStart, double angleExtent, double angleStep, double scaleRMin, double scaleRMax, double scaleRStep, double scaleCMin, double scaleCMax, double scaleCStep, string optimization, string metric, int contrast, int minContrast)

void HShapeModel.CreateAnisoShapeModel(HImage template, HTuple numLevels, double angleStart, double angleExtent, HTuple angleStep, double scaleRMin, double scaleRMax, HTuple scaleRStep, double scaleCMin, double scaleCMax, HTuple scaleCStep, HTuple optimization, string metric, HTuple contrast, HTuple minContrast)

void HShapeModel.CreateAnisoShapeModel(HImage template, int numLevels, double angleStart, double angleExtent, double angleStep, double scaleRMin, double scaleRMax, double scaleRStep, double scaleCMin, double scaleCMax, double scaleCStep, string optimization, string metric, int contrast, int minContrast)

HShapeModel HImage.CreateAnisoShapeModel(HTuple numLevels, double angleStart, double angleExtent, HTuple angleStep, double scaleRMin, double scaleRMax, HTuple scaleRStep, double scaleCMin, double scaleCMax, HTuple scaleCStep, HTuple optimization, string metric, HTuple contrast, HTuple minContrast)

HShapeModel HImage.CreateAnisoShapeModel(int numLevels, double angleStart, double angleExtent, double angleStep, double scaleRMin, double scaleRMax, double scaleRStep, double scaleCMin, double scaleCMax, double scaleCStep, string optimization, string metric, int contrast, int minContrast)

Beschreibung

create_aniso_shape_modelcreate_aniso_shape_modelCreateAnisoShapeModelCreateAnisoShapeModelCreateAnisoShapeModel bereitet ein Muster, das als Bild TemplateTemplateTemplateTemplatetemplate übergeben wird, als anisotrop skaliertes Formmodell für das Matching vor. Die ROI des Modells wird als der Definitionsbereich von TemplateTemplateTemplateTemplatetemplate übergeben.

Der Ausgabeparameter ModelIDModelIDModelIDModelIDmodelID ist ein Handle für dieses Modell, der in nachfolgenden Aufrufen von find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel verwendet wird. Als Ursprung (Referenzpunkt) des Modells wird der Schwerpunkt der Region des Modellbildes TemplateTemplateTemplateTemplatetemplate verwendet. Falls ein anderer Ursprung gewünscht wird, kann dieser mit set_shape_model_originset_shape_model_originSetShapeModelOriginSetShapeModelOriginSetShapeModelOrigin gesetzt werden. Das Modell wird auf mehreren 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 anisotropen Skalierungen (unabhängigen Skalierungen in Zeilen- und Spaltenrichtung) auf jeder Ebene generiert. Das Modell kann mit set_shape_model_clutterset_shape_model_clutterSetShapeModelClutterSetShapeModelClutterSetShapeModelClutter um Störparameter erweitert werden.

Eingabeparameter im Detail

NumLevels:

Die Anzahl der Pyramidenebenen wird mit NumLevelsNumLevelsNumLevelsNumLevelsnumLevels festgelegt. Sie sollte so groß wie möglich gewählt werden, da hierdurch das Auffinden des Modells erheblich beschleunigt wird. Bei der Wahl von NumLevelsNumLevelsNumLevelsNumLevelsnumLevels ist aber darauf zu achten, dass das Modell auf der obersten Pyramidenstufe noch erkennbar ist und genügend viele Punkte besitzt (mindestens vier). Dies kann anhand der Ausgabe von inspect_shape_modelinspect_shape_modelInspectShapeModelInspectShapeModelInspectShapeModel überprüft werden. 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_aniso_shape_modelcreate_aniso_shape_modelCreateAnisoShapeModelCreateAnisoShapeModelCreateAnisoShapeModel eine Fehlermeldung zurück.

Falls für NumLevelsNumLevelsNumLevelsNumLevelsnumLevels 'auto'"auto""auto""auto""auto" (oder 0 für Rückwärtskompatibilität) übergeben wird, wählt create_aniso_shape_modelcreate_aniso_shape_modelCreateAnisoShapeModelCreateAnisoShapeModelCreateAnisoShapeModel die Anzahl der Pyramidenstufen automatisch. Die automatisch gewählte Anzahl von Pyramidenstufen kann mit get_shape_model_paramsget_shape_model_paramsGetShapeModelParamsGetShapeModelParamsGetShapeModelParams abgefragt werden. In seltenen Fällen kann es vorkommen, dass create_aniso_shape_modelcreate_aniso_shape_modelCreateAnisoShapeModelCreateAnisoShapeModelCreateAnisoShapeModel 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 MinScoreMinScoreMinScoreMinScoreminScore oder GreedinessGreedinessGreedinessGreedinessgreediness in find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel 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_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel kommen. In diesen Fällen sollte die Anzahl der Pyramidenstufen mit Hilfe der Ausgabe von inspect_shape_modelinspect_shape_modelInspectShapeModelInspectShapeModelInspectShapeModel gewählt werden.

AngleStart, AngleExtent und AngleStep:

Die Parameter AngleStartAngleStartAngleStartAngleStartangleStart und AngleExtentAngleExtentAngleExtentAngleExtentangleExtent legen den Winkelbereich für die möglichen Rotationen des Modells im Bild fest. Das Modell kann also mit find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel nur in diesem Winkelbereich gefunden werden. Der Parameter AngleStepAngleStepAngleStepAngleStepangleStep gibt die Schrittweite der Winkel in dem gewählten Winkelbereich an. Falls bei find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel keine Subpixelgenauigkeit spezifiziert wird, gibt AngleStepAngleStepAngleStepAngleStepangleStep also die erreichbare Winkelgenauigkeit an. AngleStepAngleStepAngleStepAngleStepangleStep 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 AngleStepAngleStepAngleStepAngleStepangleStep für kleinere Modelle größer gewählt werden. Falls AngleExtentAngleExtentAngleExtentAngleExtentangleExtent kein ganzzahliges Vielfaches von AngleStepAngleStepAngleStepAngleStepangleStep ist, wird AngleStepAngleStepAngleStepAngleStepangleStep entsprechend angepasst. Um sicherzustellen, dass find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel 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 AngleStartAngleStartAngleStartAngleStartangleStart plus n mal AngleStepAngleStepAngleStepAngleStepangleStep genau Null ergibt, wird AngleStartAngleStartAngleStartAngleStartangleStart um höchstens AngleStepAngleStepAngleStepAngleStepangleStep verringert, und AngleExtentAngleExtentAngleExtentAngleExtentangleExtent wird um AngleStepAngleStepAngleStepAngleStepangleStep vergrößert.

ScaleRMin, ScaleRMax, ScaleCMin, ScaleCMax, ScaleRStep und ScaleCStep:

Die Parameter ScaleRMinScaleRMinScaleRMinScaleRMinscaleRMin, ScaleRMaxScaleRMaxScaleRMaxScaleRMaxscaleRMax, ScaleCMinScaleCMinScaleCMinScaleCMinscaleCMin und ScaleCMaxScaleCMaxScaleCMaxScaleCMaxscaleCMax legen den Bereich der möglichen anisotropen Skalierung des Modells in Zeilen- und Spaltenrichtung im Bild fest. Eine Skalierung von 1 in beiden Skalierungsfaktoren entspricht der Originalgröße des Modells. Die Parameter ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStep und ScaleCStepScaleCStepScaleCStepScaleCStepscaleCStep geben die Schrittweite der Skalierungen an. Falls bei find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel keine Subpixelgenauigkeit spezifiziert wird, geben ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStep und ScaleCStepScaleCStepScaleCStepScaleCStepscaleCStep also die erreichbare Genauigkeit der Skalierungen an. Wie AngleStepAngleStepAngleStepAngleStepangleStep sollten ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStep und ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStep aufgrund der Größe des Objektes gewählt werden. Falls der jeweilige Skalierungsbereich kein ganzzahliges Vielfaches von ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStep und ScaleCStepScaleCStepScaleCStepScaleCStepscaleCStep ist, werden ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStep und ScaleCStepScaleCStepScaleCStepScaleCStepscaleCStep entsprechend angepasst. Um sicherzustellen, dass find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel für Modellinstanzen ohne Skalierung Skalierungen von exakt 1.0 zurückgibt, wird der Bereich der möglichen Skalierungen folgendermaßen angepasst: Wenn keine positiven ganzzahligen Werte n und m existieren, für die ScaleRMinScaleRMinScaleRMinScaleRMinscaleRMin plus n mal ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStep sowie ScaleCMinScaleCMinScaleCMinScaleCMinscaleCMin plus m mal ScaleCStepScaleCStepScaleCStepScaleCStepscaleCStep genau 1.0 ergeben, werden ScaleRMinScaleRMinScaleRMinScaleRMinscaleRMin und ScaleCMinScaleCMinScaleCMinScaleCMinscaleCMin um höchstens ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStep bzw. ScaleCStepScaleCStepScaleCStepScaleCStepscaleCStep verringert, und ScaleRMaxScaleRMaxScaleRMaxScaleRMaxscaleRMax und ScaleCMaxScaleCMaxScaleCMaxScaleCMaxscaleCMax werden so erhöht, dass der jeweilige Skalierungsbereich um ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStep bzw. ScaleCStepScaleCStepScaleCStepScaleCStepscaleCStep vergrößert wird.

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.

Optimization:

Bei besonders großen Modellen kann es auch sinnvoll sein, die Anzahl der Modellpunkte durch Setzen des Parameters OptimizationOptimizationOptimizationOptimizationoptimization auf einen Wert ungleich 'none'"none""none""none""none" zu setzen. Falls OptimizationOptimizationOptimizationOptimizationoptimization = 'none'"none""none""none""none", werden alle Modellpunkte abgespeichert. Ansonsten wird die Anzahl der Punkte entsprechend dem Parameter OptimizationOptimizationOptimizationOptimizationoptimization reduziert. Falls die Anzahl der Punkte reduziert wird, kann es bei find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel notwendig werden, den Parameter Greediness 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 OptimizationOptimizationOptimizationOptimizationoptimization 'auto'"auto""auto""auto""auto" übergeben wird, wählt create_aniso_shape_modelcreate_aniso_shape_modelCreateAnisoShapeModelCreateAnisoShapeModelCreateAnisoShapeModel die Reduktion der Punkte automatisch.

Metric:

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

Falls MetricMetricMetricMetricmetric = '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 MetricMetricMetricMetricmetric = '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_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel erhöht sich in diesem Fall geringfügig.

Falls MetricMetricMetricMetricmetric = '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_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel aber wesentlich erhöht, ist es in solchen Fällen meist sinnvoller, mehrere Modelle mit create_aniso_shape_modelcreate_aniso_shape_modelCreateAnisoShapeModelCreateAnisoShapeModelCreateAnisoShapeModel zu erzeugen und mit find_aniso_shape_modelsfind_aniso_shape_modelsFindAnisoShapeModelsFindAnisoShapeModelsFindAnisoShapeModels 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 MetricMetricMetricMetricmetric = '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_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel erheblich erhöhen. Die Metrik '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". Es ist zu beachten, dass für MetricMetricMetricMetricmetric = 'ignore_color_polarity'"ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity" die Anzahl der Kanäle bei der Modellgenerierung mit create_aniso_shape_modelcreate_aniso_shape_modelCreateAnisoShapeModelCreateAnisoShapeModelCreateAnisoShapeModel und bei der Suche mit find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel verschieden sein können. Dies erlaubt z.B. die Modellgenerierung aus einem einkanaligen synthetisch generierten Bild. Es ist auch zu beachten, dass 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.

Contrast:

Der Parameter ContrastContrastContrastContrastcontrast legt fest, welchen Grauwertkontrast die Punkte des Modells besitzen müssen. Der Kontrast ist ein Maß für die lokalen Grauwertdifferenzen zwischen dem Objekt und dem Hintergrund und zwischen verschiedenen Teilen des Objektes. ContrastContrastContrastContrastcontrast sollte so gewählt werden, dass nur die signifikanten Merkmale des Musters für das Modell verwendet werden. ContrastContrastContrastContrastcontrast kann auch ein Tupel mit zwei Werten enthalten. In diesem Fall wird bei der Segmentierung des Modells ein Verfahren, das ähnlich zum Hysterese-Schwellwert-Verfahren in edges_imageedges_imageEdgesImageEdgesImageEdgesImage ist, eingesetzt. Dabei ist der erste Wert des Tupels der untere Schwellwert und der zweite Wert der obere Schwellwert. Für weitere Informationen über das Hysterese-Schwellwert-Verfahren siehe hysteresis_thresholdhysteresis_thresholdHysteresisThresholdHysteresisThresholdHysteresisThreshold. Optional kann in ContrastContrastContrastContrastcontrast auch ein dritter Wert als letztes Element des Tupels übergeben werden. Dieser Wert dient zur Selektion von signifikanten Komponenten des Modells basierend auf der Größe der Komponenten, d.h. Komponenten, deren Anzahl von Punkten kleiner ist als diese Mindestgröße, werden unterdrückt. Dieser Schwellwert wird pro Pyramidenstufe halbiert. Falls eine Unterdrückung von kleinen Modellkomponenten gewünscht ist, aber keine Hysterese-Schwellwert-Operation, müssen dennoch drei Werte in ContrastContrastContrastContrastcontrast übergeben werden, von denen die ersten zwei auf denselben Wert gesetzt werden. Die Wirkung von ContrastContrastContrastContrastcontrast kann auch vorab mit inspect_shape_modelinspect_shape_modelInspectShapeModelInspectShapeModelInspectShapeModel überprüft werden.

Wird ContrastContrastContrastContrastcontrast auf 'auto'"auto""auto""auto""auto" gesetzt, dann bestimmt create_aniso_shape_modelcreate_aniso_shape_modelCreateAnisoShapeModelCreateAnisoShapeModelCreateAnisoShapeModel die beschriebenen drei Werte automatisch. Es besteht die Möglichkeit, nur den Kontrast ('auto_contrast'"auto_contrast""auto_contrast""auto_contrast""auto_contrast"), die Hysterese-Schwellwerte ('auto_contrast_hyst'"auto_contrast_hyst""auto_contrast_hyst""auto_contrast_hyst""auto_contrast_hyst") oder die Mindestgröße ('auto_min_size'"auto_min_size""auto_min_size""auto_min_size""auto_min_size") automatisch bestimmen zu lassen. Die übrigen, nicht automatisch zu bestimmenden Größen, können dann zusätzlich als Tupel übergeben werden. Dabei sind auch Kombinationen zulässig: Wird z.B. ['auto_contrast','auto_min_size']["auto_contrast","auto_min_size"]["auto_contrast","auto_min_size"]["auto_contrast","auto_min_size"]["auto_contrast","auto_min_size"] übergeben, wird sowohl der Kontrast als auch die Mindestgröße bestimmt. Bei ['auto_min_size',20,30["auto_min_size",20,30["auto_min_size",20,30["auto_min_size",20,30["auto_min_size",20,30] wird die Mindestgröße automatisch ermittelt, während die Hysterese-Schwellen auf 20 und 30 gesetzt werden, etc. In bestimmten Fällen kann es vorkommen, dass die automatische Bestimmung der Kontrast-Schwellwerte nicht zum gewünschten Ergebnis führt. So ist eine manuelle Parameterwahl zu bevorzugen, wenn anwendungsbedingt bestimmte Modellkomponenten ausgeschlossen oder ins Modell integriert werden sollen oder wenn das Objekt mehrere unterschiedliche Kontraststufen umfasst. Daher ist es sinnvoll, die Kontrastwerte vor der Modellgenerierung mit determine_shape_model_paramsdetermine_shape_model_paramsDetermineShapeModelParamsDetermineShapeModelParamsDetermineShapeModelParams automatisch zu ermitteln und das Ergebnis mit inspect_shape_modelinspect_shape_modelInspectShapeModelInspectShapeModelInspectShapeModel zu überprüfen. Es ist zu beachten, dass MinContrastMinContrastMinContrastMinContrastminContrast die Bestimmung der Kontrast-Schwellwerte beeinflusst, und daher auch die Schätzung der Mindestgröße.

MinContrast:

Mit MinContrastMinContrastMinContrastMinContrastminContrast wird festgelegt, welchen Grauwertkontrast das Modell später bei der Erkennung mit find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel im Bild mindestens besitzen muss. Mit anderen Worten stellt dieser Parameter somit eine Abgrenzung des Musters 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 MinContrastMinContrastMinContrastMinContrastminContrast auf 10 gesetzt werden. Falls mehrkanalige Bilder für das Modell und für die Suchbilder verwendet werden, und falls der Parameter MetricMetricMetricMetricmetric auf '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 MinContrastMinContrastMinContrastMinContrastminContrast zu bestimmen. Falls die Grauwerte in einem Kanal z.B. in einem Bereich von 10 Graustufen schwanken, sollte MinContrastMinContrastMinContrastMinContrastminContrast bei einem dreikanaligen Bild auf 17 gesetzt werden. Offensichtlich muss MinContrastMinContrastMinContrastMinContrastminContrast kleiner als ContrastContrastContrastContrastcontrast sein. Falls das Modell später in sehr kontrastarmen Bildern erkannt werden soll, muss MinContrastMinContrastMinContrastMinContrastminContrast entsprechend klein gewählt werden. Falls das Modell mit erheblichen Verdeckungen erkannt werden soll, sollte MinContrastMinContrastMinContrastMinContrastminContrast 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.

Wird MinContrastMinContrastMinContrastMinContrastminContrast auf 'auto'"auto""auto""auto""auto" gesetzt, wählt create_aniso_shape_modelcreate_aniso_shape_modelCreateAnisoShapeModelCreateAnisoShapeModelCreateAnisoShapeModel den Mindestkontrast basierend auf dem Rauschen im Modellbild automatisch. Eine automatische Bestimmung ergibt demzufolge nur Sinn, wenn das bei der Erkennung zu erwartende Bildrauschen dem Rauschen im Modellbild entspricht. Außerdem kann es in manchen Fällen sinnvoll sein, den automatisch ermittelten Wert zu erhöhen, um eine höhere Robustheit gegenüber Verdeckungen zu erzielen (siehe oben). Der automatisch bestimmte Mindestkontrast kann mit get_shape_model_paramsget_shape_model_paramsGetShapeModelParamsGetShapeModelParamsGetShapeModelParams abgefragt werden.

Vollständige Vorabgenerierung des Modells

Optional kann in OptimizationOptimizationOptimizationOptimizationoptimization ein zweiter Wert übergeben werden. Dieser Wert legt fest, ob das Modell vollständig vorab generiert wird oder nicht. Der zweite Wert von OptimizationOptimizationOptimizationOptimizationoptimization ist hierzu auf 'pregeneration'"pregeneration""pregeneration""pregeneration""pregeneration" oder '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",...) eingestellte Modus verwendet. Mit der Standardeinstellung ('pregenerate_shape_models'"pregenerate_shape_models""pregenerate_shape_models""pregenerate_shape_models""pregenerate_shape_models" = '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_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel, 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_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel typischerweise leicht niedrigere Bewertungen (Scores) zurückgeliefert, so dass es unter Umständen notwendig sein kann, einen niedrigeren Wert für MinScoreMinScoreMinScoreMinScoreminScore 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 AngleStepAngleStepAngleStepAngleStepangleStep, ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStep oder ScaleCStepScaleCStepScaleCStepScaleCStepscaleCStep zu klein bzw. AngleExtentAngleExtentAngleExtentAngleExtentangleExtent 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 AngleStepAngleStepAngleStepAngleStepangleStep, ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStep oder ScaleCStepScaleCStepScaleCStepScaleCStepscaleCStep größer oder AngleExtentAngleExtentAngleExtentAngleExtentangleExtent 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_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel gegeben ist, kann bei Modellen mit einem Durchmesser von ca. 200 Pixeln AngleStepAngleStepAngleStepAngleStepangleStep >= 1° und ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStep, ScaleCStepScaleCStepScaleCStepScaleCStepscaleCStep >= 0.02 gewählt werden.

Falls AngleStepAngleStepAngleStepAngleStepangleStep = 0 oder ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStep, ScaleCStepScaleCStepScaleCStepScaleCStepscaleCStep = 'auto'"auto""auto""auto""auto" (oder jeweils 0 für Rückwärtskompatibilität) übergeben wird, wählt create_aniso_shape_modelcreate_aniso_shape_modelCreateAnisoShapeModelCreateAnisoShapeModelCreateAnisoShapeModel 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_paramsGetShapeModelParamsGetShapeModelParamsGetShapeModelParams 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_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel 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.

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

TemplateTemplateTemplateTemplatetemplate (input_object)  (multichannel-)image objectHImageHImageHobject (byte / uint2)

Eingabebild, dessen Definitionsbereich zum Aufbau des Modells verwendet wird.

NumLevelsNumLevelsNumLevelsNumLevelsnumLevels (input_control)  integer HTupleHTupleHtuple (integer / string) (int / long / string) (Hlong / HString) (Hlong / char*)

Maximale Anzahl von Pyramidenebenen.

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

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

AngleStartAngleStartAngleStartAngleStartangleStart (input_control)  angle.rad HTupleHTupleHtuple (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

AngleExtentAngleExtentAngleExtentAngleExtentangleExtent (input_control)  angle.rad HTupleHTupleHtuple (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

AngleStepAngleStepAngleStepAngleStepangleStep (input_control)  angle.rad HTupleHTupleHtuple (real / string) (double / string) (double / HString) (double / char*)

Schrittweite der Winkel (Auflösung).

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

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

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

ScaleRMinScaleRMinScaleRMinScaleRMinscaleRMin (input_control)  number HTupleHTupleHtuple (real) (double) (double) (double)

Kleinste auftretende Skalierung des Musters in Zeilenrichtung.

Defaultwert: 0.9

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

Restriktion: ScaleRMin > 0

ScaleRMaxScaleRMaxScaleRMaxScaleRMaxscaleRMax (input_control)  number HTupleHTupleHtuple (real) (double) (double) (double)

Größte auftretende Skalierung des Musters in Zeilenrichtung.

Defaultwert: 1.1

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

Restriktion: ScaleRMax >= ScaleRMin

ScaleRStepScaleRStepScaleRStepScaleRStepscaleRStep (input_control)  number HTupleHTupleHtuple (real / string) (double / string) (double / HString) (double / char*)

Schrittweite der Skalierung (Auflösung) in Zeilenrichtung.

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

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

Restriktion: ScaleRStep >= 0

ScaleCMinScaleCMinScaleCMinScaleCMinscaleCMin (input_control)  number HTupleHTupleHtuple (real) (double) (double) (double)

Kleinste auftretende Skalierung des Musters in Spaltenrichtung.

Defaultwert: 0.9

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

Restriktion: ScaleCMin > 0

ScaleCMaxScaleCMaxScaleCMaxScaleCMaxscaleCMax (input_control)  number HTupleHTupleHtuple (real) (double) (double) (double)

Größte auftretende Skalierung des Musters in Spaltenrichtung.

Defaultwert: 1.1

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

Restriktion: ScaleCMax >= ScaleCMin

ScaleCStepScaleCStepScaleCStepScaleCStepscaleCStep (input_control)  number HTupleHTupleHtuple (real / string) (double / string) (double / HString) (double / char*)

Schrittweite der Skalierung (Auflösung) in Spaltenrichtung.

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

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

Restriktion: ScaleCStep >= 0

OptimizationOptimizationOptimizationOptimizationoptimization (input_control)  string(-array) HTupleHTupleHtuple (string) (string) (HString) (char*)

Art der Optimierung und optional Methode der Modellgenerierung.

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

Werteliste: 'auto'"auto""auto""auto""auto", 'no_pregeneration'"no_pregeneration""no_pregeneration""no_pregeneration""no_pregeneration", 'none'"none""none""none""none", '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_medium'"point_reduction_medium""point_reduction_medium""point_reduction_medium""point_reduction_medium", 'pregeneration'"pregeneration""pregeneration""pregeneration""pregeneration"

MetricMetricMetricMetricmetric (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Art der zum Matchen verwendeten Metrik.

Defaultwert: 'use_polarity' "use_polarity" "use_polarity" "use_polarity" "use_polarity"

Werteliste: '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_local_polarity'"ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity", 'use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity"

ContrastContrastContrastContrastcontrast (input_control)  number(-array) HTupleHTupleHtuple (integer / string) (int / long / string) (Hlong / HString) (Hlong / char*)

Schwellwert bzw. Hystereseschwellwerte für den Kontrast des Objektes im Musterbild und optional Mindestgröße der Objektteile.

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

Wertevorschläge: 'auto'"auto""auto""auto""auto", 'auto_contrast'"auto_contrast""auto_contrast""auto_contrast""auto_contrast", 'auto_contrast_hyst'"auto_contrast_hyst""auto_contrast_hyst""auto_contrast_hyst""auto_contrast_hyst", 'auto_min_size'"auto_min_size""auto_min_size""auto_min_size""auto_min_size", 10, 20, 30, 40, 60, 80, 100, 120, 140, 160

MinContrastMinContrastMinContrastMinContrastminContrast (input_control)  number HTupleHTupleHtuple (integer / string) (int / long / string) (Hlong / HString) (Hlong / char*)

Minimaler Kontrast des Objektes in den Suchbildern.

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

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

Restriktion: MinContrast < Contrast

ModelIDModelIDModelIDModelIDmodelID (output_control)  shape_model HShapeModel, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des Modells.

Ergebnis

Sind die Parameterwerte korrekt, dann liefert create_aniso_shape_modelcreate_aniso_shape_modelCreateAnisoShapeModelCreateAnisoShapeModelCreateAnisoShapeModel den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt. Wenn die Parameter NumLevelsNumLevelsNumLevelsNumLevelsnumLevels und ContrastContrastContrastContrastcontrast so gewählt worden sind, dass das Modell zu wenige Punkte besitzt, wird die Fehlermeldung 8510 zurückgeliefert.

Vorgänger

draw_regiondraw_regionDrawRegionDrawRegionDrawRegion, reduce_domainreduce_domainReduceDomainReduceDomainReduceDomain, thresholdthresholdThresholdThresholdThreshold

Nachfolger

find_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModelFindAnisoShapeModel, find_aniso_shape_modelsfind_aniso_shape_modelsFindAnisoShapeModelsFindAnisoShapeModelsFindAnisoShapeModels, get_shape_model_paramsget_shape_model_paramsGetShapeModelParamsGetShapeModelParamsGetShapeModelParams, clear_shape_modelclear_shape_modelClearShapeModelClearShapeModelClearShapeModel, write_shape_modelwrite_shape_modelWriteShapeModelWriteShapeModelWriteShapeModel, set_shape_model_originset_shape_model_originSetShapeModelOriginSetShapeModelOriginSetShapeModelOrigin, set_shape_model_clutterset_shape_model_clutterSetShapeModelClutterSetShapeModelClutterSetShapeModelClutter

Alternativen

create_shape_modelcreate_shape_modelCreateShapeModelCreateShapeModelCreateShapeModel, create_scaled_shape_modelcreate_scaled_shape_modelCreateScaledShapeModelCreateScaledShapeModelCreateScaledShapeModel

Siehe auch

set_systemset_systemSetSystemSetSystemSetSystem, get_systemget_systemGetSystemGetSystemGetSystem

Modul

Matching