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 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.

Die Komponenten des Komponentenmodells ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID sind durch eine Baumstruktur repräsentiert. Die Komponente, die an der Wurzel des Baumes (Wurzelkomponente) steht, wird während der Suche im gesamten Suchraum gesucht, d.h. innerhalb aller erlaubten Position 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. Der Index der Wurzelkomponente kann in RootComponentRootComponentRootComponentRootComponentrootComponent übergeben werden. 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. Das Verhalten des Operators bei fehlendem oder stark verdecktem Wurzelobjekt kann mit IfRootNotFoundIfRootNotFoundIfRootNotFoundIfRootNotFoundifRootNotFound eingestellt werden (siehe unten). Auch die mit der Wurzelkomponente verbundene Rechenzeit während der Suche kann als Auswahlkriterium herangezogen werden. Eine nach diesem Kriterium sortierte Rangfolge der Modellkomponenten wird im Parameter RootRankingRootRankingRootRankingRootRankingrootRanking des Operators create_trained_component_modelcreate_trained_component_modelCreateTrainedComponentModelCreateTrainedComponentModelCreateTrainedComponentModel bzw. create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModel zurückgeliefert. Wird die komplette Rangfolge RootRankingRootRankingRootRankingRootRankingrootRanking in RootComponentRootComponentRootComponentRootComponentrootComponent übergeben, dann wird automatisch der erste Wert RootComponentRootComponentRootComponentRootComponentrootComponent[0] als Wurzelkomponente ausgewählt. Der Definitionsbereich des Bildes ImageImageImageImageimage gibt den Suchbereich für den Referenzpunkt, d.h. die erlaubten Position, der Wurzelkomponente an. Die Parameter AngleStartRootAngleStartRootAngleStartRootAngleStartRootangleStartRoot und AngleExtentRootAngleExtentRootAngleExtentRootAngleExtentRootangleExtentRoot legen den erlaubten Winkelbereich fest, 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. Dieser Bereich kann mit get_shape_model_paramsget_shape_model_paramsGetShapeModelParamsGetShapeModelParamsGetShapeModelParams nach Ermitteln der Handles der einzelnen Formmodelle mit get_component_model_paramsget_component_model_paramsGetComponentModelParamsGetComponentModelParamsGetComponentModelParams abgefragt werden.

Die Position und Rotation der Modellkomponenten aller gefundenen Instanzen des Komponentenmodells werden in RowCompRowCompRowCompRowComprowComp, ColumnCompColumnCompColumnCompColumnCompcolumnComp und AngleCompAngleCompAngleCompAngleCompangleComp zurückgeliefert. Die Koordinaten RowCompRowCompRowCompRowComprowComp und ColumnCompColumnCompColumnCompColumnCompcolumnComp sind die Koordinaten des Ursprungs (Referenzpunkt) der Komponente im Suchbild. Wurde das Komponentenmodell mit create_trained_component_modelcreate_trained_component_modelCreateTrainedComponentModelCreateTrainedComponentModelCreateTrainedComponentModel durch Trainieren erzeugt, dann ist der Ursprung einer Komponente der Schwerpunkt der entsprechenden vom Operator train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponents in ModelComponentsModelComponentsModelComponentsModelComponentsmodelComponents zurückgelieferten Konturregion. Wurde das Komponentenmodell dagegen mit create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModel manuell erzeugt, dann ist der Ursprung einer Komponente der Schwerpunkt der entprechenden an den Operator create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModel in ComponentRegionComponentRegionComponentRegionComponentRegioncomponentRegion übergebenen Komponentenregion. 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.

Zusätzlich wird in ScoreCompScoreCompScoreCompScoreCompscoreComp die Bewertung der gefundenen Komponenteninstanzen zurückgegeben. 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. Während ScoreCompScoreCompScoreCompScoreCompscoreComp die Bewertung der Instanzen der einzelnen Komponenten widerspiegelt, enthält ScoreScoreScoreScorescore die Bewertung der Instanzen des gesamten Komponentenmodells. Dabei enthält ScoreScoreScoreScorescore das gewichtete Mittel aus den Werten von ScoreCompScoreCompScoreCompScoreCompscoreComp der einzelnen zugehörigen Komponenten. Die Gewichtung erfolgt proportional zur Anzahl an Modellpunkten in der jeweiligen Komponente.

