find_component_modelT_find_component_modelFindComponentModelFindComponentModel (Operator)

Name

find_component_modelT_find_component_modelFindComponentModelFindComponentModel — Suche der besten Matches eines Komponentenmodells in einem Bild.

Signatur

find_component_model(Image : : ComponentModelID, RootComponent, AngleStartRoot, AngleExtentRoot, MinScore, NumMatches, MaxOverlap, IfRootNotFound, IfComponentNotFound, PosePrediction, MinScoreComp, SubPixelComp, NumLevelsComp, GreedinessComp : ModelStart, ModelEnd, Score, RowComp, ColumnComp, AngleComp, ScoreComp, ModelComp)

Herror T_find_component_model(const Hobject Image, const Htuple ComponentModelID, const Htuple RootComponent, const Htuple AngleStartRoot, const Htuple AngleExtentRoot, const Htuple MinScore, const Htuple NumMatches, const Htuple MaxOverlap, const Htuple IfRootNotFound, const Htuple IfComponentNotFound, const Htuple PosePrediction, const Htuple MinScoreComp, const Htuple SubPixelComp, const Htuple NumLevelsComp, const Htuple GreedinessComp, Htuple* ModelStart, Htuple* ModelEnd, Htuple* Score, Htuple* RowComp, Htuple* ColumnComp, Htuple* AngleComp, Htuple* ScoreComp, Htuple* ModelComp)

void FindComponentModel(const HObject& Image, const HTuple& ComponentModelID, const HTuple& RootComponent, const HTuple& AngleStartRoot, const HTuple& AngleExtentRoot, const HTuple& MinScore, const HTuple& NumMatches, const HTuple& MaxOverlap, const HTuple& IfRootNotFound, const HTuple& IfComponentNotFound, const HTuple& PosePrediction, const HTuple& MinScoreComp, const HTuple& SubPixelComp, const HTuple& NumLevelsComp, const HTuple& GreedinessComp, HTuple* ModelStart, HTuple* ModelEnd, HTuple* Score, HTuple* RowComp, HTuple* ColumnComp, HTuple* AngleComp, HTuple* ScoreComp, HTuple* ModelComp)

HTuple HComponentModel::FindComponentModel(const HImage& Image, const HTuple& RootComponent, const HTuple& AngleStartRoot, const HTuple& AngleExtentRoot, double MinScore, Hlong NumMatches, double MaxOverlap, const HString& IfRootNotFound, const HString& IfComponentNotFound, const HString& PosePrediction, const HTuple& MinScoreComp, const HTuple& SubPixelComp, const HTuple& NumLevelsComp, const HTuple& GreedinessComp, HTuple* ModelEnd, HTuple* Score, HTuple* RowComp, HTuple* ColumnComp, HTuple* AngleComp, HTuple* ScoreComp, HTuple* ModelComp) const

Hlong HComponentModel::FindComponentModel(const HImage& Image, Hlong RootComponent, double AngleStartRoot, double AngleExtentRoot, double MinScore, Hlong NumMatches, double MaxOverlap, const HString& IfRootNotFound, const HString& IfComponentNotFound, const HString& PosePrediction, double MinScoreComp, const HString& SubPixelComp, Hlong NumLevelsComp, double GreedinessComp, Hlong* ModelEnd, double* Score, double* RowComp, double* ColumnComp, double* AngleComp, double* ScoreComp, Hlong* ModelComp) const

Hlong HComponentModel::FindComponentModel(const HImage& Image, Hlong RootComponent, double AngleStartRoot, double AngleExtentRoot, double MinScore, Hlong NumMatches, double MaxOverlap, const char* IfRootNotFound, const char* IfComponentNotFound, const char* PosePrediction, double MinScoreComp, const char* SubPixelComp, Hlong NumLevelsComp, double GreedinessComp, Hlong* ModelEnd, double* Score, double* RowComp, double* ColumnComp, double* AngleComp, double* ScoreComp, Hlong* ModelComp) const

Hlong HComponentModel::FindComponentModel(const HImage& Image, Hlong RootComponent, double AngleStartRoot, double AngleExtentRoot, double MinScore, Hlong NumMatches, double MaxOverlap, const wchar_t* IfRootNotFound, const wchar_t* IfComponentNotFound, const wchar_t* PosePrediction, double MinScoreComp, const wchar_t* SubPixelComp, Hlong NumLevelsComp, double GreedinessComp, Hlong* ModelEnd, double* Score, double* RowComp, double* ColumnComp, double* AngleComp, double* ScoreComp, Hlong* ModelComp) const   (Nur Windows)

