KlassenKlassenKlassenKlassen | | | | Operatoren

create_ncc_modelcreate_ncc_modelCreateNccModelcreate_ncc_modelCreateNccModelCreateNccModel (Operator)

Name

create_ncc_modelcreate_ncc_modelCreateNccModelcreate_ncc_modelCreateNccModelCreateNccModel — Vorbereiten eines NCC-Modells für das Matching.

Signatur

create_ncc_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Metric : ModelID)

Herror create_ncc_model(const Hobject Template, const Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, const char* Metric, Hlong* ModelID)

Herror T_create_ncc_model(const Hobject Template, const Htuple NumLevels, const Htuple AngleStart, const Htuple AngleExtent, const Htuple AngleStep, const Htuple Metric, Htuple* ModelID)

Herror create_ncc_model(Hobject Template, const HTuple& NumLevels, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& AngleStep, const HTuple& Metric, Hlong* ModelID)

HNCCModel HImage::CreateNccModel(const HTuple& NumLevels, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& AngleStep, const HTuple& Metric) const

void HNCCModel::CreateNccModel(const HImage& Template, const HTuple& NumLevels, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& AngleStep, const HTuple& Metric)

void CreateNccModel(const HObject& Template, const HTuple& NumLevels, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& AngleStep, const HTuple& Metric, HTuple* ModelID)

void HNCCModel::HNCCModel(const HImage& Template, const HTuple& NumLevels, double AngleStart, double AngleExtent, const HTuple& AngleStep, const HString& Metric)

void HNCCModel::HNCCModel(const HImage& Template, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, const HString& Metric)

void HNCCModel::HNCCModel(const HImage& Template, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, const char* Metric)

void HNCCModel::CreateNccModel(const HImage& Template, const HTuple& NumLevels, double AngleStart, double AngleExtent, const HTuple& AngleStep, const HString& Metric)

void HNCCModel::CreateNccModel(const HImage& Template, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, const HString& Metric)

void HNCCModel::CreateNccModel(const HImage& Template, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, const char* Metric)

HNCCModel HImage::CreateNccModel(const HTuple& NumLevels, double AngleStart, double AngleExtent, const HTuple& AngleStep, const HString& Metric) const

HNCCModel HImage::CreateNccModel(Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, const HString& Metric) const

HNCCModel HImage::CreateNccModel(Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, const char* Metric) const

void HOperatorSetX.CreateNccModel(
[in] IHUntypedObjectX* Template, [in] VARIANT NumLevels, [in] VARIANT AngleStart, [in] VARIANT AngleExtent, [in] VARIANT AngleStep, [in] VARIANT Metric, [out] VARIANT* ModelID)

void HNCCModelX.CreateNccModel(
[in] IHImageX* Template, [in] VARIANT NumLevels, [in] double AngleStart, [in] double AngleExtent, [in] VARIANT AngleStep, [in] BSTR Metric)

IHNCCModelX* HImageX.CreateNccModel(
[in] VARIANT NumLevels, [in] double AngleStart, [in] double AngleExtent, [in] VARIANT AngleStep, [in] BSTR Metric)

static void HOperatorSet.CreateNccModel(HObject template, HTuple numLevels, HTuple angleStart, HTuple angleExtent, HTuple angleStep, HTuple metric, out HTuple modelID)

public HNCCModel(HImage template, HTuple numLevels, double angleStart, double angleExtent, HTuple angleStep, string metric)

public HNCCModel(HImage template, int numLevels, double angleStart, double angleExtent, double angleStep, string metric)

void HNCCModel.CreateNccModel(HImage template, HTuple numLevels, double angleStart, double angleExtent, HTuple angleStep, string metric)

void HNCCModel.CreateNccModel(HImage template, int numLevels, double angleStart, double angleExtent, double angleStep, string metric)

HNCCModel HImage.CreateNccModel(HTuple numLevels, double angleStart, double angleExtent, HTuple angleStep, string metric)

