gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsgen_initial_components (Operator)

Name

gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsgen_initial_components — Erzeugung der initialen Komponenten eines Komponentenmodells.

Signatur

gen_initial_components(ModelImage : InitialComponents : ContrastLow, ContrastHigh, MinSize, Mode, GenericName, GenericValue : )

Herror gen_initial_components(const Hobject ModelImage, Hobject* InitialComponents, const Hlong ContrastLow, const Hlong ContrastHigh, const Hlong MinSize, const char* Mode, const char* GenericName, double GenericValue)

Herror T_gen_initial_components(const Hobject ModelImage, Hobject* InitialComponents, const Htuple ContrastLow, const Htuple ContrastHigh, const Htuple MinSize, const Htuple Mode, const Htuple GenericName, const Htuple GenericValue)

void GenInitialComponents(const HObject& ModelImage, HObject* InitialComponents, const HTuple& ContrastLow, const HTuple& ContrastHigh, const HTuple& MinSize, const HTuple& Mode, const HTuple& GenericName, const HTuple& GenericValue)

HRegion HImage::GenInitialComponents(const HTuple& ContrastLow, const HTuple& ContrastHigh, const HTuple& MinSize, const HString& Mode, const HTuple& GenericName, const HTuple& GenericValue) const

HRegion HImage::GenInitialComponents(Hlong ContrastLow, Hlong ContrastHigh, Hlong MinSize, const HString& Mode, const HString& GenericName, double GenericValue) const

HRegion HImage::GenInitialComponents(Hlong ContrastLow, Hlong ContrastHigh, Hlong MinSize, const char* Mode, const char* GenericName, double GenericValue) const

HRegion HImage::GenInitialComponents(Hlong ContrastLow, Hlong ContrastHigh, Hlong MinSize, const wchar_t* Mode, const wchar_t* GenericName, double GenericValue) const   (Nur Windows)

static void HOperatorSet.GenInitialComponents(HObject modelImage, out HObject initialComponents, HTuple contrastLow, HTuple contrastHigh, HTuple minSize, HTuple mode, HTuple genericName, HTuple genericValue)

HRegion HImage.GenInitialComponents(HTuple contrastLow, HTuple contrastHigh, HTuple minSize, string mode, HTuple genericName, HTuple genericValue)

HRegion HImage.GenInitialComponents(int contrastLow, int contrastHigh, int minSize, string mode, string genericName, double genericValue)

def gen_initial_components(model_image: HObject, contrast_low: MaybeSequence[Union[int, str]], contrast_high: MaybeSequence[Union[int, str]], min_size: MaybeSequence[Union[int, str]], mode: str, generic_name: MaybeSequence[str], generic_value: MaybeSequence[Union[int, float]]) -> HObject

Beschreibung

Im Allgemeinen bestehen zwei Möglichkeiten, gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponentsgen_initial_components zu verwenden. Die erste Möglichkeit sollte gewählt werden, wenn die initialen Komponenten eines Komponentenmodells nicht bekannt sind. Dann erzeugt gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponentsgen_initial_components die initialen Komponenten automatisch aus einem Modellbild. Die zweite Möglichkeit kann gewählt werden, um geeignete Werte für die Merkmalsextraktionsparameter von train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponentstrain_model_components und create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModelcreate_component_model zu finden. Somit ist die zweite Möglichkeit vergleichbar mit der Funktion von inspect_shape_modelinspect_shape_modelInspectShapeModelInspectShapeModelInspectShapeModelinspect_shape_model innerhalb des formbasierten Matchings.

Wenn die erste Möglichkeit verwendet wird, erzeugt gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponentsgen_initial_components die initialen Komponenten eines Komponentenmodells aus einem Modellbild ModelImageModelImageModelImageModelImagemodelImagemodel_image. Wie bereits erwähnt, ist dies besonders dann hilfreich, wenn die initialen Komponenten eines Komponentenmodells nicht bekannt sind. In diesem Fall können die zurückgelieferten initialen Komponenten dazu genutzt werden, das Komponentenmodell automatisch mit train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponentstrain_model_components zu trainieren, was die Extraktion der (endgültigen) Modellkomponenten und deren Relationen umfasst. gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponentsgen_initial_components liefert die initialen Komponenten in einem Regionenobjekttupel InitialComponentsInitialComponentsInitialComponentsInitialComponentsinitialComponentsinitial_components zurück, das für jede initiale Komponente deren Konturregion enthält.