HTuple HImage::FindComponentModel(const HComponentModel& ComponentModelID, const HTuple& RootComponent, const HTuple& AngleStartRoot, const HTuple& AngleExtentRoot, double MinScore, Hlong NumMatches, double MaxOverlap, const HString& IfRootNotFound, const HString& IfComponentNotFound, const HString& PosePrediction, const HTuple& MinScoreComp, const HTuple& SubPixelComp, const HTuple& NumLevelsComp, const HTuple& GreedinessComp, HTuple* ModelEnd, HTuple* Score, HTuple* RowComp, HTuple* ColumnComp, HTuple* AngleComp, HTuple* ScoreComp, HTuple* ModelComp) const

Hlong HImage::FindComponentModel(const HComponentModel& ComponentModelID, Hlong RootComponent, double AngleStartRoot, double AngleExtentRoot, double MinScore, Hlong NumMatches, double MaxOverlap, const HString& IfRootNotFound, const HString& IfComponentNotFound, const HString& PosePrediction, double MinScoreComp, const HString& SubPixelComp, Hlong NumLevelsComp, double GreedinessComp, Hlong* ModelEnd, double* Score, double* RowComp, double* ColumnComp, double* AngleComp, double* ScoreComp, Hlong* ModelComp) const

Hlong HImage::FindComponentModel(const HComponentModel& ComponentModelID, Hlong RootComponent, double AngleStartRoot, double AngleExtentRoot, double MinScore, Hlong NumMatches, double MaxOverlap, const char* IfRootNotFound, const char* IfComponentNotFound, const char* PosePrediction, double MinScoreComp, const char* SubPixelComp, Hlong NumLevelsComp, double GreedinessComp, Hlong* ModelEnd, double* Score, double* RowComp, double* ColumnComp, double* AngleComp, double* ScoreComp, Hlong* ModelComp) const

Hlong HImage::FindComponentModel(const HComponentModel& ComponentModelID, Hlong RootComponent, double AngleStartRoot, double AngleExtentRoot, double MinScore, Hlong NumMatches, double MaxOverlap, const wchar_t* IfRootNotFound, const wchar_t* IfComponentNotFound, const wchar_t* PosePrediction, double MinScoreComp, const wchar_t* SubPixelComp, Hlong NumLevelsComp, double GreedinessComp, Hlong* ModelEnd, double* Score, double* RowComp, double* ColumnComp, double* AngleComp, double* ScoreComp, Hlong* ModelComp) const   (Nur Windows)

static void HOperatorSet.FindComponentModel(HObject image, HTuple componentModelID, HTuple rootComponent, HTuple angleStartRoot, HTuple angleExtentRoot, HTuple minScore, HTuple numMatches, HTuple maxOverlap, HTuple ifRootNotFound, HTuple ifComponentNotFound, HTuple posePrediction, HTuple minScoreComp, HTuple subPixelComp, HTuple numLevelsComp, HTuple greedinessComp, out HTuple modelStart, out HTuple modelEnd, out HTuple score, out HTuple rowComp, out HTuple columnComp, out HTuple angleComp, out HTuple scoreComp, out HTuple modelComp)

HTuple HComponentModel.FindComponentModel(HImage image, HTuple rootComponent, HTuple angleStartRoot, HTuple angleExtentRoot, double minScore, int numMatches, double maxOverlap, string ifRootNotFound, string ifComponentNotFound, string posePrediction, HTuple minScoreComp, HTuple subPixelComp, HTuple numLevelsComp, HTuple greedinessComp, out HTuple modelEnd, out HTuple score, out HTuple rowComp, out HTuple columnComp, out HTuple angleComp, out HTuple scoreComp, out HTuple modelComp)

int HComponentModel.FindComponentModel(HImage image, int rootComponent, double angleStartRoot, double angleExtentRoot, double minScore, int numMatches, double maxOverlap, string ifRootNotFound, string ifComponentNotFound, string posePrediction, double minScoreComp, string subPixelComp, int numLevelsComp, double greedinessComp, out int modelEnd, out double score, out double rowComp, out double columnComp, out double angleComp, out double scoreComp, out int modelComp)

HTuple HImage.FindComponentModel(HComponentModel componentModelID, HTuple rootComponent, HTuple angleStartRoot, HTuple angleExtentRoot, double minScore, int numMatches, double maxOverlap, string ifRootNotFound, string ifComponentNotFound, string posePrediction, HTuple minScoreComp, HTuple subPixelComp, HTuple numLevelsComp, HTuple greedinessComp, out HTuple modelEnd, out HTuple score, out HTuple rowComp, out HTuple columnComp, out HTuple angleComp, out HTuple scoreComp, out HTuple modelComp)

int HImage.FindComponentModel(HComponentModel componentModelID, int rootComponent, double angleStartRoot, double angleExtentRoot, double minScore, int numMatches, double maxOverlap, string ifRootNotFound, string ifComponentNotFound, string posePrediction, double minScoreComp, string subPixelComp, int numLevelsComp, double greedinessComp, out int modelEnd, out double score, out double rowComp, out double columnComp, out double angleComp, out double scoreComp, out int modelComp)