HNCCModel HImage.CreateNccModel(int numLevels, double angleStart, double angleExtent, double angleStep, string metric)

Beschreibung

create_ncc_modelcreate_ncc_modelCreateNccModelcreate_ncc_modelCreateNccModelCreateNccModel bereitet ein Muster, das als Bild TemplateTemplateTemplateTemplateTemplatetemplate übergeben wird, als NCC-Modell für das Matching mittels normalisierter Kreuzkorrelation (normalized cross correlation, NCC) vor. Die ROI des Modells wird als der Definitionsbereich von TemplateTemplateTemplateTemplateTemplatetemplate übergeben.

Das Modell wird auf mehreren Pyramidenebenen in mehreren Rotationen auf jeder Ebene generiert und im Speicher abgelegt. Der Ausgabeparameter ModelIDModelIDModelIDModelIDModelIDmodelID ist ein Handle für dieses Modell, der in nachfolgenden Aufrufen von find_ncc_modelfind_ncc_modelFindNccModelfind_ncc_modelFindNccModelFindNccModel verwendet wird.

Die Anzahl der Pyramidenebenen wird mit NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels festgelegt. Sie sollte so groß wie möglich gewählt werden, da hierdurch das Auffinden des Modells erheblich beschleunigt wird. Bei der Wahl von NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels ist aber darauf zu achten, dass das Modell auf der obersten Pyramidenstufe noch erkennbar ist und genügend viele Punkte besitzt (mindestens acht). Dies kann anhand des Definitionsbereiches der Bilder in der Ausgabe von gen_gauss_pyramidgen_gauss_pyramidGenGaussPyramidgen_gauss_pyramidGenGaussPyramidGenGaussPyramid ü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_ncc_modelcreate_ncc_modelCreateNccModelcreate_ncc_modelCreateNccModelCreateNccModel eine Fehlermeldung zurück. Falls für NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels 'auto'"auto""auto""auto""auto""auto" oder 0 übergeben wird, wählt create_ncc_modelcreate_ncc_modelCreateNccModelcreate_ncc_modelCreateNccModelCreateNccModel die Anzahl der Pyramidenstufen automatisch. Die automatisch gewählte Anzahl von Pyramidenstufen kann mit get_ncc_model_paramsget_ncc_model_paramsGetNccModelParamsget_ncc_model_paramsGetNccModelParamsGetNccModelParams abgefragt werden. In seltenen Fällen kann es vorkommen, dass create_ncc_modelcreate_ncc_modelCreateNccModelcreate_ncc_modelCreateNccModelCreateNccModel 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 MinScore in find_ncc_modelfind_ncc_modelFindNccModelfind_ncc_modelFindNccModelFindNccModel 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_ncc_modelfind_ncc_modelFindNccModelfind_ncc_modelFindNccModelFindNccModel kommen. In diesen Fällen sollte die Anzahl der Pyramidenstufen durch Inspektion der Ausgabebilder von gen_gauss_pyramidgen_gauss_pyramidGenGaussPyramidgen_gauss_pyramidGenGaussPyramidGenGaussPyramid gewählt werden. Dabei sollte Mode = 'constant'"constant""constant""constant""constant""constant" und Scale = 0.5 verwendet werden.