Zur automatischen Bestimmung der initialen Komponenten muss der Definitionsbereich des Modellbildes ModelImageModelImageModelImageModelImagemodelImagemodel_image das gesamte zusammengesetzte Objekt inklusive aller Komponenten beinhalten. Mit ModeModeModeModemodemode kann die Art der automatischen Berechnung gewählt werden. Zur Zeit ist nur der Modus 'connection'"connection""connection""connection""connection""connection" verfügbar. In diesem Modus erfolgt die automatische Berechnung in zwei Schritten: Im ersten Schritt werden Merkmale extrahiert unter Verwendung der Parameter ContrastLowContrastLowContrastLowContrastLowcontrastLowcontrast_low, ContrastHighContrastHighContrastHighContrastHighcontrastHighcontrast_high und MinSizeMinSizeMinSizeMinSizeminSizemin_size. Diese Parameter legen fest, aus welchen Konturen die initialen Komponenten aufgebaut werden sollen, und sollten so gewählt werden, dass die initialen Komponenten nur die signifikanten Merkmale des Modellbildes enthalten. ContrastLowContrastLowContrastLowContrastLowcontrastLowcontrast_low und ContrastHighContrastHighContrastHighContrastHighcontrastHighcontrast_high legen den Grauwertkontrast fest, den die Punkte der initialen Komponenten 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. Dabei wird bei der Segmentierung des Modellbildes ein Verfahren, das ähnlich zum Hysterese-Schwellenwert-Verfahren in edges_imageedges_imageEdgesImageEdgesImageEdgesImageedges_image ist, eingesetzt. Dabei ist ContrastLowContrastLowContrastLowContrastLowcontrastLowcontrast_low der untere Schwellenwert und ContrastHighContrastHighContrastHighContrastHighcontrastHighcontrast_high der obere Schwellenwert. Wird für ContrastLowContrastLowContrastLowContrastLowcontrastLowcontrast_low und ContrastHighContrastHighContrastHighContrastHighcontrastHighcontrast_high der gleiche Wert übergeben, dann wird eine einfache Schwellenwertoperation ausgeführt. MinSizeMinSizeMinSizeMinSizeminSizemin_size dient zur Selektion von signifikanten Merkmalen für die initialen Komponenten basierend auf der Größe der zusammenhängenden Konturregionen. Das bedeutet, dass Konturregionen, die weniger als MinSizeMinSizeMinSizeMinSizeminSizemin_size Pixel umfassen, unterdrückt werden.

Die dabei entstehenden zusammenhängenden Konturregionen werden in einem zweiten Schritt iterativ zusammengefasst. Dabei werden zwei Konturregionen vereinigt, falls der Abstand der beiden Regionen einen bestimmten Schwellenwert unterschreitet (siehe unten). Die daraus resultierenden Regionen werden in InitialComponentsInitialComponentsInitialComponentsInitialComponentsinitialComponentsinitial_components zurückgeliefert und können zum Trainieren des Komponentenmodells an train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponentstrain_model_components übergeben werden.

Zur Steuerung der internen Bildverarbeitung können über die Parameter GenericNameGenericNameGenericNameGenericNamegenericNamegeneric_name und GenericValueGenericValueGenericValueGenericValuegenericValuegeneric_value gezielt Steuerparameter übergeben werden. Dies geschieht, indem bei GenericNameGenericNameGenericNameGenericNamegenericNamegeneric_name die Liste der Namen der Parameter als Strings übergeben werden. Bei GenericValueGenericValueGenericValueGenericValuegenericValuegeneric_value werden die zugehörigen Werte an den gleichen Indexpositionen übergeben.