Beschreibung

find_component_modelfind_component_modelFindComponentModelFindComponentModelFindComponentModel findet die besten NumMatchesNumMatchesNumMatchesNumMatchesnumMatches Instanzen des Komponentenmodells ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID im Eingabebild ImageImageImageImageimage.

Das Ergebnis der Suche kann mit get_found_component_modelget_found_component_modelGetFoundComponentModelGetFoundComponentModelGetFoundComponentModel visualisiert werden. Ebenso können damit die Matches der Komponenten einer bestimmten Instanz extrahiert werden.

Weitere Informationen zu Eingabeparametern

ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID:

Handle des Komponentenmodells.

Das Modell muss zuvor mit create_trained_component_modelcreate_trained_component_modelCreateTrainedComponentModelCreateTrainedComponentModelCreateTrainedComponentModel oder create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModel erzeugt oder mit read_component_modelread_component_modelReadComponentModelReadComponentModelReadComponentModel eingelesen worden sein.

RootComponentRootComponentRootComponentRootComponentrootComponent:

Index der Wurzelkomponente.

Die Komponenten des Komponentenmodells ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID sind durch eine Baumstruktur repräsentiert. Die Wurzelkomponente steht an der Wurzel des Baumes.

Die Wurzelkomponente wird während der Suche im gesamten Suchraum gesucht, d.h. innerhalb aller erlaubten Positionen und Orientierungen. Die übrigen Komponenten werden dagegen jeweils relativ zur Lage ihres Vorgängers im Baum in einem eingeschränkten Suchraum gesucht (rekursive Suche). Die eingeschränkten Suchräume werden dabei aus den entsprechenden Relationen berechnet.

Inwiefern sich eine Modellkomponente als Wurzelkomponente eignet, hängt von verschiedenen Faktoren ab. Prinzipiell sollte eine Modellkomponente gewählt werden, die mit hoher Wahrscheinlichkeit im Bild wiedergefunden werden kann. Eine im Bild stark verdeckte oder fehlende Komponente eignet sind daher nur bedingt als Wurzelkomponente. Für Verhalten des Operators in solchen Fällen, siehe den Eintrag zu IfRootNotFoundIfRootNotFoundIfRootNotFoundIfRootNotFoundifRootNotFound weiter unten.

Ein anderes mögliches Auswahlkriterium ist die mit der Wurzelkomponente verbundene Rechenzeit während der Suche. Eine entsprechende Rangfolge der Modellkomponenten wird über den Parameter RootRankingRootRankingRootRankingRootRankingrootRanking des Operators create_trained_component_modelcreate_trained_component_modelCreateTrainedComponentModelCreateTrainedComponentModelCreateTrainedComponentModel bzw. create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModel zurückgegeben. Wird die komplette Rangfolge RootRankingRootRankingRootRankingRootRankingrootRanking in RootComponentRootComponentRootComponentRootComponentrootComponent übergeben, dann wird der erste Wert RootComponentRootComponentRootComponentRootComponentrootComponent[0] als Wurzelkomponente ausgewählt.

AngleStartRootAngleStartRootAngleStartRootAngleStartRootangleStartRoot und AngleExtentRootAngleExtentRootAngleExtentRootAngleExtentRootangleExtentRoot:

Legen den erlaubten Winkelbereich fest (in [rad]), in dem nach der Wurzelkomponente gesucht wird.

Der Winkelbereich wird gegebenenfalls auf den Bereich beschnitten, der bei der Erzeugung des Komponentenmodells mit create_trained_component_modelcreate_trained_component_modelCreateTrainedComponentModelCreateTrainedComponentModelCreateTrainedComponentModel bzw. create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModel festgelegt worden ist. Der Winkelbereich kann für die einzelnen Formmodelle mit get_shape_model_paramsget_shape_model_paramsGetShapeModelParamsGetShapeModelParamsGetShapeModelParams abgefragt werden. Das dazu notwendige Handle des entsprechenden Formmodells kann mit get_component_model_paramsget_component_model_paramsGetComponentModelParamsGetComponentModelParamsGetComponentModelParams erhalten werden.

MinScoreMinScoreMinScoreMinScoreminScore:

Minimale Bewertung, die ein potentieller Match des Komoponentenmodells erhalten muss um als Instanz zu zählen.

Falls erwartet werden kann, dass das Komponentenmodell niemals verdeckt wird, kann MinScoreMinScoreMinScoreMinScoreminScore auf so hohe Werte wie 0.8 oder sogar 0.9 gesetzt werden. Der Wert dieses Parameters nur geringen Einfluss auf die Rechenzeit. Ausnahme ist im Fall IfRootNotFoundIfRootNotFoundIfRootNotFoundIfRootNotFoundifRootNotFound auf 'select_new_root'"select_new_root""select_new_root""select_new_root""select_new_root", siehe unten.