Um die Werte in RowCompRowCompRowCompRowComprowComp, ColumnCompColumnCompColumnCompColumnCompcolumnComp, AngleCompAngleCompAngleCompAngleCompangleComp und ScoreCompScoreCompScoreCompScoreCompscoreComp den verschieden Modellkomponenten zuordnen zu können, wird der Index der jeweiligen Modellkomponente (siehe create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModel bzw. train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponents) in ModelCompModelCompModelCompModelCompmodelComp zurückgegeben. Darüber hinaus werden die zu einer gefunden Instanz des Komponentenmodells zugehörigen Komponentenmatches in ModelStartModelStartModelStartModelStartmodelStart und ModelEndModelEndModelEndModelEndmodelEnd zurückgegeben. 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 Parameter RowCompRowCompRowCompRowComprowComp, ColumnCompColumnCompColumnCompColumnCompcolumnComp, AngleCompAngleCompAngleCompAngleCompangleComp, ScoreCompScoreCompScoreCompScoreCompscoreComp und ModelCompModelCompModelCompModelCompmodelComp. Angenommen es werden zwei Instanzen eines Komponentenmodells, das aus drei Komponenten besteht, im Bild gefunden, wobei bei einer 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], ColumnCompColumnCompColumnCompColumnCompcolumnComp = [200,210,220,400,425], AngleCompAngleCompAngleCompAngleCompangleComp = [0,0.1,-0.2,0.1,0.2,0], ScoreCompScoreCompScoreCompScoreCompscoreComp = [1,1,1,1,1], ModelCompModelCompModelCompModelCompmodelComp = [0,1,2,0,2], ModelStartModelStartModelStartModelStartmodelStart = [0,3], ModelEndModelEndModelEndModelEndmodelEnd = [2,4], ScoreScoreScoreScorescore = [1,1]. get_found_component_modelget_found_component_modelGetFoundComponentModelGetFoundComponentModelGetFoundComponentModel kann dazu verwendet werden, das Ergebnis der Suche zu visualisieren und die Matches der Komponenten einer bestimmten Instanz des Komponentenmodells zu extrahieren.

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 unten). 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.

Der Parameter MinScoreMinScoreMinScoreMinScoreminScore legt fest, welche Bewertung ein potentieller Match des Komponentenmodells mindestens besitzen muss, damit er als eine Instanz des Komponentenmodells im Bild angesehen wird. 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. Falls damit gerechnet werden muss, dass die Wurzelkomponente nicht gefunden wird und demnach IfRootNotFoundIfRootNotFoundIfRootNotFoundIfRootNotFoundifRootNotFound auf 'select_new_root'"select_new_root""select_new_root""select_new_root""select_new_root" gesetzt wird (siehe unten), dann verläuft die Suche umso schneller, je größer der Wert von MinScoreMinScoreMinScoreMinScoreminScore gewählt wird. Andernfalls hat der Wert dieses Parameters nur geringen Einfluss auf die Rechenzeit.

Mit NumMatchesNumMatchesNumMatchesNumMatchesnumMatches kann angegeben werden, wie viele Instanzen des Modells im Bild höchstens gefunden werden sollen. Falls mehr als NumMatchesNumMatchesNumMatchesNumMatchesnumMatches Instanzen eine Bewertung größer als MinScoreMinScoreMinScoreMinScoreminScore erreichen, werden nur die besten NumMatchesNumMatchesNumMatchesNumMatchesnumMatches Instanzen zurückgeliefert. Falls weniger als NumMatchesNumMatchesNumMatchesNumMatchesnumMatches Instanzen gefunden werden, werden nur diese Instanzen zurückgeliefert, d.h. der Parameter MinScoreMinScoreMinScoreMinScoreminScore hat Vorrang vor NumMatchesNumMatchesNumMatchesNumMatchesnumMatches. Sollen alle Modellinstanzen, deren Bewertung MinScoreMinScoreMinScoreMinScoreminScore übersteigt, im Bild gefunden werden, muss NumMatchesNumMatchesNumMatchesNumMatchesnumMatches auf 0 gesetzt werden.

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.

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.