Normalerweise ist es nicht nötig, die Werte zu ändern. Dies ist nur dann empfehlenswert, wenn das Ergebnis der automatischen Bestimmung der initialen Komponenten nicht den Erwartungen entspricht. Die zwei Parameter, die verändert werden können, sind 'merge_distance'"merge_distance""merge_distance""merge_distance""merge_distance""merge_distance" und 'merge_fraction'"merge_fraction""merge_fraction""merge_fraction""merge_fraction""merge_fraction"; beide werden bei der iterativen Zusammenfassung von Konturregionen verwendet (siehe oben). Dazu wird zunächst der Anteil an Konturpixeln einer Konturregion berechnet, die maximal 'merge_distance'"merge_distance""merge_distance""merge_distance""merge_distance""merge_distance" Pixel von einer anderen Konturregion entfernt liegen. Ist dieser Anteil größer als der in 'merge_fraction'"merge_fraction""merge_fraction""merge_fraction""merge_fraction""merge_fraction" übergebene Wert, dann werden diese beiden Konturregionen zusammengefasst. Daraus folgt, dass je größer 'merge_distance'"merge_distance""merge_distance""merge_distance""merge_distance""merge_distance" und je kleiner 'merge_fraction'"merge_fraction""merge_fraction""merge_fraction""merge_fraction""merge_fraction" gewählt wird, desto mehr Konturregionen werden zusammengefasst. Vorbesetzung für 'merge_distance'"merge_distance""merge_distance""merge_distance""merge_distance""merge_distance" ist 5 und für 'merge_distance'"merge_distance""merge_distance""merge_distance""merge_distance""merge_distance" 0.5 (entspricht 50 Prozent).

Wenn die zweite Möglichkeit verwendet wird, d.h. wenn bereits näherungsweise bekannt ist, aus welchen Komponenten sich das Komponentenmodell zusammensetzt, kann das Training mit train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponentstrain_model_components ohne vorheriges Ausführen von gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponentsgen_initial_components gestartet werden. Dabei können die initialen Komponenten vom Benutzer vorgegeben werden und direkt an train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponentstrain_model_components übergeben werden. Sind sowohl die Komponenten als auch die relativen Bewegungen (Relationen) der Komponenten bekannt, so kann sowohl auf gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponentsgen_initial_components als auch auf train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponentstrain_model_components ganz verzichtet werden und das Komponentenmodell unmittelbar mit create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModelcreate_component_model erstellt werden. Dabei werden die Komponenten direkt an create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModelcreate_component_model übergeben. In diesen beiden Fällen kann gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponentsgen_initial_components jedoch dazu genutzt werden, die Auswirkung der Merkmalsextraktionsparameter ContrastLowContrastLowContrastLowContrastLowcontrastLowcontrast_low, ContrastHighContrastHighContrastHighContrastHighcontrastHighcontrast_high und MinSizeMinSizeMinSizeMinSizeminSizemin_size von train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponentstrain_model_components und create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModelcreate_component_model zu evaluieren und somit geeignete Parameterwerte für eine bestimmte Anwendung zu finden.

Dabei müssen die Bildregionen für die (initialen) Komponenten explizit vorgegeben werden, d.h. für jede (initiale) Komponente wird ein eigenes Bild übergeben, aus dem die (initiale) Komponente generiert werden soll. In diesem Fall besteht das Modellbild ModelImageModelImageModelImageModelImagemodelImagemodel_image demzufolge aus einem Bildobjekttupel. Der Definitionsbereich jedes Bildobjektes wird als Region zur Berechnung der entsprechenden (initialen) Komponente verwendet. Dabei muss die Bildmatrix, die allen Bildobjekten des Bildobjekttupels zugrunde liegt, identisch sein. D.h. ModelImageModelImageModelImageModelImagemodelImagemodel_image kann nicht in beliebiger Weise mit concat_objconcat_objConcatObjConcatObjConcatObjconcat_obj aufgebaut werden, sondern muss aus demselben Bild mit add_channelsadd_channelsAddChannelsAddChannelsAddChannelsadd_channels oder äquivalenten Aufrufen erzeugt werden. Ist dies nicht der Fall, wird eine Fehlermeldung zurückgeliefert. Wird für ContrastLowContrastLowContrastLowContrastLowcontrastLowcontrast_low, ContrastHighContrastHighContrastHighContrastHighcontrastHighcontrast_high oder MinSizeMinSizeMinSizeMinSizeminSizemin_size nur ein Wert übergeben, so gilt dieser Wert für alle (initialen) Komponenten. Sollen dagegen für unterschiedliche (initiale) Komponenten unterschiedliche Parameter verwendet werden, kann dies durch die Übergabe von Tupeln von Werten für die drei Parameter erreicht werden. In diesem Fall müssen die Tupel eine Länge habe, die der Anzahl an (initialen) Komponenten, d.h. der Anzahl an Bildobjekten in ModelImageModelImageModelImageModelImagemodelImagemodel_image, entspricht. Die Konturregionen der (initialen) Komponenten werden in InitialComponentsInitialComponentsInitialComponentsInitialComponentsinitialComponentsinitial_components zurückgeliefert.

