train_model_componentsT_train_model_componentsTrainModelComponentsTrainModelComponents (Operator)

Name

train_model_componentsT_train_model_componentsTrainModelComponentsTrainModelComponents — 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)

Beschreibung

train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponents 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 ComponentTrainingIDComponentTrainingIDComponentTrainingIDComponentTrainingIDcomponentTrainingID als Handle zurückgegeben. Das Trainingsergebnis kann anschließend dazu verwendet werden, das eigentliche Komponentenmodell mit create_trained_component_modelcreate_trained_component_modelCreateTrainedComponentModelCreateTrainedComponentModelCreateTrainedComponentModel aufzubauen.

train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponents 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_componentsTrainModelComponentsTrainModelComponentsTrainModelComponents verzichtet werden und das Komponentenmodell direkt mit create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModel generiert werden.

Sind die initialen Komponenten automatisch mit gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponents erzeugt worden, so enthält InitialComponentsInitialComponentsInitialComponentsInitialComponentsinitialComponents die Konturregionen der initialen Komponenten. Sollen die initialen Komponenten dagegen von Hand vorgegeben werden, so können diese in InitialComponentsInitialComponentsInitialComponentsInitialComponentsinitialComponents 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 ModelImageModelImageModelImageModelImagemodelImage. Wurden die initialen Komponenten mit Hilfe von gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponents bestimmt, sollte das übergebene Modellbild folglich mit dem Modellbild in gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponents ü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_componentsTrainModelComponentsTrainModelComponentsTrainModelComponents 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 TrainingImagesTrainingImagesTrainingImagesTrainingImagestrainingImages ü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_modelCreateShapeModelCreateShapeModelCreateShapeModel), das dann dazu genutzt wird, die Lage der initialen Komponente in den Trainingsbildern zu bestimmen (siehe find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModel). 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",...) 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 ModelImageModelImageModelImageModelImagemodelImage als auch in TrainingImagesTrainingImagesTrainingImagesTrainingImagestrainingImages intern die Metrik 'use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity" für create_shape_modelcreate_shape_modelCreateShapeModelCreateShapeModelCreateShapeModel verwendet wird, während bei mehrkanaligen Bildern in ModelImageModelImageModelImageModelImagemodelImage oder in TrainingImagesTrainingImagesTrainingImagesTrainingImagestrainingImages intern die Metrik '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 ModelImageModelImageModelImageModelImagemodelImage und TrainingImagesTrainingImagesTrainingImagesTrainingImagestrainingImages 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 TrainingImagesTrainingImagesTrainingImagesTrainingImagestrainingImages gleich sein muss. Weitere Informationen können bei create_shape_modelcreate_shape_modelCreateShapeModelCreateShapeModelCreateShapeModel nachgelesen werden. Das Generieren der Formmodelle kann mit Hilfe der Parameter ContrastLowContrastLowContrastLowContrastLowcontrastLow, ContrastHighContrastHighContrastHighContrastHighcontrastHigh und MinSizeMinSizeMinSizeMinSizeminSize beeinflusst werden. Diese Parameter erfüllen dieselbe Funktion wie in gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponents und können durch die Angabe von 'auto'"auto""auto""auto""auto" auch automatisch bestimmt werden: Sollen beide Hysterese-Schwellen automatisch bestimmt werden, so müssen sowohl ContrastLowContrastLowContrastLowContrastLowcontrastLow als auch ContrastHighContrastHighContrastHighContrastHighcontrastHigh jeweils auf 'auto'"auto""auto""auto""auto" gesetzt werden. Soll dagegen lediglich ein Kontrastwert automatisch bestimmt werden, so muss ContrastLowContrastLowContrastLowContrastLowcontrastLow auf 'auto'"auto""auto""auto""auto" und ContrastHighContrastHighContrastHighContrastHighcontrastHigh auf einen beliebigen Wert ungleich 'auto'"auto""auto""auto""auto" gesetzt werden. Wurden die initialen Komponenten automatisch mit gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponents erzeugt, so sollten die Parameter ContrastLowContrastLowContrastLowContrastLowcontrastLow, ContrastHighContrastHighContrastHighContrastHighcontrastHigh und MinSizeMinSizeMinSizeMinSizeminSize mit den selben Werten besetzt werden wie in gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponents.

