create_ncc_modelT_create_ncc_modelCreateNccModelCreateNccModelcreate_ncc_model (Operator)
Name
create_ncc_modelT_create_ncc_modelCreateNccModelCreateNccModelcreate_ncc_model — Vorbereiten eines NCC-Modells für das Matching.
Signatur
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::HNCCModel(const HImage& Template, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, const wchar_t* Metric)
(Nur Windows)
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)
void HNCCModel::CreateNccModel(const HImage& Template, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, const wchar_t* Metric)
(Nur Windows)
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
HNCCModel HImage::CreateNccModel(Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, const wchar_t* Metric) const
(Nur Windows)
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_modelCreateNccModelCreateNccModelCreateNccModelcreate_ncc_model 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 ModelIDModelIDModelIDModelIDmodelIDmodel_id ist ein Handle für dieses Modell,
der in nachfolgenden Aufrufen von find_ncc_modelfind_ncc_modelFindNccModelFindNccModelFindNccModelfind_ncc_model verwendet
wird.
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 acht). Dies kann anhand
des Definitionsbereiches der Bilder in der Ausgabe von
gen_gauss_pyramidgen_gauss_pyramidGenGaussPyramidGenGaussPyramidGenGaussPyramidgen_gauss_pyramid ü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_modelCreateNccModelCreateNccModelCreateNccModelcreate_ncc_model eine Fehlermeldung
zurück. Falls für NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels 'auto'"auto""auto""auto""auto""auto" oder
0 übergeben wird, wählt create_ncc_modelcreate_ncc_modelCreateNccModelCreateNccModelCreateNccModelcreate_ncc_model die Anzahl
der Pyramidenstufen automatisch. Die automatisch gewählte Anzahl von
Pyramidenstufen kann mit get_ncc_model_paramsget_ncc_model_paramsGetNccModelParamsGetNccModelParamsGetNccModelParamsget_ncc_model_params abgefragt
werden. In seltenen Fällen kann es vorkommen, dass
create_ncc_modelcreate_ncc_modelCreateNccModelCreateNccModelCreateNccModelcreate_ncc_model 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_modelFindNccModelFindNccModelFindNccModelfind_ncc_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_ncc_modelfind_ncc_modelFindNccModelFindNccModelFindNccModelfind_ncc_model kommen. In diesen Fällen sollte die Anzahl
der Pyramidenstufen durch Inspektion der Ausgabebilder von
gen_gauss_pyramidgen_gauss_pyramidGenGaussPyramidGenGaussPyramidGenGaussPyramidgen_gauss_pyramid gewählt werden. Dabei sollte
Mode = 'constant'"constant""constant""constant""constant""constant" und Scale =
0.5 verwendet werden.
Die Parameter AngleStartAngleStartAngleStartAngleStartangleStartangle_start und AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent legen den
Winkelbereich für die möglichen Rotationen des Modells im Bild fest.
Das Modell kann also mit find_ncc_modelfind_ncc_modelFindNccModelFindNccModelFindNccModelfind_ncc_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_ncc_modelfind_ncc_modelFindNccModelFindNccModelFindNccModelfind_ncc_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 eine Abtastung des Winkelbereiches der möglichen Rotationen zu
erreichen, die unabhängig von AngleStartAngleStartAngleStartAngleStartangleStartangle_start ist, 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.
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 AngleStepAngleStepAngleStepAngleStepangleStepangle_step zu klein
bzw. AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent zu groß gewählt wird, kann es vorkommen,
dass das Modell nicht mehr in den (virtuellen) Speicher passt. In
diesem Fall muss entweder AngleStepAngleStepAngleStepAngleStepangleStepangle_step größer oder
AngleExtentAngleExtentAngleExtentAngleExtentangleExtentangle_extent 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_modelFindNccModelFindNccModelFindNccModelfind_ncc_model gegeben ist, kann bei
Modellen mit einem Durchmesser von ca. 200 Pixeln
AngleStepAngleStepAngleStepAngleStepangleStepangle_step >= 1 gewählt
werden. Falls AngleStepAngleStepAngleStepAngleStepangleStepangle_step = 'auto'"auto""auto""auto""auto""auto" oder
0 übergeben wird, wählt create_ncc_modelcreate_ncc_modelCreateNccModelCreateNccModelCreateNccModelcreate_ncc_model
automatisch eine Schrittweite basierend auf der Größe des Modells
aus. Die automatisch gewählte Schrittweite kann mit
get_ncc_model_paramsget_ncc_model_paramsGetNccModelParamsGetNccModelParamsGetNccModelParamsget_ncc_model_params 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_modelFindNccModelFindNccModelFindNccModelfind_ncc_model 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_originSetNccModelOriginSetNccModelOriginSetNccModelOriginset_ncc_model_origin gesetzt werden.
Ausführungsinformationen
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
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 → objectHImageHObjectHImageHobject (byte / uint2)
Eingabebild, dessen Definitionsbereich zum
Aufbau des Modells verwendet wird.
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: 0, 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.0, 0.0175, 0.0349, 0.0524, 0.0698, 0.0873
Restriktion: AngleStep >= 0 && AngleStep <= pi / 16
MetricMetricMetricMetricmetricmetric (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (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"
ModelIDModelIDModelIDModelIDmodelIDmodel_id (output_control) ncc_model → HNCCModel, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)
Handle des Modells.
Ergebnis
Sind die Parameterwerte korrekt, dann liefert
create_ncc_modelcreate_ncc_modelCreateNccModelCreateNccModelCreateNccModelcreate_ncc_model den Wert TRUE. Wenn der Parameter
NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels so gewählt wurde, dass das Modell zu wenige
Punkte besitzt, wird die Fehlermeldung 8506 zurückgeliefert.
Vorgänger
draw_regiondraw_regionDrawRegionDrawRegionDrawRegiondraw_region,
reduce_domainreduce_domainReduceDomainReduceDomainReduceDomainreduce_domain,
thresholdthresholdThresholdThresholdThresholdthreshold
Nachfolger
find_ncc_modelfind_ncc_modelFindNccModelFindNccModelFindNccModelfind_ncc_model,
get_ncc_model_paramsget_ncc_model_paramsGetNccModelParamsGetNccModelParamsGetNccModelParamsget_ncc_model_params,
clear_ncc_modelclear_ncc_modelClearNccModelClearNccModelClearNccModelclear_ncc_model,
write_ncc_modelwrite_ncc_modelWriteNccModelWriteNccModelWriteNccModelwrite_ncc_model,
set_ncc_model_originset_ncc_model_originSetNccModelOriginSetNccModelOriginSetNccModelOriginset_ncc_model_origin,
set_ncc_model_paramset_ncc_model_paramSetNccModelParamSetNccModelParamSetNccModelParamset_ncc_model_param,
find_ncc_modelsfind_ncc_modelsFindNccModelsFindNccModelsFindNccModelsfind_ncc_models
Alternativen
create_shape_modelcreate_shape_modelCreateShapeModelCreateShapeModelCreateShapeModelcreate_shape_model,
create_scaled_shape_modelcreate_scaled_shape_modelCreateScaledShapeModelCreateScaledShapeModelCreateScaledShapeModelcreate_scaled_shape_model,
create_aniso_shape_modelcreate_aniso_shape_modelCreateAnisoShapeModelCreateAnisoShapeModelCreateAnisoShapeModelcreate_aniso_shape_model
Modul
Matching