Damit ist die zweite Möglichkeit äquivalent zur Funktion von inspect_shape_modelinspect_shape_modelInspectShapeModelInspectShapeModelInspectShapeModelinspect_shape_model innerhalb des formbasierten Matchings. Jedoch werden bei gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponentsgen_initial_components im Unterschied zu inspect_shape_modelinspect_shape_modelInspectShapeModelInspectShapeModelInspectShapeModelinspect_shape_model die Konturregionen nicht auf mehreren Pyramidenebenen generiert. Deshalb sollte für den Fall, dass die Anzahl an Pyramidenebenen manuell gewählt wird, vorzugsweise inspect_shape_modelinspect_shape_modelInspectShapeModelInspectShapeModelInspectShapeModelinspect_shape_model für jede (initiale) Komponente individuell aufgerufen werden.

Für beide oben beschriebenen Möglichkeiten können die Parameter ContrastLowContrastLowContrastLowContrastLowcontrastLowcontrast_low, ContrastHighContrastHighContrastHighContrastHighcontrastHighcontrast_high und MinSizeMinSizeMinSizeMinSizeminSizemin_size auch automatisch bestimmt werden. In diesem Fall muss der Wert 'auto'"auto""auto""auto""auto""auto" übergeben werden. Sollen beide Hysterese-Schwellen automatisch bestimmt werden, so müssen sowohl ContrastLowContrastLowContrastLowContrastLowcontrastLowcontrast_low als auch ContrastHighContrastHighContrastHighContrastHighcontrastHighcontrast_high jeweils auf 'auto'"auto""auto""auto""auto""auto" gesetzt werden. Soll dagegen lediglich ein Kontrastwert automatisch bestimmt werden, so muss ContrastLowContrastLowContrastLowContrastLowcontrastLowcontrast_low auf 'auto'"auto""auto""auto""auto""auto" und ContrastHighContrastHighContrastHighContrastHighcontrastHighcontrast_high auf einen beliebigen Wert ungleich 'auto'"auto""auto""auto""auto""auto" gesetzt werden.

Falls das Eingabebild ModelImageModelImageModelImageModelImagemodelImagemodel_image einen Kanal besitzt, wird zur Berechnung der Repräsentation des Modells das Verfahren verwendet, das auch bei create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModelcreate_component_model oder create_trained_component_modelcreate_trained_component_modelCreateTrainedComponentModelCreateTrainedComponentModelCreateTrainedComponentModelcreate_trained_component_model für die Metriken 'use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity""use_polarity", 'ignore_global_polarity'"ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity" und 'ignore_local_polarity'"ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity" verwendet wird. Falls das Eingabebild mehr als einen Kanal besitzt, wird das Verfahren verwendet, das für die Metrik 'ignore_color_polarity'"ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity" verwendet wird.

Ausführungsinformationen

Parameter

ModelImageModelImageModelImageModelImagemodelImagemodel_image (input_object)  (multichannel-)image(-array) objectHImageHObjectHImageHobject (byte / uint2)

Eingabebild, aus dem die initialen Komponenten erstellt werden sollen.

InitialComponentsInitialComponentsInitialComponentsInitialComponentsinitialComponentsinitial_components (output_object)  region-array objectHRegionHObjectHRegionHobject *

Konturregionen der initiale Komponenten.

ContrastLowContrastLowContrastLowContrastLowcontrastLowcontrast_low (input_control)  integer(-array) HTupleMaybeSequence[Union[int, str]]HTupleHtuple (integer / string) (int / long / string) (Hlong / HString) (Hlong / char*)

Unterer Hystereseschwellenwert für den Kontrast der initialen Komponenten im Bild.

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

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

Restriktion: ContrastLow > 0

ContrastHighContrastHighContrastHighContrastHighcontrastHighcontrast_high (input_control)  integer(-array) HTupleMaybeSequence[Union[int, str]]HTupleHtuple (integer / string) (int / long / string) (Hlong / HString) (Hlong / char*)