In manchen Fällen kann es vorkommen, dass sich verschiedene Instanzen nur durch die Lage einer oder weniger Komponenten unterscheiden. Mit dem Parameter MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap kann bestimmt werden, um welchen Anteil, ausgedrückt als Zahl zwischen 0 und 1, sich zwei Instanzen höchstens überlappen dürfen, damit sie als verschieden angesehen werden, und somit zurückgeliefert werden. Falls sich zwei Instanzen um mehr als MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap überlappen, wird nur die beste gefundene Instanz zurückgeliefert. Die Berechnung der Überlappung erfolgt anhand der kleinsten umschließenden Rechtecke beliebiger Orientierung der Konturen der einzelnen Komponenten (siehe smallest_rectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2SmallestRectangle2). Bei MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap = 0 dürfen sich die gefundenen Instanzen nicht überlappen, bei MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlap = 1 findet keine Überprüfung der Überlappung statt und es werden alle gefundenen Instanzen zurückgeliefert.

Mit dem Parameter IfRootNotFoundIfRootNotFoundIfRootNotFoundIfRootNotFoundifRootNotFound lässt sich das Verhalten des Operators bei einem fehlenden oder stark verdeckten Wurzelobjekt beeinflussen. Die Wahl dieses Parameters wirkt sich entscheident auf die Rechenzeit aus. Falls IfRootNotFoundIfRootNotFoundIfRootNotFoundIfRootNotFoundifRootNotFound auf 'stop_search'"stop_search""stop_search""stop_search""stop_search" gesetzt wird, wird davon ausgegangen, dass die Wurzelkomponente im Bild immer gefunden wird, so dass bei Instanzen, bei denen die Wurzelkomponente nicht gefunden wurde, die Suche nach den restlichen Komponenten dieser Instanz nicht fortgesetzt werden kann. Falls IfRootNotFoundIfRootNotFoundIfRootNotFoundIfRootNotFoundifRootNotFound auf 'select_new_root'"select_new_root""select_new_root""select_new_root""select_new_root" gesetzt wird, werden sukzessive unterschiedliche Komponenten als Wurzelkomponente gewählt und im gesamten Suchraum gesucht. Die Auswahl der Wurzelkomponenten erfolgt in der Reihenfolge, die in RootRankingRootRankingRootRankingRootRankingrootRanking übergeben wurde. Die Lagen der gefundenen Instanzen aller Wurzelkomponenten werden dann dazu genutzt die rekursiven Suchen nach den übrigen Komponenten zu starten. Dadurch ist es zwar möglich, Instanzen auch dann zu finden, wenn die ursprüngliche Wurzelkomponente nicht gefunden wird, die Rechenzeit der Suche steigt allerdings im Vergleich zur Suche mit 'stop_search'"stop_search""stop_search""stop_search""stop_search" deutlich an. Die Anzahl der zu suchenden Wurzelkomponenten richtet sich nach dem in MinScoreMinScoreMinScoreMinScoreminScore übergebenen Wert. Je größer MinScoreMinScoreMinScoreMinScoreminScore gewählt wird, desto weniger Wurzelkomponenten müssen gesucht werden und desto schneller verläuft die Suche. Werden in RootComponentRootComponentRootComponentRootComponentrootComponent weniger Elemente übergeben als Wurzelkomponenten während der Suche benötigt werden, so werden die Wurzelkomponenten in der automatisch berechneten Reihenfolge ergänzt (siehe create_trained_component_modelcreate_trained_component_modelCreateTrainedComponentModelCreateTrainedComponentModelCreateTrainedComponentModel bzw. create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModel).

Mit dem Parameter IfComponentNotFoundIfComponentNotFoundIfComponentNotFoundIfComponentNotFoundifComponentNotFound lässt sich das Verhalten des Operators bei fehlenden oder stark verdeckten Komponenten, die nicht Wurzelkomponente sind, beeinflussen. Dabei geht es darum, zu entscheiden, in welcher Weise Komponenten, die relativ zur Lage einer anderen (Vorgänger-)Komponente gesucht werden müssten, behandelt werden, wenn die Vorgänger-Komponente selbst nicht gefunden wurde. Falls IfComponentNotFoundIfComponentNotFoundIfComponentNotFoundIfComponentNotFoundifComponentNotFound auf 'prune_branch'"prune_branch""prune_branch""prune_branch""prune_branch" gesetzt wird, werden solche Komponenten nicht gesucht und ebenfalls als 'nicht gefunden' eingestuft. Falls IfComponentNotFoundIfComponentNotFoundIfComponentNotFoundIfComponentNotFoundifComponentNotFound auf 'search_from_upper'"search_from_upper""search_from_upper""search_from_upper""search_from_upper" gesetzt wird, werden solche Komponenten relativ zur Lage der Vorgänger-Komponente der Vorgänger-Komponente gesucht. Falls IfComponentNotFoundIfComponentNotFoundIfComponentNotFoundIfComponentNotFoundifComponentNotFound auf 'search_from_best'"search_from_best""search_from_best""search_from_best""search_from_best" gesetzt wird, werden solche Komponenten relativ zur Lage der bereits gefundenen Komponente gesucht, von der aus die relative Suche mit dem geringsten Rechenaufwand durchgeführt werden kann.