Die Parameter AngleStartAngleStartAngleStartAngleStartAngleStartangleStart und AngleExtentAngleExtentAngleExtentAngleExtentAngleExtentangleExtent legen den Winkelbereich für die möglichen Rotationen des Modells im Bild fest. Das Modell kann also mit find_ncc_modelfind_ncc_modelFindNccModelfind_ncc_modelFindNccModelFindNccModel nur in diesem Winkelbereich gefunden werden. Der Parameter AngleStepAngleStepAngleStepAngleStepAngleStepangleStep gibt die Schrittweite der Winkel in dem gewählten Winkelbereich an. Falls bei find_ncc_modelfind_ncc_modelFindNccModelfind_ncc_modelFindNccModelFindNccModel keine Subpixelgenauigkeit spezifiziert wird, gibt AngleStepAngleStepAngleStepAngleStepAngleStepangleStep also die erreichbare Winkelgenauigkeit an. AngleStepAngleStepAngleStepAngleStepAngleStepangleStep 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 AngleStepAngleStepAngleStepAngleStepAngleStepangleStep für kleinere Modelle größer gewählt werden. Falls AngleExtentAngleExtentAngleExtentAngleExtentAngleExtentangleExtent kein ganzzahliges Vielfaches von AngleStepAngleStepAngleStepAngleStepAngleStepangleStep ist, wird AngleStepAngleStepAngleStepAngleStepAngleStepangleStep entsprechend angepasst. Um eine Abtastung des Winkelbereiches der möglichen Rotationen zu erreichen, die unabhängig von AngleStartAngleStartAngleStartAngleStartAngleStartangleStart ist, wird der Winkelbereich der möglichen Rotationen folgendermaßen angepasst: Wenn kein positiver ganzzahliger Wert n existiert, für den AngleStartAngleStartAngleStartAngleStartAngleStartangleStart plus n mal AngleStepAngleStepAngleStepAngleStepAngleStepangleStep genau Null ergibt, wird AngleStartAngleStartAngleStartAngleStartAngleStartangleStart um höchstens AngleStepAngleStepAngleStepAngleStepAngleStepangleStep verringert, und AngleExtentAngleExtentAngleExtentAngleExtentAngleExtentangleExtent wird um AngleStepAngleStepAngleStepAngleStepAngleStepangleStep vergrößert.

Das Modell wird in dem gewählten Winkelbereich vorab generiert und im Speicher abgelegt. Der Speicherbedarf zur Speicherung des Modells ist also proportional zur Anzahl der Winkelschritte und zur Anzahl der Punkte im Modell. Wenn also AngleStepAngleStepAngleStepAngleStepAngleStepangleStep zu klein bzw. AngleExtentAngleExtentAngleExtentAngleExtentAngleExtentangleExtent zu groß gewählt wird, kann es vorkommen, dass das Modell nicht mehr in den (virtuellen) Speicher passt. In diesem Fall muss entweder AngleStepAngleStepAngleStepAngleStepAngleStepangleStep größer oder AngleExtentAngleExtentAngleExtentAngleExtentAngleExtentangleExtent 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_ncc_modelfind_ncc_modelFindNccModelfind_ncc_modelFindNccModelFindNccModel gegeben ist, kann bei Modellen mit einem Durchmesser von ca. 200 Pixeln AngleStepAngleStepAngleStepAngleStepAngleStepangleStep >= 1 gewählt werden. Falls AngleStepAngleStepAngleStepAngleStepAngleStepangleStep = 'auto'"auto""auto""auto""auto""auto" oder 0 übergeben wird, wählt create_ncc_modelcreate_ncc_modelCreateNccModelcreate_ncc_modelCreateNccModelCreateNccModel automatisch eine Schrittweite basierend auf der Größe des Modells aus. Die automatisch gewählte Schrittweite kann mit get_ncc_model_paramsget_ncc_model_paramsGetNccModelParamsget_ncc_model_paramsGetNccModelParamsGetNccModelParams abgefragt werden.

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_ncc_modelfind_ncc_modelFindNccModelfind_ncc_modelFindNccModelFindNccModel erhöht sich in diesem Fall geringfügig.

Als Ursprung (Referenzpunkt) des Modells wird der Schwerpunkt der Region des Modellbildes TemplateTemplateTemplateTemplateTemplatetemplate verwendet. Falls ein anderer Ursprung gewünscht wird, kann dieser mit set_ncc_model_originset_ncc_model_originSetNccModelOriginset_ncc_model_originSetNccModelOriginSetNccModelOrigin gesetzt werden.

Parallelisierung

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

