train_model_componentsT_train_model_componentsTrainModelComponentsTrainModelComponentstrain_model_components (Operator)
Name
train_model_componentsT_train_model_componentsTrainModelComponentsTrainModelComponentstrain_model_components — Trainieren von Komponenten und Relationen für das komponentenbasierte
Matching.
Signatur
train_model_components(ModelImage, InitialComponents, TrainingImages : ModelComponents : ContrastLow, ContrastHigh, MinSize, MinScore, SearchRowTol, SearchColumnTol, SearchAngleTol, TrainingEmphasis, AmbiguityCriterion, MaxContourOverlap, ClusterThreshold : ComponentTrainingID)
Herror T_train_model_components(const Hobject ModelImage, const Hobject InitialComponents, const Hobject TrainingImages, Hobject* ModelComponents, const Htuple ContrastLow, const Htuple ContrastHigh, const Htuple MinSize, const Htuple MinScore, const Htuple SearchRowTol, const Htuple SearchColumnTol, const Htuple SearchAngleTol, const Htuple TrainingEmphasis, const Htuple AmbiguityCriterion, const Htuple MaxContourOverlap, const Htuple ClusterThreshold, Htuple* ComponentTrainingID)
void TrainModelComponents(const HObject& ModelImage, const HObject& InitialComponents, const HObject& TrainingImages, HObject* ModelComponents, const HTuple& ContrastLow, const HTuple& ContrastHigh, const HTuple& MinSize, const HTuple& MinScore, const HTuple& SearchRowTol, const HTuple& SearchColumnTol, const HTuple& SearchAngleTol, const HTuple& TrainingEmphasis, const HTuple& AmbiguityCriterion, const HTuple& MaxContourOverlap, const HTuple& ClusterThreshold, HTuple* ComponentTrainingID)
void HComponentTraining::HComponentTraining(const HImage& ModelImage, const HRegion& InitialComponents, const HImage& TrainingImages, HRegion* ModelComponents, const HTuple& ContrastLow, const HTuple& ContrastHigh, const HTuple& MinSize, const HTuple& MinScore, const HTuple& SearchRowTol, const HTuple& SearchColumnTol, const HTuple& SearchAngleTol, const HString& TrainingEmphasis, const HString& AmbiguityCriterion, double MaxContourOverlap, double ClusterThreshold)
void HComponentTraining::HComponentTraining(const HImage& ModelImage, const HRegion& InitialComponents, const HImage& TrainingImages, HRegion* ModelComponents, Hlong ContrastLow, Hlong ContrastHigh, Hlong MinSize, double MinScore, Hlong SearchRowTol, Hlong SearchColumnTol, double SearchAngleTol, const HString& TrainingEmphasis, const HString& AmbiguityCriterion, double MaxContourOverlap, double ClusterThreshold)
void HComponentTraining::HComponentTraining(const HImage& ModelImage, const HRegion& InitialComponents, const HImage& TrainingImages, HRegion* ModelComponents, Hlong ContrastLow, Hlong ContrastHigh, Hlong MinSize, double MinScore, Hlong SearchRowTol, Hlong SearchColumnTol, double SearchAngleTol, const char* TrainingEmphasis, const char* AmbiguityCriterion, double MaxContourOverlap, double ClusterThreshold)
void HComponentTraining::HComponentTraining(const HImage& ModelImage, const HRegion& InitialComponents, const HImage& TrainingImages, HRegion* ModelComponents, Hlong ContrastLow, Hlong ContrastHigh, Hlong MinSize, double MinScore, Hlong SearchRowTol, Hlong SearchColumnTol, double SearchAngleTol, const wchar_t* TrainingEmphasis, const wchar_t* AmbiguityCriterion, double MaxContourOverlap, double ClusterThreshold)
(Nur Windows)
HRegion HComponentTraining::TrainModelComponents(const HImage& ModelImage, const HRegion& InitialComponents, const HImage& TrainingImages, const HTuple& ContrastLow, const HTuple& ContrastHigh, const HTuple& MinSize, const HTuple& MinScore, const HTuple& SearchRowTol, const HTuple& SearchColumnTol, const HTuple& SearchAngleTol, const HString& TrainingEmphasis, const HString& AmbiguityCriterion, double MaxContourOverlap, double ClusterThreshold)
HRegion HComponentTraining::TrainModelComponents(const HImage& ModelImage, const HRegion& InitialComponents, const HImage& TrainingImages, Hlong ContrastLow, Hlong ContrastHigh, Hlong MinSize, double MinScore, Hlong SearchRowTol, Hlong SearchColumnTol, double SearchAngleTol, const HString& TrainingEmphasis, const HString& AmbiguityCriterion, double MaxContourOverlap, double ClusterThreshold)
HRegion HComponentTraining::TrainModelComponents(const HImage& ModelImage, const HRegion& InitialComponents, const HImage& TrainingImages, Hlong ContrastLow, Hlong ContrastHigh, Hlong MinSize, double MinScore, Hlong SearchRowTol, Hlong SearchColumnTol, double SearchAngleTol, const char* TrainingEmphasis, const char* AmbiguityCriterion, double MaxContourOverlap, double ClusterThreshold)
HRegion HComponentTraining::TrainModelComponents(const HImage& ModelImage, const HRegion& InitialComponents, const HImage& TrainingImages, Hlong ContrastLow, Hlong ContrastHigh, Hlong MinSize, double MinScore, Hlong SearchRowTol, Hlong SearchColumnTol, double SearchAngleTol, const wchar_t* TrainingEmphasis, const wchar_t* AmbiguityCriterion, double MaxContourOverlap, double ClusterThreshold)
(Nur Windows)
HRegion HImage::TrainModelComponents(const HRegion& InitialComponents, const HImage& TrainingImages, const HTuple& ContrastLow, const HTuple& ContrastHigh, const HTuple& MinSize, const HTuple& MinScore, const HTuple& SearchRowTol, const HTuple& SearchColumnTol, const HTuple& SearchAngleTol, const HString& TrainingEmphasis, const HString& AmbiguityCriterion, double MaxContourOverlap, double ClusterThreshold, HComponentTraining* ComponentTrainingID) const
HRegion HImage::TrainModelComponents(const HRegion& InitialComponents, const HImage& TrainingImages, Hlong ContrastLow, Hlong ContrastHigh, Hlong MinSize, double MinScore, Hlong SearchRowTol, Hlong SearchColumnTol, double SearchAngleTol, const HString& TrainingEmphasis, const HString& AmbiguityCriterion, double MaxContourOverlap, double ClusterThreshold, HComponentTraining* ComponentTrainingID) const
HRegion HImage::TrainModelComponents(const HRegion& InitialComponents, const HImage& TrainingImages, Hlong ContrastLow, Hlong ContrastHigh, Hlong MinSize, double MinScore, Hlong SearchRowTol, Hlong SearchColumnTol, double SearchAngleTol, const char* TrainingEmphasis, const char* AmbiguityCriterion, double MaxContourOverlap, double ClusterThreshold, HComponentTraining* ComponentTrainingID) const
HRegion HImage::TrainModelComponents(const HRegion& InitialComponents, const HImage& TrainingImages, Hlong ContrastLow, Hlong ContrastHigh, Hlong MinSize, double MinScore, Hlong SearchRowTol, Hlong SearchColumnTol, double SearchAngleTol, const wchar_t* TrainingEmphasis, const wchar_t* AmbiguityCriterion, double MaxContourOverlap, double ClusterThreshold, HComponentTraining* ComponentTrainingID) const
(Nur Windows)
static void HOperatorSet.TrainModelComponents(HObject modelImage, HObject initialComponents, HObject trainingImages, out HObject modelComponents, HTuple contrastLow, HTuple contrastHigh, HTuple minSize, HTuple minScore, HTuple searchRowTol, HTuple searchColumnTol, HTuple searchAngleTol, HTuple trainingEmphasis, HTuple ambiguityCriterion, HTuple maxContourOverlap, HTuple clusterThreshold, out HTuple componentTrainingID)
public HComponentTraining(HImage modelImage, HRegion initialComponents, HImage trainingImages, out HRegion modelComponents, HTuple contrastLow, HTuple contrastHigh, HTuple minSize, HTuple minScore, HTuple searchRowTol, HTuple searchColumnTol, HTuple searchAngleTol, string trainingEmphasis, string ambiguityCriterion, double maxContourOverlap, double clusterThreshold)
public HComponentTraining(HImage modelImage, HRegion initialComponents, HImage trainingImages, out HRegion modelComponents, int contrastLow, int contrastHigh, int minSize, double minScore, int searchRowTol, int searchColumnTol, double searchAngleTol, string trainingEmphasis, string ambiguityCriterion, double maxContourOverlap, double clusterThreshold)
HRegion HComponentTraining.TrainModelComponents(HImage modelImage, HRegion initialComponents, HImage trainingImages, HTuple contrastLow, HTuple contrastHigh, HTuple minSize, HTuple minScore, HTuple searchRowTol, HTuple searchColumnTol, HTuple searchAngleTol, string trainingEmphasis, string ambiguityCriterion, double maxContourOverlap, double clusterThreshold)
HRegion HComponentTraining.TrainModelComponents(HImage modelImage, HRegion initialComponents, HImage trainingImages, int contrastLow, int contrastHigh, int minSize, double minScore, int searchRowTol, int searchColumnTol, double searchAngleTol, string trainingEmphasis, string ambiguityCriterion, double maxContourOverlap, double clusterThreshold)
HRegion HImage.TrainModelComponents(HRegion initialComponents, HImage trainingImages, HTuple contrastLow, HTuple contrastHigh, HTuple minSize, HTuple minScore, HTuple searchRowTol, HTuple searchColumnTol, HTuple searchAngleTol, string trainingEmphasis, string ambiguityCriterion, double maxContourOverlap, double clusterThreshold, out HComponentTraining componentTrainingID)
HRegion HImage.TrainModelComponents(HRegion initialComponents, HImage trainingImages, int contrastLow, int contrastHigh, int minSize, double minScore, int searchRowTol, int searchColumnTol, double searchAngleTol, string trainingEmphasis, string ambiguityCriterion, double maxContourOverlap, double clusterThreshold, out HComponentTraining componentTrainingID)
def train_model_components(model_image: HObject, initial_components: HObject, training_images: HObject, contrast_low: MaybeSequence[Union[int, str]], contrast_high: MaybeSequence[Union[int, str]], min_size: MaybeSequence[Union[int, str]], min_score: MaybeSequence[float], search_row_tol: MaybeSequence[int], search_column_tol: MaybeSequence[int], search_angle_tol: MaybeSequence[float], training_emphasis: str, ambiguity_criterion: str, max_contour_overlap: float, cluster_threshold: float) -> Tuple[HObject, HHandle]
Beschreibung
train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponentstrain_model_components ermittelt die endgültigen (starren)
Modellkomponenten und trainiert deren gegenseitige Relationen, d.h.
deren relative Bewegungen, auf der Grundlage der initialen
Komponenten anhand mehrerer Trainingsbilder. Das Ergebnis des
Trainings wird in ComponentTrainingIDComponentTrainingIDComponentTrainingIDComponentTrainingIDcomponentTrainingIDcomponent_training_id als Handle
zurückgegeben. Das Trainingsergebnis kann anschließend dazu
verwendet werden, das eigentliche Komponentenmodell mit
create_trained_component_modelcreate_trained_component_modelCreateTrainedComponentModelCreateTrainedComponentModelCreateTrainedComponentModelcreate_trained_component_model aufzubauen.
train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponentstrain_model_components sollte in den Fällen verwendet
werden, in denen die Relationen der Komponenten nicht bekannt sind
und daher automatisch trainiert werden sollen. Sind die Relationen
dagegen bekannt, kann auf den Einsatz von
train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponentstrain_model_components verzichtet werden und das
Komponentenmodell direkt mit create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModelcreate_component_model
generiert werden.
Sind die initialen Komponenten automatisch mit
gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponentsgen_initial_components erzeugt worden, so enthält
InitialComponentsInitialComponentsInitialComponentsInitialComponentsinitialComponentsinitial_components die Konturregionen der initialen
Komponenten. Sollen die initialen Komponenten dagegen von Hand
vorgegeben werden, so können diese in InitialComponentsInitialComponentsInitialComponentsInitialComponentsinitialComponentsinitial_components
direkt übergeben werden. Dabei dürfen allerdings keine
Konturregionen, sondern die initialen Komponenten umschließende
Regionen übergeben werden. Die übergebenen (Kontur-)Regionen
beziehen sich auf das Modellbild ModelImageModelImageModelImageModelImagemodelImagemodel_image. Wurden die
initialen Komponenten mit Hilfe von gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponentsgen_initial_components
bestimmt, sollte das übergebene Modellbild folglich mit dem
Modellbild in gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponentsgen_initial_components übereinstimmen. In
jedem Fall ist zu beachten, dass jede initiale Komponente
Bestandteil von höchstens einer starren Modellkomponente ist. Der
Grund hierfür ist, dass während des Trainings initiale Komponenten
zwar bei Bedarf zu starren Modellkomponenten zusammengefasst werden
(siehe unten), nicht jedoch in kleinere Einheiten zerlegt und auf
verschiedene Modellkomponenten aufgeteilt werden können.
Folgendes Vorgehen wird in train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponentstrain_model_components zum
Trainieren angewendet: Im ersten Schritt werden die initialen
Komponenten in allen Trainingsbildern gesucht. Es kann vorkommen,
dass eine initiale Komponente in einem Trainingsbild mehrfach
gefunden wird. Daher werden im zweiten Schritt die daraus
resultierenden Mehrdeutigkeiten gelöst, d.h. die wahrscheinlichste
Lage jeder initialen Komponente wird ermittelt. Nach dem Lösen der
Mehrdeutigkeiten bleibt demnach in jedem Trainingsbild für jede
initiale Komponente höchstens eine gefundene Instanz übrig. Im
nächsten Schritt werden die (nun eindeutigen) Lagen der initialen
Komponenten analysiert. Diejenigen initialen Komponenten, die sich
nicht relativ zueinander bewegen, werden zu den endgültigen starren
Modellkomponenten zusammengefasst. Schließlich werden im letzten
Schritt die Relationen zwischen den Modellkomponenten ermittelt
indem ihre relativen Bewegungen über die Sequenz an Trainingsbildern
analysiert werden. Die mit den beschriebenen Schritten verbundenen
Parameter werden im Folgenden erläutert.
Das Training erfolgt auf der Grundlage der in TrainingImagesTrainingImagesTrainingImagesTrainingImagestrainingImagestraining_images
übergebenen Trainingsbilder. Die Trainingsbilder dürfen jeweils
höchstens eine Instanz des zusammengesetzten Objektes zeigen und
sollten nach Möglichkeit die relativen Bewegungen aller
Modellkomponenten in vollem Umfang beinhalten. Soll z.B. das
Komponentenmodell eines Ein-Aus-Schalters trainiert werden, so
genügt ein Trainingsbild, in dem der Schalter im ausgeschalten
Zustand zu sehen ist für den Fall, dass der Schalter im Modellbild
im eingeschalteten Zustand vorliegt, bzw. umgekehrt.
Das Prinzip des Trainings ist es, die initialen Komponenten in den
Trainingsbildern wiederzufinden und deren Lage (Position und
Orientierung) zu analysieren. Dazu wird für jede initiale Komponente
ein Formmodell erzeugt (siehe create_shape_modelcreate_shape_modelCreateShapeModelCreateShapeModelCreateShapeModelcreate_shape_model), das dann
dazu genutzt wird, die Lage der initialen Komponente in den
Trainingsbildern zu bestimmen (siehe find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModelfind_shape_model). Je
nachdem welcher Modus mit
set_system('pregenerate_shape_models',...)set_system("pregenerate_shape_models",...)SetSystem("pregenerate_shape_models",...)SetSystem("pregenerate_shape_models",...)SetSystem("pregenerate_shape_models",...)set_system("pregenerate_shape_models",...) eingestellt ist,
wird das komplette Formmodell vorab generiert oder erst während der
Suche online erzeugt. Dieser Modus hat sowohl Einfluss auf die
Laufzeit als auch auf die Robustheit des Trainings. Weiterhin ist
zu beachten, dass bei Verwendung von einkanaligen Bildern sowohl in
ModelImageModelImageModelImageModelImagemodelImagemodel_image als auch in TrainingImagesTrainingImagesTrainingImagesTrainingImagestrainingImagestraining_images intern die
Metrik 'use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity""use_polarity" für create_shape_modelcreate_shape_modelCreateShapeModelCreateShapeModelCreateShapeModelcreate_shape_model
verwendet wird, während bei mehrkanaligen Bildern in
ModelImageModelImageModelImageModelImagemodelImagemodel_image oder in TrainingImagesTrainingImagesTrainingImagesTrainingImagestrainingImagestraining_images intern die
Metrik 'ignore_color_polarity'"ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity" verwendet wird. Schließlich
ist zu beachten, dass die Anzahl der Kanäle in ModelImageModelImageModelImageModelImagemodelImagemodel_image
und TrainingImagesTrainingImagesTrainingImagesTrainingImagestrainingImagestraining_images zwar unterschiedlich sein darf, z.B. um
die Modellgenerierung aus synthetischen Bildern zu erlauben, dass
aber die Anzahl der Kanäle für alle Bilder in
TrainingImagesTrainingImagesTrainingImagesTrainingImagestrainingImagestraining_images gleich sein muss. Weitere Informationen
können bei create_shape_modelcreate_shape_modelCreateShapeModelCreateShapeModelCreateShapeModelcreate_shape_model nachgelesen werden. Das
Generieren der Formmodelle kann mit Hilfe der Parameter
ContrastLowContrastLowContrastLowContrastLowcontrastLowcontrast_low, ContrastHighContrastHighContrastHighContrastHighcontrastHighcontrast_high und MinSizeMinSizeMinSizeMinSizeminSizemin_size
beeinflusst werden. Diese Parameter erfüllen dieselbe Funktion wie
in gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponentsgen_initial_components und können durch die Angabe von
'auto'"auto""auto""auto""auto""auto" auch automatisch bestimmt 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.
Wurden die initialen Komponenten automatisch mit
gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponentsgen_initial_components erzeugt, so sollten die Parameter
ContrastLowContrastLowContrastLowContrastLowcontrastLowcontrast_low, ContrastHighContrastHighContrastHighContrastHighcontrastHighcontrast_high und MinSizeMinSizeMinSizeMinSizeminSizemin_size mit
den selben Werten besetzt werden wie in
gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponentsgen_initial_components.
Zur Steuerung der Suche nach den initialen Komponenten dienen die
Parameter MinScoreMinScoreMinScoreMinScoreminScoremin_score, SearchRowTolSearchRowTolSearchRowTolSearchRowTolsearchRowTolsearch_row_tol,
SearchColumnTolSearchColumnTolSearchColumnTolSearchColumnTolsearchColumnTolsearch_column_tol, SearchAngleTolSearchAngleTolSearchAngleTolSearchAngleTolsearchAngleTolsearch_angle_tol und
TrainingEmphasisTrainingEmphasisTrainingEmphasisTrainingEmphasistrainingEmphasistraining_emphasis. Der Parameter MinScoreMinScoreMinScoreMinScoreminScoremin_score legt
fest, welche Bewertung ein potentieller Match mindestens besitzen
muss, damit er als eine Instanz der initialen Komponente im
Trainingsbild angesehen wird. Je größer der Wert von
MinScoreMinScoreMinScoreMinScoreminScoremin_score gewählt werden kann, desto schneller verläuft das
Training. Falls erwartet werden kann, dass die initialen
Komponenten in den Trainingsbildern niemals verdeckt sind, kann
MinScoreMinScoreMinScoreMinScoreminScoremin_score auf so hohe Werte wie 0.8 oder sogar 0.9 gesetzt
werden (siehe auch find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModelfind_shape_model).
Im Normalfall werden die Komponenten nur an den Stellen der
Trainingsbilder gesucht, an denen die jeweilige Komponente
vollständig in das Bild passt. Das bedeutet, dass eine Komponente
nicht gefunden werden kann, wenn sie aus dem Bild herausragt, selbst
wenn sie eine Bewertung größer als MinScoreMinScoreMinScoreMinScoreminScoremin_score erreichen
würde. Dieses Verhalten kann mit
set_system('border_shape_models','true')set_system("border_shape_models","true")SetSystem("border_shape_models","true")SetSystem("border_shape_models","true")SetSystem("border_shape_models","true")set_system("border_shape_models","true") umgestellt werden,
so dass auch Komponenten gefunden werden, die aus dem Bild
herausragen, falls sie eine Bewertung größer als MinScoreMinScoreMinScoreMinScoreminScoremin_score
erreichen. Dabei werden Punkte außerhalb des Bildes als verdeckt
angesehen, d.h. sie verringern die Bewertung. Es ist zu beachten,
dass dieser Modus die Laufzeit des Trainings erhöht.
Bei einer hohen Anzahl an initialen Komponenten und vielen
Trainingsbildern kann das Trainieren unter Umständen sehr lange (bis
zu mehreren Minuten) dauern. Um das Trainieren zu beschleunigen
besteht die Möglichkeit, den Suchbereich in den Trainingsbildern für
die einzelnen initialen Komponenten einzuschränken. Dabei gilt die
Lage der initialen Komponenten im Modellbild als Referenzlage. Die
Parameter SearchRowTolSearchRowTolSearchRowTolSearchRowTolsearchRowTolsearch_row_tol und SearchColumnTolSearchColumnTolSearchColumnTolSearchColumnTolsearchColumnTolsearch_column_tol geben
an, in welchem Toleranzbereich relativ zur Referenzposition gesucht
werden soll. Wenn z.B. die Position einer initialen Komponente im
Modellbild (100,200) ist und für SearchRowTolSearchRowTolSearchRowTolSearchRowTolsearchRowTolsearch_row_tol =
20 und für SearchColumnTolSearchColumnTolSearchColumnTolSearchColumnTolsearchColumnTolsearch_column_tol = 10 gewählt
wird, dann wird diese initiale Komponente in den Trainingsbildern
lediglich innerhalb des achsenparallelen Rechtecks gesucht, dessen
linke obere Ecke bei (80,190) und dessen rechte untere Ecke bei
(120,210) liegt. Das gleiche gilt für den Winkelsuchbereich, der
durch die Angabe der Winkeltoleranz SearchAngleTolSearchAngleTolSearchAngleTolSearchAngleTolsearchAngleTolsearch_angle_tol auf
[-SearchAngleTolSearchAngleTolSearchAngleTolSearchAngleTolsearchAngleTolsearch_angle_tol,+SearchAngleTolSearchAngleTolSearchAngleTolSearchAngleTolsearchAngleTolsearch_angle_tol] eingeschränkt
werden kann.
Damit ist es möglich durch geschickte Aufnahme der Trainingsbilder den
Rechenaufwand während des Trainierens deutlich zu reduzieren. Wird
für einen dieser drei Parameter der Wert -1 übergeben,
erfolgt in der entsprechenden Dimension keine Suchraumeinschränkung.
Die Eingabeparameter ContrastLowContrastLowContrastLowContrastLowcontrastLowcontrast_low, ContrastHighContrastHighContrastHighContrastHighcontrastHighcontrast_high,
MinSizeMinSizeMinSizeMinSizeminSizemin_size, MinScoreMinScoreMinScoreMinScoreminScoremin_score, SearchRowTolSearchRowTolSearchRowTolSearchRowTolsearchRowTolsearch_row_tol,
SearchColumnTolSearchColumnTolSearchColumnTolSearchColumnTolsearchColumnTolsearch_column_tol und SearchAngleTolSearchAngleTolSearchAngleTolSearchAngleTolsearchAngleTolsearch_angle_tol müssen
entweder genau ein Element enthalten, oder dieselbe Anzahl wie
initiale Komponenten in InitialComponentsInitialComponentsInitialComponentsInitialComponentsinitialComponentsinitial_components. Im ersten Fall
wird der Wert des Eingabeparameters für alle initiale Komponenten
gleich verwendet. Im zweiten Fall wird das jeweilige Element des
Eingabeparameters für die entsprechende initiale Komponente in
InitialComponentsInitialComponentsInitialComponentsInitialComponentsinitialComponentsinitial_components verwendet.
Der Parameter TrainingEmphasisTrainingEmphasisTrainingEmphasisTrainingEmphasistrainingEmphasistraining_emphasis bietet eine weitere
Möglichkeit, auf die Geschwindigkeit des Trainingsvorgangs Einfluss
zu nehmen und gleichzeitig dessen Robustheit zu steuern. Wird
TrainingEmphasisTrainingEmphasisTrainingEmphasisTrainingEmphasistrainingEmphasistraining_emphasis auf 'speed'"speed""speed""speed""speed""speed" gesetzt, so verläuft
das Training zwar vergleichsweise schnell, es kann allerdings in
einigen Fällen dazu führen, dass einzelne initiale Komponenten in
den Trainingsbildern nicht oder in falscher Lage gefunden werden. Das
würde zu einer fehlerhaften Berechnung der starren Modellkomponenten
und deren Relationen führen. Die Lage der gefundenen initialen
Komponenten in den einzelnen Trainingsbildern kann mit Hilfe von
get_training_componentsget_training_componentsGetTrainingComponentsGetTrainingComponentsGetTrainingComponentsget_training_components kontrolliert werden. Bei
auftretenden Fehlzuordnungen sollte dann TrainingEmphasisTrainingEmphasisTrainingEmphasisTrainingEmphasistrainingEmphasistraining_emphasis
auf 'reliability'"reliability""reliability""reliability""reliability""reliability" gesetzt und das Training erneut gestartet
werden. Dadurch wird eine höhere Robustheit gegenüber
Fehlzuordnungen erreicht, allerdings auf Kosten einer längeren
Rechenzeit.
Bei der Bestimmung der Lage kann es außerdem zu Mehrdeutigkeiten
kommen, falls die initialen Komponenten Rotationssymmetrien
aufweisen oder wenn mehrere initiale Komponenten identisch oder sich
sehr ähnlich sind. Zur Lösung dieser Mehrdeutigkeiten wird jeweils
die wahrscheinlichste Lage für jede initiale Komponenten in jedem
Trainingsbild ermittelt. Dazu müssen die einzelnen mehrdeutigen Lagen
bewertet werden. Die Lage einer initialen Komponente im Trainingsbild
wird dann gut bewertet, wenn die relative Lage zu den übrigen
initialen Komponenten möglichst gut mit der entsprechenden relativen
Lage im Modellbild übereinstimmt. Die Bewertung der
Übereinstimmungen kann mit AmbiguityCriterionAmbiguityCriterionAmbiguityCriterionAmbiguityCriterionambiguityCriterionambiguity_criterion gewählt
werden. In fast allen Fällen liefert 'rigidity'"rigidity""rigidity""rigidity""rigidity""rigidity" die besten
Ergebnisse. Dabei wird von der Starrheit des zusammengesetzten
Objektes ausgegangen. Je mehr die Starrheit des zusammengesetzten
Objektes durch die Lage der initialen Komponente verletzt wird,
desto geringer fällt deren Bewertung aus. Bei 'distance'"distance""distance""distance""distance""distance"
wird nur die Entfernung zwischen den initialen Komponenten als Maß
herangezogen. In diesem Fall erhält die Lage einer initialen
Komponente eine gute Bewertung wenn ihre Distanzen zu den übrigen
Komponenten mit den entsprechenden Distanzen im Modellbild gut
übereinstimmen. Dementsprechend ist bei 'orientation'"orientation""orientation""orientation""orientation""orientation" nur
die relative Orientierung für die Bewertung
ausschlaggebend. Schlussendlich kann die gleichzeitige
Berücksichtigung von Entfernung und relativer Orientierung mit
'distance_orientation'"distance_orientation""distance_orientation""distance_orientation""distance_orientation""distance_orientation" erreicht werden. Im Gegensatz zu
'rigidity'"rigidity""rigidity""rigidity""rigidity""rigidity" wird bei 'distance_orientation'"distance_orientation""distance_orientation""distance_orientation""distance_orientation""distance_orientation" die
relative Lage der initialen Komponenten vernachlässigt.
Die Lösung der Mehrdeutigkeiten kann auch durch den Parameter
MaxContourOverlapMaxContourOverlapMaxContourOverlapMaxContourOverlapmaxContourOverlapmax_contour_overlap beeinflusst werden. Dieser Parameter
beschreibt das Ausmaß, zu dem sich die Konturen zweier Matches
initialer Komponenten überlappen dürfen. Angenommen, es sollen,
z.B. zwei initiale Komponenten 'I' und 'T' in einem Trainingsbild,
das den Schriftzug 'IT' enthält, gefunden werden. Dann wird zwar die
initiale Komponente 'T' in ihrer richtigen Lage gefunden, aufgrund
der Ähnlichkeiten der beiden initialen Komponenten wird die initiale
Komponente 'I' allerdings sowohl in ihrer richtigen Lage ('I') als
auch in der falschen Lage an der Position des 'T' gefunden. Durch
geeignete Wahl von MaxContourOverlapMaxContourOverlapMaxContourOverlapMaxContourOverlapmaxContourOverlapmax_contour_overlap ist es möglich, den
falschen Match zu verwerfen: Sollen überlappende Matches toleriert
werden, dann sollte MaxContourOverlapMaxContourOverlapMaxContourOverlapMaxContourOverlapmaxContourOverlapmax_contour_overlap auf 1 gesetzt
werden. Sollen überlappende Matches vollkommen ausgeschlossen
werden, dann sollte MaxContourOverlapMaxContourOverlapMaxContourOverlapMaxContourOverlapmaxContourOverlapmax_contour_overlap auf 0 gesetzt
werden. Durch die Wahl eines Wertes zwischen 0 und
1 kann der maximale Prozentsatz an überlappenden
Konturpixeln stufenlos eingestellt werden.
Aufgrund der Lagen der initialen Komponenten im Modellbild und in
den Trainingsbildern wird dann zunächst entschieden, welche initialen
Komponenten zu starren Modellkomponenten zusammengefasst werden
können. Zwei initiale Komponenten können genau dann zusammengefasst
werden, wenn sie über alle Bilder keine relative Bewegung zeigen.
Würde im Falle des Schalters das Trainingsbild den gleichen
Schalterzustand zeigen wie das Modellbild, so würde der Algorithmus
die entsprechenden initialen Komponenten zusammenfassen in der
Annahme, es handele sich um eine starre Modellkomponente. Das Maß,
in dem initiale Komponenten zusammengefasst werden, kann über den
Parameter ClusterThresholdClusterThresholdClusterThresholdClusterThresholdclusterThresholdcluster_threshold gesteuert werden. Dieser
Schwellenwert basiert auf der Wahrscheinlichkeit, dass zwei initiale
Komponenten zur gleichen starren Modellkomponente gehören.
ClusterThresholdClusterThresholdClusterThresholdClusterThresholdclusterThresholdcluster_threshold gibt somit die minimale Wahrscheinlichkeit
an, die zwei initiale Komponenten aufweisen müssen, damit sie
zusammengefasst werden. Da es sich um Wahrscheinlichkeiten handelt,
muss der Schwellenwert im Bereich von 0 bis 1
liegen. Je größer der Cluster-Schwellenwert gewählt wird, desto
weniger Zusammenschlüsse finden statt. Für einen Schwellenwert von
0 werden all initialen Komponenten zu einer starren
Komponente zusammengefasst, für einen Schwellenwert von 1
finden keine Zusammenschlüsse statt und jede initiale Komponente
wird als starre Modellkomponente übernommen.
Die endgültigen starren Modellkomponenten werden in
ModelComponentsModelComponentsModelComponentsModelComponentsmodelComponentsmodel_components zurückgeliefert. In nachfolgenden
Operatoren wird der Index einer Komponenten in
ModelComponentsModelComponentsModelComponentsModelComponentsmodelComponentsmodel_components verwendet, um die Modellkomponente zu
bezeichnen. Die Lage der gefundenen Modellkomponenten in den
Trainingsbildern kann mit get_training_componentsget_training_componentsGetTrainingComponentsGetTrainingComponentsGetTrainingComponentsget_training_components
kontrolliert werden.
Nach der Bestimmung der Modellkomponenten werden deren relative
Bewegungen analysiert. Dabei wird für jedes Komponentenpaar die
Bewegung der zweiten Komponente relativ zur ersten bestimmt. Dazu
werden die Komponenten zunächst auf ihren Referenzpunkt bezogen. Der
Referenzpunkt einer Komponente ergibt sich aus dem Schwerpunkt
seiner Konturregion, die in ModelComponentsModelComponentsModelComponentsModelComponentsmodelComponentsmodel_components zurückgeliefert
wird und kann mit area_centerarea_centerAreaCenterAreaCenterAreaCenterarea_center berechnet werden. Die
relative Bewegung wird dann durch das kleinste umschließende
Rechteck beliebiger Orientierung der relativen Referenzpunktbewegung
und durch den kleinsten umschließenden Winkelbereich der relativen
Orientierung der zweiten Komponente über alle Bilder
repräsentiert. Die ermittelten Relationen können mit
get_component_relationsget_component_relationsGetComponentRelationsGetComponentRelationsGetComponentRelationsget_component_relations inspiziert 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
ModelImageModelImageModelImageModelImagemodelImagemodel_image (input_object) (multichannel-)image → objectHImageHObjectHImageHobject (byte / uint2)
Eingabebild, aus dem die Formmodelle für die initialen
Komponenten generiert werden sollen.
InitialComponentsInitialComponentsInitialComponentsInitialComponentsinitialComponentsinitial_components (input_object) region-array → objectHRegionHObjectHRegionHobject
Konturregionen oder umschließende Regionen der
initiale Komponenten.
TrainingImagesTrainingImagesTrainingImagesTrainingImagestrainingImagestraining_images (input_object) (multichannel-)image(-array) → objectHImageHObjectHImageHobject (byte / uint2)
Zum Trainieren der Modellkomponenten verwendete
Trainingsbilder.
ModelComponentsModelComponentsModelComponentsModelComponentsmodelComponentsmodel_components (output_object) region(-array) → objectHRegionHObjectHRegionHobject *
Konturregionen der starren Modellkomponenten.
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 zusammenhängender Konturregionen.
Defaultwert:
'auto'
"auto"
"auto"
"auto"
"auto"
"auto"
Wertevorschläge: 'auto'"auto""auto""auto""auto""auto", 0, 5, 10, 20, 30, 40
Restriktion: MinSize >= 0
MinScoreMinScoreMinScoreMinScoreminScoremin_score (input_control) real(-array) → HTupleMaybeSequence[float]HTupleHtuple (real) (double) (double) (double)
Minimale Bewertung der zu findenden Instanzen
der initialen Komponenten
Defaultwert: 0.5
Wertevorschläge: 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
Minimale Schrittweite: 0.01
Empfohlene Schrittweite: 0.05
Restriktion: 0 <= MinScore && MinScore <= 1
SearchRowTolSearchRowTolSearchRowTolSearchRowTolsearchRowTolsearch_row_tol (input_control) integer(-array) → HTupleMaybeSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)
Suchtoleranz in Zeilenrichtung.
Defaultwert: -1
Wertevorschläge: 0, 10, 20, 30, 50, 100
Restriktion: SearchRowTol == -1 || SearchColumnTol >= 0
SearchColumnTolSearchColumnTolSearchColumnTolSearchColumnTolsearchColumnTolsearch_column_tol (input_control) integer(-array) → HTupleMaybeSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)
Suchtoleranz in Spaltenrichtung.
Defaultwert: -1
Wertevorschläge: 0, 10, 20, 30, 50, 100
Restriktion: SearchColumnTol == -1 || SearchColumnTol >= 0
SearchAngleTolSearchAngleTolSearchAngleTolSearchAngleTolsearchAngleTolsearch_angle_tol (input_control) angle.rad(-array) → HTupleMaybeSequence[float]HTupleHtuple (real) (double) (double) (double)
Winkel-Suchtoleranz.
Defaultwert: -1
Wertevorschläge: 0.0, 0.17, 0.39, 0.78, 1.57
Restriktion: SearchAngleTol == -1 || SearchAngleTol >= 0
TrainingEmphasisTrainingEmphasisTrainingEmphasisTrainingEmphasistrainingEmphasistraining_emphasis (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Entscheidung, ob das Trainieren auf dem Grundsatz einer
schnellen Berechnung oder einen hohen Robustheit
basiert.
Defaultwert:
'speed'
"speed"
"speed"
"speed"
"speed"
"speed"
Werteliste: 'reliability'"reliability""reliability""reliability""reliability""reliability", 'speed'"speed""speed""speed""speed""speed"
AmbiguityCriterionAmbiguityCriterionAmbiguityCriterionAmbiguityCriterionambiguityCriterionambiguity_criterion (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Kriterium zur Lösung mehrdeutiger Matches der
initialen Komponenten in einem Trainingsbild.
Defaultwert:
'rigidity'
"rigidity"
"rigidity"
"rigidity"
"rigidity"
"rigidity"
Werteliste: 'distance'"distance""distance""distance""distance""distance", 'distance_orientation'"distance_orientation""distance_orientation""distance_orientation""distance_orientation""distance_orientation", 'orientation'"orientation""orientation""orientation""orientation""orientation", 'rigidity'"rigidity""rigidity""rigidity""rigidity""rigidity"
MaxContourOverlapMaxContourOverlapMaxContourOverlapMaxContourOverlapmaxContourOverlapmax_contour_overlap (input_control) real → HTuplefloatHTupleHtuple (real) (double) (double) (double)
Maximale Konturüberlappung gefundener initialer
Komponenten in einem Trainingsbild.
Defaultwert: 0.2
Wertevorschläge: 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
Minimale Schrittweite: 0.01
Empfohlene Schrittweite: 0.05
Restriktion: 0 <= MaxContourOverlap && MaxContourOverlap <= 1
ClusterThresholdClusterThresholdClusterThresholdClusterThresholdclusterThresholdcluster_threshold (input_control) real → HTuplefloatHTupleHtuple (real) (double) (double) (double)
Schwellenwert für das Zusammenfassen initialer
Komponenten.
Defaultwert: 0.5
Wertevorschläge: 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0
Restriktion: 0 <= ClusterThreshold && ClusterThreshold <= 1
ComponentTrainingIDComponentTrainingIDComponentTrainingIDComponentTrainingIDcomponentTrainingIDcomponent_training_id (output_control) component_training → HComponentTraining, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)
Handle des Trainingsergebnisses.
Beispiel (HDevelop)
* Get the model image.
read_image (ModelImage, 'model_image.tif')
* Define the regions for the initial components.
gen_rectangle2 (InitialComponentRegions, 212, 233, 0.62, 167, 29)
gen_rectangle2 (Rectangle2, 298, 363, 1.17, 162, 34)
gen_rectangle2 (Rectangle3, 63, 444, -0.26, 50, 27)
gen_rectangle2 (Rectangle4, 120, 473, 0, 33, 20)
concat_obj (InitialComponentRegions, Rectangle2, InitialComponentRegions)
concat_obj (InitialComponentRegions, Rectangle3, InitialComponentRegions)
concat_obj (InitialComponentRegions, Rectangle4, InitialComponentRegions)
* Get the training images.
gen_empty_obj (TrainingImages)
for i := 1 to 4 by 1
read_image (TrainingImage, 'training_image-'+i+'.tif')
concat_obj (TrainingImages, TrainingImage, TrainingImages)
endfor
* Extract the model components and train the relations.
train_model_components (ModelImage, InitialComponentRegions, \
TrainingImages, ModelComponents, 22, 60, 30, 0.6, \
0, 0, rad(60), 'speed', 'rigidity', 0.2, 0.4, \
ComponentTrainingID)
Ergebnis
Sind die Parameterwerte korrekt, dann liefert
train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponentstrain_model_components den Wert 2 (H_MSG_TRUE). Das Verhalten bei leerer
Eingabe (keine Eingabebilder oder Eingaberegionen 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
gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponentsgen_initial_components
Nachfolger
inspect_clustered_componentsinspect_clustered_componentsInspectClusteredComponentsInspectClusteredComponentsInspectClusteredComponentsinspect_clustered_components,
cluster_model_componentscluster_model_componentsClusterModelComponentsClusterModelComponentsClusterModelComponentscluster_model_components,
modify_component_relationsmodify_component_relationsModifyComponentRelationsModifyComponentRelationsModifyComponentRelationsmodify_component_relations,
write_training_componentswrite_training_componentsWriteTrainingComponentsWriteTrainingComponentsWriteTrainingComponentswrite_training_components,
get_training_componentsget_training_componentsGetTrainingComponentsGetTrainingComponentsGetTrainingComponentsget_training_components,
get_component_relationsget_component_relationsGetComponentRelationsGetComponentRelationsGetComponentRelationsget_component_relations,
create_trained_component_modelcreate_trained_component_modelCreateTrainedComponentModelCreateTrainedComponentModelCreateTrainedComponentModelcreate_trained_component_model,
clear_training_componentsclear_training_componentsClearTrainingComponentsClearTrainingComponentsClearTrainingComponentsclear_training_components
Siehe auch
create_trained_component_modelcreate_trained_component_modelCreateTrainedComponentModelCreateTrainedComponentModelCreateTrainedComponentModelcreate_trained_component_model
Modul
Matching