Oberer Hystereseschwellenwert für den Kontrast der initialen Komponenten im Bild.

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

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

Restriktion: ContrastHigh > 0 && ContrastHigh >= ContrastLow

MinSizeMinSizeMinSizeMinSizeminSizemin_size (input_control)  integer(-array) HTupleMaybeSequence[Union[int, str]]HTupleHtuple (integer / string) (int / long / string) (Hlong / HString) (Hlong / char*)

Mindestgröße der initialen Komponenten.

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

Wertevorschläge: 'auto'"auto""auto""auto""auto""auto", 0, 5, 10, 20, 30, 40

Restriktion: MinSize >= 0

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

Art der automatischen Segmentierung.

Defaultwert: 'connection' "connection" "connection" "connection" "connection" "connection"

Werteliste: 'connection'"connection""connection""connection""connection""connection"

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

Namen der optionalen Steuerparameter.

Defaultwert: []

Werteliste: 'merge_distance'"merge_distance""merge_distance""merge_distance""merge_distance""merge_distance", 'merge_fraction'"merge_fraction""merge_fraction""merge_fraction""merge_fraction""merge_fraction"

GenericValueGenericValueGenericValueGenericValuegenericValuegeneric_value (input_control)  number(-array) HTupleMaybeSequence[Union[int, float]]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Wert der optionalen Steuerparameter.

Defaultwert: []

Beispiel (HDevelop)

* First example that shows the use of gen_initial_components to automatically
* extract the initial components from a model image.

* Get the model image.
read_image (Image, 'model_image.tif')
* Define the entire model region.
gen_rectangle1 (ModelRegion, 119, 106, 330, 537)
reduce_domain (Image, ModelRegion, ModelImage)
* Automatically generate the initial components.
gen_initial_components (ModelImage, InitialComponents, 40, 40, 20, \
                        'connection', [], [])
* Extract the model components and train the relations.
train_model_components (ModelImage, InitialComponents, TrainingImages, \
                        ModelComponents, 40, 40, 20, 0.85, 0, 0, rad(15), \
                        'speed', 'rigidity', 0.2, 0.5, ComponentTrainingID)
* Create the component model based on the training result.
create_trained_component_model (ComponentTrainingID, -rad(30), rad(60), 10, \
                                0.8, 'auto', 'auto', 'none', \
                                'use_polarity', 'false', ComponentModelID, \
                                RootRanking)

* Second example that shows the use of gen_initial_components to evaluate
* the effect of the feature extraction parameters.

* Get the model image.
read_image (ModelImage, 'model_image.tif')
* Define the regions for the components.
gen_rectangle2 (ComponentRegions, 318, 109, -1.62, 34, 19)
gen_rectangle2 (Rectangle2, 342, 238, -1.63, 32, 17)
gen_rectangle2 (Rectangle3, 355, 505, 1.41, 25, 17)
concat_obj (ComponentRegions, Rectangle2, ComponentRegions)
concat_obj (ComponentRegions, Rectangle3, ComponentRegions)
add_channels (ComponentRegions, ModelImage, ModelImageReduced)
gen_initial_components (ModelImageReduced, InitialComponents, 15, 40, 15, \
                        'connection', [], [])
* Create the component model by explicitly specifying the relations.
create_component_model (ModelImage, ComponentRegions, 20, 20, rad(25), 0, \
                        rad(360), 15, 40, 15, 10, 0.8, 'auto', 'auto', \
                        'none', 'use_polarity', 'false', ComponentModelID, \
                        RootRanking)

Ergebnis

Sind die Parameterwerte korrekt, dann liefert gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponentsgen_initial_components den Wert 2 (H_MSG_TRUE). Das Verhalten bei leerer Eingabe (keine Eingabebilder vorhanden) lässt sich mittels set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

draw_regiondraw_regionDrawRegionDrawRegionDrawRegiondraw_region, add_channelsadd_channelsAddChannelsAddChannelsAddChannelsadd_channels, reduce_domainreduce_domainReduceDomainReduceDomainReduceDomainreduce_domain

Nachfolger

train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponentstrain_model_components

Alternativen

inspect_shape_modelinspect_shape_modelInspectShapeModelInspectShapeModelInspectShapeModelinspect_shape_model

Modul

Matching