NumMatchesNumMatchesNumMatchesNumMatchesnumMatches:

Bestimmt die maximale Anzahl zurückgegebener Instanzen.

Werden weniger Instanzen als NumMatchesNumMatchesNumMatchesNumMatchesnumMatches gefunden, werden nur diese Instanzen zurückgeliefert, d.h. der Parameter MinScoreMinScoreMinScoreMinScoreminScore hat höhere Priorität.

Werden mehr Instanzen als NumMatchesNumMatchesNumMatchesNumMatchesnumMatches mit einer Bewertung besser MinScoreMinScoreMinScoreMinScoreminScore gefunden, werden nur die besten NumMatchesNumMatchesNumMatchesNumMatchesnumMatches Instanzen zurückgeliefert. Sollen jedoch alle Modellinstanzen, deren Bewertung MinScoreMinScoreMinScoreMinScoreminScore übersteigt, im Bild gefunden werden, muss NumMatchesNumMatchesNumMatchesNumMatchesnumMatches auf 0 gesetzt werden.

MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap:

Bestimmt die maximal erlaubte Überlappung zweier Instanzen, wobei dieser Anteil als Zahl zwischen 0 und 1 ausgedrücket wird.

In manchen Fällen kann es vorkommen, dass sich verschiedene Instanzen nur durch die Lage einer oder weniger Komponenten unterscheiden. Überlappen sich zwei Instanzen um mehr als MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap, wird nur die bessere zurückgeliefert. Dies bedeutet, bei MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap = 0 werden nur Instanzen zurückgeliefert die sich überhaupt nicht überlappen, während bei MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap = 1 keine Überprüfung der Überlappung stattfindet und alle gefundenen Instanzen zurückgeliefert werden. Die Berechnung der Überlappung erfolgt anhand der kleinsten umschließenden Rechtecke beliebiger Orientierung der Konturen der einzelnen Komponenten (siehe smallest_rectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2SmallestRectangle2).

IfRootNotFoundIfRootNotFoundIfRootNotFoundIfRootNotFoundifRootNotFound:

Steuert das Verhalten des Operators bei einem fehlenden oder stark verdeckten Wurzelobjekt.

Mögliche Werte:

IfComponentNotFoundIfComponentNotFoundIfComponentNotFoundIfComponentNotFoundifComponentNotFound:

Bestimmt inwiefern Komponenten gesucht werden, wenn die Vorgänger-Komponente selbst nicht gefunden wurde (z.B. weil sie fehlt oder stark verdeckt ist).

Mögliche Werte:

PosePredictionPosePredictionPosePredictionPosePredictionposePrediction:

Gibt an, ob die Lage von nicht gefundenen Komponenten nach der Suche geschätzt werden soll.

Mögliche Werte:

MinScoreCompMinScoreCompMinScoreCompMinScoreCompminScoreComp:

Minimale notwendige Bewertung der Komponenten einer zu findenden Instanz.

Dieser Parameter verhält sich analog zu MinScoreMinScoreMinScoreMinScoreminScore in find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModel.

Setzbar sind genau ein Wert oder dieselbe Anzahl Werte wie Modellkomponenten in ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID. Im ersten Fall wird der Wert des Eingabeparameters für alle Modellkomponenten verwendet. Im zweiten Fall wird das jeweilige Element des Eingabeparameters für die entsprechende Komponente in ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID verwendet.

SubPixelCompSubPixelCompSubPixelCompSubPixelCompsubPixelComp:

Bestimmt, ob die Extraktion subpixelgenau erfolgen soll und in gegebenem Fall die maximal zulässige Objektdeformation in Pixeln.

Dieser Parameter verhält sich analog zu SubPixelSubPixelSubPixelSubPixelsubPixel in find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModel. Somit ist die maximale Objektdeformation im gleichen String als Ganzzahl anzugeben.

Setzbar sind genau ein Wert oder dieselbe Anzahl Werte wie Modellkomponenten in ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID. Im ersten Fall wird der Wert des Eingabeparameters für alle Modellkomponenten verwendet. Im zweiten Fall wird das jeweilige Element des Eingabeparameters für die entsprechende Komponente in ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID verwendet.

Beispiel: ['least_squares', 'max_deformation 2']["least_squares", "max_deformation 2"]["least_squares", "max_deformation 2"]["least_squares", "max_deformation 2"]["least_squares", "max_deformation 2"].

NumLevelsCompNumLevelsCompNumLevelsCompNumLevelsCompnumLevelsComp:

Bestimmt die verwendeten Pyramidenebenen für die Modellkomponenten.