Zur Steuerung der Suche nach den initialen Komponenten dienen die Parameter MinScoreMinScoreMinScoreMinScoreminScore, SearchRowTolSearchRowTolSearchRowTolSearchRowTolsearchRowTol, SearchColumnTolSearchColumnTolSearchColumnTolSearchColumnTolsearchColumnTol, SearchAngleTolSearchAngleTolSearchAngleTolSearchAngleTolsearchAngleTol und TrainingEmphasisTrainingEmphasisTrainingEmphasisTrainingEmphasistrainingEmphasis. Der Parameter MinScoreMinScoreMinScoreMinScoreminScore 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 MinScoreMinScoreMinScoreMinScoreminScore 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 MinScoreMinScoreMinScoreMinScoreminScore auf so hohe Werte wie 0.8 oder sogar 0.9 gesetzt werden (siehe auch find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModel).

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 MinScoreMinScoreMinScoreMinScoreminScore 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") umgestellt werden, so dass auch Komponenten gefunden werden, die aus dem Bild herausragen, falls sie eine Bewertung größer als MinScoreMinScoreMinScoreMinScoreminScore 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 SearchRowTolSearchRowTolSearchRowTolSearchRowTolsearchRowTol und SearchColumnTolSearchColumnTolSearchColumnTolSearchColumnTolsearchColumnTol 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 SearchRowTolSearchRowTolSearchRowTolSearchRowTolsearchRowTol = 20 und für SearchColumnTolSearchColumnTolSearchColumnTolSearchColumnTolsearchColumnTol = 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 SearchAngleTolSearchAngleTolSearchAngleTolSearchAngleTolsearchAngleTol auf ±SearchAngleTolSearchAngleTolSearchAngleTolSearchAngleTolsearchAngleTol 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 ContrastLowContrastLowContrastLowContrastLowcontrastLow, ContrastHighContrastHighContrastHighContrastHighcontrastHigh, MinSizeMinSizeMinSizeMinSizeminSize, MinScoreMinScoreMinScoreMinScoreminScore, SearchRowTolSearchRowTolSearchRowTolSearchRowTolsearchRowTol, SearchColumnTolSearchColumnTolSearchColumnTolSearchColumnTolsearchColumnTol, and SearchAngleTolSearchAngleTolSearchAngleTolSearchAngleTolsearchAngleTol müssen entweder genau ein Element enthalten, oder dieselbe Anzahl wie initiale Komponenten in InitialComponentsInitialComponentsInitialComponentsInitialComponentsinitialComponents. 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 InitialComponentsInitialComponentsInitialComponentsInitialComponentsinitialComponents verwendet.

Der Parameter TrainingEmphasisTrainingEmphasisTrainingEmphasisTrainingEmphasistrainingEmphasis bietet eine weitere Möglichkeit, auf die Geschwindigkeit des Trainingsvorgangs Einfluss zu nehmen und gleichzeitig dessen Robustheit zu steuern. Wird TrainingEmphasisTrainingEmphasisTrainingEmphasisTrainingEmphasistrainingEmphasis auf '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_componentsGetTrainingComponentsGetTrainingComponentsGetTrainingComponents kontrolliert werden. Bei auftretenden Fehlzuordnungen sollte dann TrainingEmphasisTrainingEmphasisTrainingEmphasisTrainingEmphasistrainingEmphasis auf '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 AmbiguityCriterionAmbiguityCriterionAmbiguityCriterionAmbiguityCriterionambiguityCriterion gewählt werden. In fast allen Fällen liefert 'rigidity'"rigidity""rigidity""rigidity""rigidity" die besten Ergebnisse. Dabei wird von der Starrheit des zusammengesetzten Ojektes 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" 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" 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" erreicht werden. Im Gegensatz zu 'rigidity'"rigidity""rigidity""rigidity""rigidity" wird bei '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 MaxContourOverlapMaxContourOverlapMaxContourOverlapMaxContourOverlapmaxContourOverlap 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 MaxContourOverlapMaxContourOverlapMaxContourOverlapMaxContourOverlapmaxContourOverlap ist es möglich, den falschen Match zu verwerfen: Sollen überlappende Matches toleriert werden, dann sollte MaxContourOverlapMaxContourOverlapMaxContourOverlapMaxContourOverlapmaxContourOverlap auf 1 gesetzt werden. Sollen überlappende Matches vollkommen ausgeschlossen werden, dann sollte MaxContourOverlapMaxContourOverlapMaxContourOverlapMaxContourOverlapmaxContourOverlap 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 ClusterThresholdClusterThresholdClusterThresholdClusterThresholdclusterThreshold gesteuert werden. Dieser Schwellwert basiert auf der Wahrscheinlichkeit, dass zwei initiale Komponenten zur gleichen starren Modellkomponente gehören. ClusterThresholdClusterThresholdClusterThresholdClusterThresholdclusterThreshold 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 Schwellwert im Bereich von 0 bis 1 liegen. Je größer der Cluster-Schwellwert gewählt wird, desto weniger Zusammenschlüsse finden statt. Für einen Schwellwert von 0 werden all initialen Komponenten zu einer starren Kompnonente zusammengefasst, für einen Schwellwert von 1 finden keine Zusammenschlüsse statt und jede initiale Komponente wird als starre Modellkomponente übernommen.

Die endgültigen starren Modellkomponenten werden in ModelComponentsModelComponentsModelComponentsModelComponentsmodelComponents zurückgeliefert. In nachfolgenden Operatoren wird der Index einer Komponenten in ModelComponentsModelComponentsModelComponentsModelComponentsmodelComponents verwendet, um die Modellkomponente zu bezeichnen. Die Lage der gefundenen Modellkomponenten in den Trainingsbildern kann mit get_training_componentsget_training_componentsGetTrainingComponentsGetTrainingComponentsGetTrainingComponents 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 ModelComponentsModelComponentsModelComponentsModelComponentsmodelComponents zurückgeliefert wird und kann mit area_centerarea_centerAreaCenterAreaCenterAreaCenter 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_relationsGetComponentRelationsGetComponentRelationsGetComponentRelations inspiziert werden.