Der Parameter PosePredictionPosePredictionPosePredictionPosePredictionposePrediction gibt an, ob die Lage von nicht gefundenen Komponenten nach der Suche geschätzt werden soll. Falls PosePredictionPosePredictionPosePredictionPosePredictionposePrediction auf 'none'"none""none""none""none" gesetzt wird, werden nur die Lagen der gefundenen Komponenten zurückgeliefert. Wird PosePredictionPosePredictionPosePredictionPosePredictionposePrediction dagegen auf 'from_neighbors'"from_neighbors""from_neighbors""from_neighbors""from_neighbors" oder auf 'from_all'"from_all""from_all""from_all""from_all" gesetzt, werden die Lagen der nicht gefundenen Komponenten geschätzt und mit einer Bewertung von ScoreCompScoreCompScoreCompScoreCompscoreComp = 0.0 zurückgeliefert. Die Schätzung der Lage erfolgt auf Grundlage der Lagen gefundener Nachbarkomponenten im Suchbaum ('from_neighbors'"from_neighbors""from_neighbors""from_neighbors""from_neighbors") oder auf Grundlage der Lagen aller gefundenen Komponenten ('from_all'"from_all""from_all""from_all""from_all").

Im Wesentlichen wird intern für die Suche der einzelnen Komponenten das formbasierte Matching verwendet (siehe find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModel). Daher ist die Bedeutung der Parameter MinScoreCompMinScoreCompMinScoreCompMinScoreCompminScoreComp, SubPixelCompSubPixelCompSubPixelCompSubPixelCompsubPixelComp, NumLevelsCompNumLevelsCompNumLevelsCompNumLevelsCompnumLevelsComp und GreedinessCompGreedinessCompGreedinessCompGreedinessCompgreedinessComp analog zur Bedeutung der entsprechenden Parameter in find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModel. Diese Parameter müssen entweder genau ein Element enthalten oder dieselbe Anzahl wie Modellkomponenten in ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID. Im ersten Fall wird der Wert des Eingabeparameters für alle Modellkomponenten gleich verwendet. Im zweiten Fall wird das jeweilige Element des Eingabeparameters für die entsprechende Komponente in ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID verwendet. NumLevelsCompNumLevelsCompNumLevelsCompNumLevelsCompnumLevelsComp kann auch zwei oder zweimal die Anzahl von Modellkomponenten enthalten. Der erste Wert spezifiziert die Anzahl an Pyramidenebenen, die während der Suche benutzt werden sollen. Der zweite Wert spezifiziert die unterste Pyramidenebene, bis auf welche die Matches verfolgt werden. Sollen für unterschiedliche Komponenten unterschiedliche Werte übergeben werden, so sind die beiden Werte verschränkt anzugeben. Falls z.B. zwei Komponenten in ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelID enthalten sind, die oberste Pyramidenebene für die erste Komponente 5 und für die zweite Komponente 4 sein soll und die unterste Pyramidenebene für die erste Komponente 2 und für die zweite 1 sein soll, so ist NumLevelsCompNumLevelsCompNumLevelsCompNumLevelsCompnumLevelsComp = [5,2,4,1] zu wählen. SubPixelCompSubPixelCompSubPixelCompSubPixelCompsubPixelComp kann neben der Subpixel-Extraktion auch einen zweiten Wert für die maximale Objektdeformation beeinhalten. Dies kann mit Hilfe des optionalen Parameterwertes 'max_deformation '"max_deformation ""max_deformation ""max_deformation ""max_deformation " und einer nachfolgenden Ganzzahl zwischen 0 und 32 (im selben String), die die maximale Deformation beschreibt, erfolgen. 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| = 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 (0: sicher aber langsam; 1: schnell aber Matches können „übersehen“ werden).

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