Dieser Parameter verhält sich analog zu NumLevelsNumLevelsNumLevelsNumLevelsnumLevels in find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModel.

Er bestimmt die Anzahl der verwendeten Pyramidenebenen, die während der Suche benutzt werden. Setzbar sind genau ein Wert oder dieselbe Anzahl Werte wie Modellkomponenten in ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID. Im ersten Fall wird der Wert des Eingabeparameters für alle Modellkomponenten verwendet. Im zweiten Fall wird das jeweilige Element des Eingabeparameters für die entsprechende Komponente in ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID verwendet.

Optional kann man für diesen Parameter auch Wertepaare setzen: Dann spezifiziert der erste Wert weiterhin die Anzahl an zu verwendende Pyramidenebenen. Der zweite Wert spezifiziert die unterste Pyramidenebene, bis auf welche die Matches verfolgt werden. Dabei kann man ein einzelnes Wertepaar für alle Komponenten angeben oder für jede Komponente in ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID ein eigenes. Sollen für unterschiedliche Komponenten unterschiedliche Wertepaare berücksichtigt werden, so sind diese im selben Tupel anzugeben.

Enthält ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID genau zwei Komponenten und NumLevelsCompNumLevelsCompNumLevelsCompNumLevelsCompnumLevelsComp zwei gesetzte Werte, so werden diese Werte als jeweilige Anzahl zu verwendende Pyramidenebenen aufgefasst und nicht als Wertepaar.

Beispiel: In ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID sind zwei Komponenten enthalten, für welche unterschiedliche Pyramidenebenen verwendet werden sollen. Für die erste Komponente sollen 5 Pyramidenebenen verwendet werden, mit Ebene 2 als der untersten. Für die zweite Komponente sollen 4 Pyramidenebenen verwendet werden, mit Ebene 1 als der untersten. Dann ist NumLevelsCompNumLevelsCompNumLevelsCompNumLevelsCompnumLevelsComp = [5,2,4,1].

GreedinessCompGreedinessCompGreedinessCompGreedinessCompgreedinessComp:

„Gierigkeit“ der Suchheuristik für die Komponenten: Wert von 0 bis 1. Dabei bedeutet 0: sicher aber langsam, 1: schnell aber Matches können „übersehen“ werden.

Dieser Parameter verhält sich analog zu GreedinessGreedinessGreedinessGreedinessgreediness in find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModel.

Setzbar sind genau ein Wert oder dieselbe Anzahl Werte wie Modellkomponenten in ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID. Im ersten Fall wird der Wert des Eingabeparameters für alle Modellkomponenten verwendet. Im zweiten Fall wird das jeweilige Element des Eingabeparameters für die entsprechende Komponente in ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID verwendet.

Weitere Informationen zu Ausgabeparametern

ModelStartModelStartModelStartModelStartmodelStart und ModelEndModelEndModelEndModelEndmodelEnd:

Geben den ersten, respektive letzten Index und damit den Indexbereich all jener Komponentenmatches die zur selben gefundenen Instanz des Komponentenmodells gehören

Die Komponentenmatches, die zur ersten gefundenen Instanz des Komponentenmodells gehören, werden somit durch das Intervall an Indizes [ModelStartModelStartModelStartModelStartmodelStart[0],ModelEndModelEndModelEndModelEndmodelEnd[0]] beschrieben. Dabei beziehen sich die Indizes auf die Werte der Parameter RowCompRowCompRowCompRowComprowComp, ColumnCompColumnCompColumnCompColumnCompcolumnComp, AngleCompAngleCompAngleCompAngleCompangleComp, ScoreCompScoreCompScoreCompScoreCompscoreComp und ModelCompModelCompModelCompModelCompmodelComp.

Beispiel: Das Komponentenmodell besteht aus drei Komponenten. Auf dem Bild werden zwei Instanzen gefunden, wobei für die zweite Instanz lediglich zwei Komponenten (Komponente 0 und Komponente 2) gefunden werden konnten. Dann könnten die zurückgegebenen Parameter wie folgt aussehen:
RowCompRowCompRowCompRowComprowComp = [100,200,300,150,250] ModelStartModelStartModelStartModelStartmodelStart = [0,3]
ColumnCompColumnCompColumnCompColumnCompcolumnComp = [200,210,220,400,425] ModelEndModelEndModelEndModelEndmodelEnd = [2,4]
AngleCompAngleCompAngleCompAngleCompangleComp = [0,0.1,-0.2,0.1,0.2] ModelCompModelCompModelCompModelCompmodelComp = [0,1,2,0,2]
ScoreCompScoreCompScoreCompScoreCompscoreComp = [1,1,1,1,1] ScoreScoreScoreScorescore = [1,1]
Aus der rechten Spalte ersichtlich, dass in der linken Spalte:
ScoreScoreScoreScorescore:

Bewertung der Instanzen des gesamten Komponentenmodells.

ScoreScoreScoreScorescore ist das gewichtete Mittel der einzelnen Komponentenbewertungen, den Werten in ScoreCompScoreCompScoreCompScoreCompscoreComp. Dabei erfolgt die Gewichtung proportional zur Anzahl an Modellpunkten in der jeweiligen Komponente.

RowCompRowCompRowCompRowComprowComp, ColumnCompColumnCompColumnCompColumnCompcolumnComp und AngleCompAngleCompAngleCompAngleCompangleComp:

Positionen (RowCompRowCompRowCompRowComprowComp, ColumnCompColumnCompColumnCompColumnCompcolumnComp) und Rotationen (AngleCompAngleCompAngleCompAngleCompangleComp) der Modellkomponenten aller gefundenen Instanzen des Komponentenmodells.

Die Koordinaten RowCompRowCompRowCompRowComprowComp und ColumnCompColumnCompColumnCompColumnCompcolumnComp sind die Koordinaten des Komponenten-Ursprungs (Referenzpunkts) im Suchbild. Der Komponenten-Ursprung hängt davon ab, wie das Modell erzeugt wurde:

Da sich die Relationen zwischen den Komponenten in ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID auf diesen Schwerpunkt beziehen, darf der Ursprung einer Komponente nicht mit set_shape_model_originset_shape_model_originSetShapeModelOriginSetShapeModelOriginSetShapeModelOrigin verändert werden.

ScoreCompScoreCompScoreCompScoreCompscoreComp:

Bewertung der gefundenen Komponenteninstanzen.

Die Bewertung ist eine Zahl zwischen 0 und 1 und ist ein ungefähres Maß dafür, welcher Anteil der Komponente im Bild zu sehen ist. Falls z.B. die Hälfte der Komponente im Bild verdeckt ist, kann die Bewertung nicht größer als 0.5 sein.

ModelCompModelCompModelCompModelCompmodelComp:

Index der gefundenen Komponenten.

Das Tupel enthält die Indizes der jeweiligen gefundenen Modellkomponenten (siehe create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModel bzw. train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponents). Damit können die Werte in RowCompRowCompRowCompRowComprowComp, ColumnCompColumnCompColumnCompColumnCompcolumnComp, AngleCompAngleCompAngleCompAngleCompangleComp und ScoreCompScoreCompScoreCompScoreCompscoreComp den verschieden Modellkomponenten zugeordnet werden. Siehe auch das Beispiel bei ModelStartModelStartModelStartModelStartmodelStart und ModelEndModelEndModelEndModelEndmodelEnd.

Informationen zum Suchverlauf

Im Wesentlichen wird intern für die Suche der einzelnen Komponenten das formbasierte Matching verwendet (siehe find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModel).

Der Definitionsbereich des Bildes ImageImageImageImageimage gibt den Suchbereich für den Referenzpunkt, d.h. die erlaubte Position, der Wurzelkomponente an.

Im Normalfall wird das Komponentenmodell innerhalb des Definitionsbereiches des Eingabebildes nur an den Stellen gesucht, an denen das Modell vollständig in das Bild passt. Das bedeutet, dass die Komponenten nicht gefunden werden können, wenn sie aus dem Bild herausragen, selbst wenn sie eine Bewertung größer als MinScoreCompMinScoreCompMinScoreCompMinScoreCompminScoreComp erreichen würden (siehe oben).

Außerdem kann es sein, dass das Komponentenmodell, wenn es in einer der Pyramidenebenen den Bildrand berührt, ebenfalls nicht gefunden wird, auch wenn es im ursprünglichen Bild vollständig enthalten ist. Als Daumenregel gilt hier, dass das Modell dann nicht gefunden werden könnte, wenn seine Distanz zum Bildrand unter fällt. 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 MinScoreCompMinScoreCompMinScoreCompMinScoreCompminScoreComp 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 der Suche erhöht.

Es ist weiter zu beachten, dass in seltenen Fällen, die typischerweise nur in künstlichen Bildern auftreten, auch dann kein Modell gefunden wird, wenn das Modell in einer Pyramidenebene die reduzierte Bilddomäne berührt. In diesem Fall kann es helfen, die Region der Domäne um , z.B., mit dilation_circledilation_circleDilationCircleDilationCircleDilationCircle zu vergrößern.

Beim Tracken der Matches durch die Bildpyramide werden auf jeder Ebene Matches verworfen, die wenig vielversprechend sind. Dadurch ist es möglich, dass Matches verworfen werden, die auf der niedrigsten Pyramidenebene einen höheren Score gehabt hätten. Beispielsweise kann das dazu führen, dass der gefundene Match für NumMatchesNumMatchesNumMatchesNumMatchesnumMatches gleich 1 nicht mit dem Match mit dem höchsten Score übereinstimmt, der von NumMatchesNumMatchesNumMatchesNumMatchesnumMatches gleich 0 oder > 1 zurückgegeben wird.