Ausführungsinformationen

Dieser Operator liefert ein Handle zurück. Es ist zu beachten, dass der Zustand einer Instanz dieses Handletyps durch bestimmte Operatoren geändert werden kann, obwohl das Handle als Eingabeparameter in diesen Operatoren verwendet wird.

Parameter

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

Eingabebild, aus dem die Formmodelle für die initialen Komponenten generiert werden sollen.

InitialComponentsInitialComponentsInitialComponentsInitialComponentsinitialComponents (input_object)  region-array objectHRegionHRegionHobject

Konturregionen oder umschließende Regionen der initiale Komponenten.

TrainingImagesTrainingImagesTrainingImagesTrainingImagestrainingImages (input_object)  (multichannel-)image(-array) objectHImageHImageHobject (byte / uint2)

Zum Trainieren der Modellkomponenten verwendete Trainingsbilder.

ModelComponentsModelComponentsModelComponentsModelComponentsmodelComponents (output_object)  region(-array) objectHRegionHRegionHobject *

Konturregionen der starren Modellkomponenten.

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

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

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

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

Restriktion: ContrastLow > 0

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

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

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

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

Restriktion: ContrastHigh > 0 && ContrastHigh >= ContrastLow

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

Mindestgröße zusammenhängender Konturregionen.

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

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

Restriktion: MinSize >= 0

MinScoreMinScoreMinScoreMinScoreminScore (input_control)  real(-array) HTupleHTupleHtuple (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

SearchRowTolSearchRowTolSearchRowTolSearchRowTolsearchRowTol (input_control)  integer(-array) HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Suchtoleranz in Zeilenrichtung.

Defaultwert: -1

Wertevorschläge: 0, 10, 20, 30, 50, 100

Restriktion: SearchRowTol == -1 || SearchColumnTol >= 0

SearchColumnTolSearchColumnTolSearchColumnTolSearchColumnTolsearchColumnTol (input_control)  integer(-array) HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Suchtoleranz in Spaltenrichtung.

Defaultwert: -1

Wertevorschläge: 0, 10, 20, 30, 50, 100

Restriktion: SearchColumnTol == -1 || SearchColumnTol >= 0

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

TrainingEmphasisTrainingEmphasisTrainingEmphasisTrainingEmphasistrainingEmphasis (input_control)  string HTupleHTupleHtuple (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"

Werteliste: 'reliability'"reliability""reliability""reliability""reliability", 'speed'"speed""speed""speed""speed"

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

Kriterium zur Lösung mehrdeutiger Matches der initialen Komponenten in einem Trainingsbild.

Defaultwert: 'rigidity' "rigidity" "rigidity" "rigidity" "rigidity"

Werteliste: 'distance'"distance""distance""distance""distance", 'distance_orientation'"distance_orientation""distance_orientation""distance_orientation""distance_orientation", 'orientation'"orientation""orientation""orientation""orientation", 'rigidity'"rigidity""rigidity""rigidity""rigidity"

MaxContourOverlapMaxContourOverlapMaxContourOverlapMaxContourOverlapmaxContourOverlap (input_control)  real HTupleHTupleHtuple (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

ClusterThresholdClusterThresholdClusterThresholdClusterThresholdclusterThreshold (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Schwellwert 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

ComponentTrainingIDComponentTrainingIDComponentTrainingIDComponentTrainingIDcomponentTrainingID (output_control)  component_training HComponentTraining, HTupleHTupleHtuple (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_componentsTrainModelComponentsTrainModelComponentsTrainModelComponents 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>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

gen_initial_componentsgen_initial_componentsGenInitialComponentsGenInitialComponentsGenInitialComponents

Nachfolger

inspect_clustered_componentsinspect_clustered_componentsInspectClusteredComponentsInspectClusteredComponentsInspectClusteredComponents, cluster_model_componentscluster_model_componentsClusterModelComponentsClusterModelComponentsClusterModelComponents, modify_component_relationsmodify_component_relationsModifyComponentRelationsModifyComponentRelationsModifyComponentRelations, write_training_componentswrite_training_componentsWriteTrainingComponentsWriteTrainingComponentsWriteTrainingComponents, get_training_componentsget_training_componentsGetTrainingComponentsGetTrainingComponentsGetTrainingComponents, get_component_relationsget_component_relationsGetComponentRelationsGetComponentRelationsGetComponentRelations, create_trained_component_modelcreate_trained_component_modelCreateTrainedComponentModelCreateTrainedComponentModelCreateTrainedComponentModel, clear_training_componentsclear_training_componentsClearTrainingComponentsClearTrainingComponentsClearTrainingComponents

Siehe auch

create_shape_modelcreate_shape_modelCreateShapeModelCreateShapeModelCreateShapeModel, find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModel

Modul

Matching