TemplateTemplateTemplateTemplateTemplatetemplate (input_object)  singlechannelimage objectHImageHImageHImageHImageXHobject (byte / uint2)

Eingabebild, dessen Definitionsbereich zum Aufbau des Modells verwendet wird.

NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels (input_control)  integer HTupleHTupleHTupleVARIANTHtuple (integer / string) (int / long / string) (Hlong / HString) (Hlong / char*) (Hlong / BSTR) (Hlong / char*)

Maximale Anzahl von Pyramidenebenen.

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

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

AngleStartAngleStartAngleStartAngleStartAngleStartangleStart (input_control)  angle.rad HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (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

AngleExtentAngleExtentAngleExtentAngleExtentAngleExtentangleExtent (input_control)  angle.rad HTupleHTupleHTupleVARIANTHtuple (real) (double) (double) (double) (double) (double)

Ausdehnung des Winkelbereichs.

Defaultwert: 0.79

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

Restriktion: AngleExtent >= 0

AngleStepAngleStepAngleStepAngleStepAngleStepangleStep (input_control)  angle.rad HTupleHTupleHTupleVARIANTHtuple (real / string) (double / string) (double / HString) (double / char*) (double / BSTR) (double / char*)

Schrittweite der Winkel (Auflösung).

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

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

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

MetricMetricMetricMetricMetricmetric (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Art der zum Matchen verwendeten Metrik.

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

Werteliste: 'ignore_global_polarity'"ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity", 'use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity""use_polarity"

ModelIDModelIDModelIDModelIDModelIDmodelID (output_control)  ncc_model HNCCModel, HTupleHTupleHNCCModel, HTupleHNCCModelX, VARIANTHtuple (integer) (IntPtr) (Hlong) (Hlong) (Hlong) (Hlong)

Handle des Modells.

Ergebnis

Sind die Parameterwerte korrekt, dann liefert create_ncc_modelcreate_ncc_modelCreateNccModelcreate_ncc_modelCreateNccModelCreateNccModel den Wert 2 (H_MSG_TRUE). Wenn der Parameter NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels so gewählt wurde, dass das Modell zu wenige Punkte besitzt, wird die Fehlermeldung 8506 zurückgeliefert.

Vorgänger

draw_regiondraw_regionDrawRegiondraw_regionDrawRegionDrawRegion, reduce_domainreduce_domainReduceDomainreduce_domainReduceDomainReduceDomain, thresholdthresholdThresholdthresholdThresholdThreshold

Nachfolger

find_ncc_modelfind_ncc_modelFindNccModelfind_ncc_modelFindNccModelFindNccModel, get_ncc_model_paramsget_ncc_model_paramsGetNccModelParamsget_ncc_model_paramsGetNccModelParamsGetNccModelParams, clear_ncc_modelclear_ncc_modelClearNccModelclear_ncc_modelClearNccModelClearNccModel, write_ncc_modelwrite_ncc_modelWriteNccModelwrite_ncc_modelWriteNccModelWriteNccModel, set_ncc_model_originset_ncc_model_originSetNccModelOriginset_ncc_model_originSetNccModelOriginSetNccModelOrigin, set_ncc_model_paramset_ncc_model_paramSetNccModelParamset_ncc_model_paramSetNccModelParamSetNccModelParam

Alternativen

create_shape_modelcreate_shape_modelCreateShapeModelcreate_shape_modelCreateShapeModelCreateShapeModel, create_scaled_shape_modelcreate_scaled_shape_modelCreateScaledShapeModelcreate_scaled_shape_modelCreateScaledShapeModelCreateScaledShapeModel, create_aniso_shape_modelcreate_aniso_shape_modelCreateAnisoShapeModelcreate_aniso_shape_modelCreateAnisoShapeModelCreateAnisoShapeModel, create_template_rotcreate_template_rotCreateTemplateRotcreate_template_rotCreateTemplateRotCreateTemplateRot

Modul

Matching


KlassenKlassenKlassenKlassen | | | | Operatoren