Empfehlungen

Falls erwartet wird, dass mehrere Objekte mit einem ähnlichen Score gefunden werden können, aber nur das Modell mit dem höchsten Score zurückgegeben werden soll, kann es vorteilhaft sein, NumMatchesNumMatchesNumMatchesNumMatchesnumMatches zu erhöhen, und dann den Match mit dem höchsten Score auszuwählen.

Für einen aussagekräftigen Score und zum Vermeiden falscher Matches wird empfohlen, das Erlauben einer Deformation mit einer Subpixel-Extraktion mit einer der Least-Squares-Adjustment-Methoden zu kombinieren. Falls die Subpixel-Extraktion und/oder die maximale Objektdeformation für jede Komponente einzeln spezifiziert werden sollen, muss in SubPixelCompSubPixelCompSubPixelCompSubPixelCompsubPixelComp die Subpixel-Extraktion genauso oft angegeben werden, wie die Anzahl an Modellkomponenten in ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID. Nach jedem übergebenen Wert für die Subpixel-Extraktion kann optional ein zweiter Wert übergeben werden, der die maximale Objektdeformation für die jeweilige Komponente beschreibt. Wird nach dem Wert für die Subpixel-Extraktion kein Wert für die Objektdeformation übergeben, wird die entsprechende Komponente ohne Deformation gesucht. Weitere Details sind in der Dokumentation von find_shape_modelsfind_shape_modelsFindShapeModelsFindShapeModelsFindShapeModels zu finden.

Ausführungsinformationen

Parameter

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

Eingabebild, in dem das Komponentenmodell gefunden werden soll.

ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID (input_control)  component_model HComponentModel, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des Komponentenmodells.

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

Index der Wurzelkomponente.

Wertevorschläge: 0, 1, 2, 3, 4, 5, 6, 7, 8

AngleStartRootAngleStartRootAngleStartRootAngleStartRootangleStartRoot (input_control)  angle.rad(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Kleinste auftretende Rotation der Wurzelkomponente

Defaultwert: -0.39

Wertevorschläge: -3.14, -1.57, -0.79, -0.39, -0.20, 0.0

AngleExtentRootAngleExtentRootAngleExtentRootAngleExtentRootangleExtentRoot (input_control)  angle.rad(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Ausdehnung des Winkelbereichs.

Defaultwert: 0.79

Wertevorschläge: 6.28, 3.14, 1.57, 0.79, 0.39, 0.0

Restriktion: AngleExtentRoot >= 0

MinScoreMinScoreMinScoreMinScoreminScore (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Minimale Bewertung der zu findenden Instanzen des Komponentenmodells.

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

NumMatchesNumMatchesNumMatchesNumMatchesnumMatches (input_control)  integer HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Anzahl der zu findenden Instanzen des Komponentenmodells (oder 0 für alle Treffer).

Defaultwert: 1

Wertevorschläge: 0, 1, 2, 3, 4, 5, 10, 20

MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Maximale Überlappung der zu findenden Instanzen des Komponentenmodells.

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

Minimale Schrittweite: 0.01

Empfohlene Schrittweite: 0.05

Restriktion: 0 <= MaxOverlap && MaxOverlap <= 1

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

Verhalten bei fehlender Wurzelkomponente.

Defaultwert: 'stop_search' "stop_search" "stop_search" "stop_search" "stop_search"

Werteliste: 'select_new_root'"select_new_root""select_new_root""select_new_root""select_new_root", 'stop_search'"stop_search""stop_search""stop_search""stop_search"

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

Verhalten bei fehlenden Komponenten.

Defaultwert: 'prune_branch' "prune_branch" "prune_branch" "prune_branch" "prune_branch"

Werteliste: 'prune_branch'"prune_branch""prune_branch""prune_branch""prune_branch", 'search_from_best'"search_from_best""search_from_best""search_from_best""search_from_best", 'search_from_upper'"search_from_upper""search_from_upper""search_from_upper""search_from_upper"

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

Schätzung der Lagen nicht gefundener Komponenten.

Defaultwert: 'none' "none" "none" "none" "none"

Werteliste: 'from_all'"from_all""from_all""from_all""from_all", 'from_neighbors'"from_neighbors""from_neighbors""from_neighbors""from_neighbors", 'none'"none""none""none""none"

MinScoreCompMinScoreCompMinScoreCompMinScoreCompminScoreComp (input_control)  real(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Minimale Bewertung der zu findenden Instanzen der 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 <= MinScoreComp && MinScoreComp <= 1

SubPixelCompSubPixelCompSubPixelCompSubPixelCompsubPixelComp (input_control)  string(-array) HTupleHTupleHtuple (string) (string) (HString) (char*)

Subpixelgenauigkeit der Komponentenlagen falls ungleich 'none'"none""none""none""none".

Defaultwert: 'least_squares' "least_squares" "least_squares" "least_squares" "least_squares"

Wertevorschläge: 'none'"none""none""none""none", 'interpolation'"interpolation""interpolation""interpolation""interpolation", 'least_squares'"least_squares""least_squares""least_squares""least_squares", 'least_squares_high'"least_squares_high""least_squares_high""least_squares_high""least_squares_high", 'least_squares_very_high'"least_squares_very_high""least_squares_very_high""least_squares_very_high""least_squares_very_high", 'max_deformation 1'"max_deformation 1""max_deformation 1""max_deformation 1""max_deformation 1", 'max_deformation 2'"max_deformation 2""max_deformation 2""max_deformation 2""max_deformation 2", 'max_deformation 3'"max_deformation 3""max_deformation 3""max_deformation 3""max_deformation 3", 'max_deformation 4'"max_deformation 4""max_deformation 4""max_deformation 4""max_deformation 4", 'max_deformation 5'"max_deformation 5""max_deformation 5""max_deformation 5""max_deformation 5", 'max_deformation 6'"max_deformation 6""max_deformation 6""max_deformation 6""max_deformation 6"

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

Anzahl der verwendeten Pyramidenebenen für die Komponenten (und unterste zu verwendende Pyramidenebene falls |NumLevelsCompNumLevelsCompNumLevelsCompNumLevelsCompnumLevelsComp| = 2 oder 2n).

Defaultwert: 0

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

GreedinessCompGreedinessCompGreedinessCompGreedinessCompgreedinessComp (input_control)  real(-array) HTupleHTupleHtuple (real) (double) (double) (double)

„Gierigkeit“ der Suchheuristik für die Komponenten.

Defaultwert: 0.9

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 <= GreedinessComp && GreedinessComp <= 1

ModelStartModelStartModelStartModelStartmodelStart (output_control)  integer(-array) HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Startindex jeder gefundenen Instanz des Komponentenmodells auf die Tupel, die die Komponentenmatches beschreiben.

ModelEndModelEndModelEndModelEndmodelEnd (output_control)  integer(-array) HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Endindex jeder gefundenen Instanz des Komponentenmodells auf die Tupel, die die Komponentenmatches beschreiben.

ScoreScoreScoreScorescore (output_control)  real(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Bewertung der gefunden Instanzen des Komponentenmodells.

RowCompRowCompRowCompRowComprowComp (output_control)  point.y(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Zeilenkoordinate der gefundenen Komponentenmatches.

ColumnCompColumnCompColumnCompColumnCompcolumnComp (output_control)  point.x(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Spaltenkoordinate der gefundenen Komponentenmatches.

AngleCompAngleCompAngleCompAngleCompangleComp (output_control)  angle.rad(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Rotationswinkel der gefundenen Komponentenmatches.

ScoreCompScoreCompScoreCompScoreCompscoreComp (output_control)  real(-array) HTupleHTupleHtuple (real) (double) (double) (double)

Bewertung der gefundenen Komponentenmatches.

ModelCompModelCompModelCompModelCompmodelComp (output_control)  integer(-array) HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Index der gefundenen Komponenten.

Ergebnis

Sind die Parameterwerte korrekt, dann liefert find_component_modelfind_component_modelFindComponentModelFindComponentModelFindComponentModel den Wert 2 (H_MSG_TRUE). Das Verhalten bei leerer Eingabe (keine Eingabebild 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

create_trained_component_modelcreate_trained_component_modelCreateTrainedComponentModelCreateTrainedComponentModelCreateTrainedComponentModel, create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModel, read_component_modelread_component_modelReadComponentModelReadComponentModelReadComponentModel

Nachfolger

get_found_component_modelget_found_component_modelGetFoundComponentModelGetFoundComponentModelGetFoundComponentModel

Alternativen

find_shape_modelsfind_shape_modelsFindShapeModelsFindShapeModelsFindShapeModels

Siehe auch

find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModel, find_shape_modelsfind_shape_modelsFindShapeModelsFindShapeModelsFindShapeModels, get_shape_model_paramsget_shape_model_paramsGetShapeModelParamsGetShapeModelParamsGetShapeModelParams, get_component_model_paramsget_component_model_paramsGetComponentModelParamsGetComponentModelParamsGetComponentModelParams, train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponents, set_shape_model_originset_shape_model_originSetShapeModelOriginSetShapeModelOriginSetShapeModelOrigin, smallest_rectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2SmallestRectangle2

Modul

Matching