find_component_modelT_find_component_modelFindComponentModelFindComponentModelfind_component_model (Operator)

Name

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

def find_component_model(image: HObject, component_model_id: HHandle, root_component: MaybeSequence[int], angle_start_root: MaybeSequence[float], angle_extent_root: MaybeSequence[float], min_score: float, num_matches: int, max_overlap: float, if_root_not_found: str, if_component_not_found: str, pose_prediction: str, min_score_comp: MaybeSequence[float], sub_pixel_comp: MaybeSequence[str], num_levels_comp: MaybeSequence[int], greediness_comp: MaybeSequence[float]) -> Tuple[Sequence[int], Sequence[int], Sequence[float], Sequence[float], Sequence[float], Sequence[float], Sequence[float], Sequence[int]]

def find_component_model_s(image: HObject, component_model_id: HHandle, root_component: MaybeSequence[int], angle_start_root: MaybeSequence[float], angle_extent_root: MaybeSequence[float], min_score: float, num_matches: int, max_overlap: float, if_root_not_found: str, if_component_not_found: str, pose_prediction: str, min_score_comp: MaybeSequence[float], sub_pixel_comp: MaybeSequence[str], num_levels_comp: MaybeSequence[int], greediness_comp: MaybeSequence[float]) -> Tuple[int, int, float, float, float, float, float, int]

Beschreibung

find_component_modelfind_component_modelFindComponentModelFindComponentModelFindComponentModelfind_component_model findet die besten NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches Instanzen des Komponentenmodells ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelIDcomponent_model_id im Eingabebild ImageImageImageImageimageimage.

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

Weitere Informationen zu Eingabeparametern

ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelIDcomponent_model_id:

Handle des Komponentenmodells.

Das Modell muss zuvor mit create_trained_component_modelcreate_trained_component_modelCreateTrainedComponentModelCreateTrainedComponentModelCreateTrainedComponentModelcreate_trained_component_model oder create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModelcreate_component_model erzeugt oder mit read_component_modelread_component_modelReadComponentModelReadComponentModelReadComponentModelread_component_model eingelesen worden sein.

RootComponentRootComponentRootComponentRootComponentrootComponentroot_component:

Index der Wurzelkomponente.

Die Komponenten des Komponentenmodells ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelIDcomponent_model_id 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 IfRootNotFoundIfRootNotFoundIfRootNotFoundIfRootNotFoundifRootNotFoundif_root_not_found 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 RootRankingRootRankingRootRankingRootRankingrootRankingroot_ranking des Operators create_trained_component_modelcreate_trained_component_modelCreateTrainedComponentModelCreateTrainedComponentModelCreateTrainedComponentModelcreate_trained_component_model bzw. create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModelcreate_component_model zurückgegeben. Wird die komplette Rangfolge RootRankingRootRankingRootRankingRootRankingrootRankingroot_ranking in RootComponentRootComponentRootComponentRootComponentrootComponentroot_component übergeben, dann wird der erste Wert RootComponentRootComponentRootComponentRootComponentrootComponentroot_component[0] als Wurzelkomponente ausgewählt.

AngleStartRootAngleStartRootAngleStartRootAngleStartRootangleStartRootangle_start_root und AngleExtentRootAngleExtentRootAngleExtentRootAngleExtentRootangleExtentRootangle_extent_root:

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_modelCreateTrainedComponentModelCreateTrainedComponentModelCreateTrainedComponentModelcreate_trained_component_model bzw. create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModelcreate_component_model festgelegt worden ist. Der Winkelbereich kann für die einzelnen Formmodelle mit get_shape_model_paramsget_shape_model_paramsGetShapeModelParamsGetShapeModelParamsGetShapeModelParamsget_shape_model_params abgefragt werden. Das dazu notwendige Handle des entsprechenden Formmodells kann mit get_component_model_paramsget_component_model_paramsGetComponentModelParamsGetComponentModelParamsGetComponentModelParamsget_component_model_params erhalten werden.

MinScoreMinScoreMinScoreMinScoreminScoremin_score:

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 MinScoreMinScoreMinScoreMinScoreminScoremin_score 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 IfRootNotFoundIfRootNotFoundIfRootNotFoundIfRootNotFoundifRootNotFoundif_root_not_found auf 'select_new_root'"select_new_root""select_new_root""select_new_root""select_new_root""select_new_root", siehe unten.

NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches:

Bestimmt die maximale Anzahl zurückgegebener Instanzen.

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

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

MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlapmax_overlap:

Bestimmt die maximal erlaubte Überlappung zweier Instanzen, wobei dieser Anteil als Zahl zwischen 0 und 1 ausgedrückt 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 MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlapmax_overlap, wird nur die bessere zurückgeliefert. Dies bedeutet, bei MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlapmax_overlap = 0 werden nur Instanzen zurückgeliefert die sich überhaupt nicht überlappen, während bei MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlapmax_overlap = 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_rectangle2SmallestRectangle2SmallestRectangle2SmallestRectangle2smallest_rectangle2).

IfRootNotFoundIfRootNotFoundIfRootNotFoundIfRootNotFoundifRootNotFoundif_root_not_found:

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

Mögliche Werte:

IfComponentNotFoundIfComponentNotFoundIfComponentNotFoundIfComponentNotFoundifComponentNotFoundif_component_not_found:

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:

PosePredictionPosePredictionPosePredictionPosePredictionposePredictionpose_prediction:

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

Mögliche Werte:

MinScoreCompMinScoreCompMinScoreCompMinScoreCompminScoreCompmin_score_comp:

Minimale notwendige Bewertung der Komponenten einer zu findenden Instanz.

Dieser Parameter verhält sich analog zu MinScoreMinScoreMinScoreMinScoreminScoremin_score in find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModelfind_shape_model.

Setzbar sind genau ein Wert oder dieselbe Anzahl Werte wie Modellkomponenten in ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelIDcomponent_model_id. 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 ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelIDcomponent_model_id verwendet.

SubPixelCompSubPixelCompSubPixelCompSubPixelCompsubPixelCompsub_pixel_comp:

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 SubPixelSubPixelSubPixelSubPixelsubPixelsub_pixel in find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModelfind_shape_model. Somit ist die maximale Objektdeformation im gleichen String als Ganzzahl anzugeben.

Setzbar sind genau ein Wert oder dieselbe Anzahl Werte wie Modellkomponenten in ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelIDcomponent_model_id. 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 ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelIDcomponent_model_id 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"]["least_squares", "max_deformation 2"].

NumLevelsCompNumLevelsCompNumLevelsCompNumLevelsCompnumLevelsCompnum_levels_comp:

Bestimmt die verwendeten Pyramidenebenen für die Modellkomponenten.

Dieser Parameter verhält sich analog zu NumLevelsNumLevelsNumLevelsNumLevelsnumLevelsnum_levels in find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModelfind_shape_model.

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 ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelIDcomponent_model_id. 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 ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelIDcomponent_model_id 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 ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelIDcomponent_model_id ein eigenes. Sollen für unterschiedliche Komponenten unterschiedliche Wertepaare berücksichtigt werden, so sind diese im selben Tupel anzugeben.

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

Beispiel: In ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelIDcomponent_model_id 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 NumLevelsCompNumLevelsCompNumLevelsCompNumLevelsCompnumLevelsCompnum_levels_comp = [5,2,4,1].

GreedinessCompGreedinessCompGreedinessCompGreedinessCompgreedinessCompgreediness_comp:

„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 GreedinessGreedinessGreedinessGreedinessgreedinessgreediness in find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModelfind_shape_model.

Setzbar sind genau ein Wert oder dieselbe Anzahl Werte wie Modellkomponenten in ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelIDcomponent_model_id. 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 ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelIDcomponent_model_id verwendet.

Weitere Informationen zu Ausgabeparametern

ModelStartModelStartModelStartModelStartmodelStartmodel_start und ModelEndModelEndModelEndModelEndmodelEndmodel_end:

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 [ModelStartModelStartModelStartModelStartmodelStartmodel_start[0],ModelEndModelEndModelEndModelEndmodelEndmodel_end[0]] beschrieben. Dabei beziehen sich die Indizes auf die Werte der Parameter RowCompRowCompRowCompRowComprowComprow_comp, ColumnCompColumnCompColumnCompColumnCompcolumnCompcolumn_comp, AngleCompAngleCompAngleCompAngleCompangleCompangle_comp, ScoreCompScoreCompScoreCompScoreCompscoreCompscore_comp und ModelCompModelCompModelCompModelCompmodelCompmodel_comp.

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:
RowCompRowCompRowCompRowComprowComprow_comp = [100,200,300,150,250] ModelStartModelStartModelStartModelStartmodelStartmodel_start = [0,3]
ColumnCompColumnCompColumnCompColumnCompcolumnCompcolumn_comp = [200,210,220,400,425] ModelEndModelEndModelEndModelEndmodelEndmodel_end = [2,4]
AngleCompAngleCompAngleCompAngleCompangleCompangle_comp = [0,0.1,-0.2,0.1,0.2] ModelCompModelCompModelCompModelCompmodelCompmodel_comp = [0,1,2,0,2]
ScoreCompScoreCompScoreCompScoreCompscoreCompscore_comp = [1,1,1,1,1] ScoreScoreScoreScorescorescore = [1,1]
Aus der rechten Spalte ersichtlich, dass in der linken Spalte:
ScoreScoreScoreScorescorescore:

Bewertung der Instanzen des gesamten Komponentenmodells.

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

RowCompRowCompRowCompRowComprowComprow_comp, ColumnCompColumnCompColumnCompColumnCompcolumnCompcolumn_comp und AngleCompAngleCompAngleCompAngleCompangleCompangle_comp:

Positionen (RowCompRowCompRowCompRowComprowComprow_comp, ColumnCompColumnCompColumnCompColumnCompcolumnCompcolumn_comp) und Rotationen (AngleCompAngleCompAngleCompAngleCompangleCompangle_comp) der Modellkomponenten aller gefundenen Instanzen des Komponentenmodells.

Die Koordinaten RowCompRowCompRowCompRowComprowComprow_comp und ColumnCompColumnCompColumnCompColumnCompcolumnCompcolumn_comp 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 ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelIDcomponent_model_id auf diesen Schwerpunkt beziehen, darf der Ursprung einer Komponente nicht mit set_shape_model_originset_shape_model_originSetShapeModelOriginSetShapeModelOriginSetShapeModelOriginset_shape_model_origin verändert werden.

ScoreCompScoreCompScoreCompScoreCompscoreCompscore_comp:

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.

ModelCompModelCompModelCompModelCompmodelCompmodel_comp:

Index der gefundenen Komponenten.

Das Tupel enthält die Indizes der jeweiligen gefundenen Modellkomponenten (siehe create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModelcreate_component_model bzw. train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponentstrain_model_components). Damit können die Werte in RowCompRowCompRowCompRowComprowComprow_comp, ColumnCompColumnCompColumnCompColumnCompcolumnCompcolumn_comp, AngleCompAngleCompAngleCompAngleCompangleCompangle_comp und ScoreCompScoreCompScoreCompScoreCompscoreCompscore_comp den verschieden Modellkomponenten zugeordnet werden. Siehe auch das Beispiel bei ModelStartModelStartModelStartModelStartmodelStartmodel_start und ModelEndModelEndModelEndModelEndmodelEndmodel_end.

Informationen zum Suchverlauf

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

Der Definitionsbereich des Bildes ImageImageImageImageimageimage 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 MinScoreCompMinScoreCompMinScoreCompMinScoreCompminScoreCompmin_score_comp 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")set_system("border_shape_models","true") umgestellt werden, so dass auch Komponenten gefunden werden, die aus dem Bild herausragen, falls sie eine Bewertung größer als MinScoreCompMinScoreCompMinScoreCompMinScoreCompminScoreCompmin_score_comp 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_circleDilationCircleDilationCircleDilationCircledilation_circle 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 NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches gleich 1 nicht mit dem Match mit dem höchsten Score übereinstimmt, der von NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches 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, NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches 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 SubPixelCompSubPixelCompSubPixelCompSubPixelCompsubPixelCompsub_pixel_comp die Subpixel-Extraktion genauso oft angegeben werden, wie die Anzahl an Modellkomponenten in ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelIDcomponent_model_id. 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_modelsFindShapeModelsFindShapeModelsFindShapeModelsfind_shape_models zu finden.

Ausführungsinformationen

Parameter

ImageImageImageImageimageimage (input_object)  (multichannel-)image objectHImageHObjectHImageHobject (byte / uint2)

Eingabebild, in dem das Komponentenmodell gefunden werden soll.

ComponentModelIDComponentModelIDComponentModelIDComponentModelIDcomponentModelIDcomponent_model_id (input_control)  component_model HComponentModel, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des Komponentenmodells.

RootComponentRootComponentRootComponentRootComponentrootComponentroot_component (input_control)  integer(-array) HTupleMaybeSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Index der Wurzelkomponente.

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

AngleStartRootAngleStartRootAngleStartRootAngleStartRootangleStartRootangle_start_root (input_control)  angle.rad(-array) HTupleMaybeSequence[float]HTupleHtuple (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

AngleExtentRootAngleExtentRootAngleExtentRootAngleExtentRootangleExtentRootangle_extent_root (input_control)  angle.rad(-array) HTupleMaybeSequence[float]HTupleHtuple (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

MinScoreMinScoreMinScoreMinScoreminScoremin_score (input_control)  real HTuplefloatHTupleHtuple (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

NumMatchesNumMatchesNumMatchesNumMatchesnumMatchesnum_matches (input_control)  integer HTupleintHTupleHtuple (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

MaxOverlapMaxOverlapMaxOverlapMaxOverlapmaxOverlapmax_overlap (input_control)  real HTuplefloatHTupleHtuple (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

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

Verhalten bei fehlender Wurzelkomponente.

Defaultwert: 'stop_search' "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""select_new_root", 'stop_search'"stop_search""stop_search""stop_search""stop_search""stop_search"

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

Verhalten bei fehlenden Komponenten.

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

Werteliste: 'prune_branch'"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_best", 'search_from_upper'"search_from_upper""search_from_upper""search_from_upper""search_from_upper""search_from_upper"

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

Schätzung der Lagen nicht gefundener Komponenten.

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

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

MinScoreCompMinScoreCompMinScoreCompMinScoreCompminScoreCompmin_score_comp (input_control)  real(-array) HTupleMaybeSequence[float]HTupleHtuple (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

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

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

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

Wertevorschläge: 'none'"none""none""none""none""none", 'interpolation'"interpolation""interpolation""interpolation""interpolation""interpolation", 'least_squares'"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_high", 'least_squares_very_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 1", 'max_deformation 2'"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 3", 'max_deformation 4'"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 5", 'max_deformation 6'"max_deformation 6""max_deformation 6""max_deformation 6""max_deformation 6""max_deformation 6"

NumLevelsCompNumLevelsCompNumLevelsCompNumLevelsCompnumLevelsCompnum_levels_comp (input_control)  integer(-array) HTupleMaybeSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

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

Defaultwert: 0

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

GreedinessCompGreedinessCompGreedinessCompGreedinessCompgreedinessCompgreediness_comp (input_control)  real(-array) HTupleMaybeSequence[float]HTupleHtuple (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

ModelStartModelStartModelStartModelStartmodelStartmodel_start (output_control)  integer(-array) HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

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

ModelEndModelEndModelEndModelEndmodelEndmodel_end (output_control)  integer(-array) HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

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

ScoreScoreScoreScorescorescore (output_control)  real(-array) HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Bewertung der gefunden Instanzen des Komponentenmodells.

RowCompRowCompRowCompRowComprowComprow_comp (output_control)  point.y(-array) HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Zeilenkoordinate der gefundenen Komponentenmatches.

ColumnCompColumnCompColumnCompColumnCompcolumnCompcolumn_comp (output_control)  point.x(-array) HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Spaltenkoordinate der gefundenen Komponentenmatches.

AngleCompAngleCompAngleCompAngleCompangleCompangle_comp (output_control)  angle.rad(-array) HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Rotationswinkel der gefundenen Komponentenmatches.

ScoreCompScoreCompScoreCompScoreCompscoreCompscore_comp (output_control)  real(-array) HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Bewertung der gefundenen Komponentenmatches.

ModelCompModelCompModelCompModelCompmodelCompmodel_comp (output_control)  integer(-array) HTupleSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Index der gefundenen Komponenten.

Ergebnis

Sind die Parameterwerte korrekt, dann liefert find_component_modelfind_component_modelFindComponentModelFindComponentModelFindComponentModelfind_component_model 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>)set_system("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

create_trained_component_modelcreate_trained_component_modelCreateTrainedComponentModelCreateTrainedComponentModelCreateTrainedComponentModelcreate_trained_component_model, create_component_modelcreate_component_modelCreateComponentModelCreateComponentModelCreateComponentModelcreate_component_model, read_component_modelread_component_modelReadComponentModelReadComponentModelReadComponentModelread_component_model

Nachfolger

get_found_component_modelget_found_component_modelGetFoundComponentModelGetFoundComponentModelGetFoundComponentModelget_found_component_model

Alternativen

find_generic_shape_modelfind_generic_shape_modelFindGenericShapeModelFindGenericShapeModelFindGenericShapeModelfind_generic_shape_model

Siehe auch

find_shape_modelfind_shape_modelFindShapeModelFindShapeModelFindShapeModelfind_shape_model, find_shape_modelsfind_shape_modelsFindShapeModelsFindShapeModelsFindShapeModelsfind_shape_models, get_shape_model_paramsget_shape_model_paramsGetShapeModelParamsGetShapeModelParamsGetShapeModelParamsget_shape_model_params, get_component_model_paramsget_component_model_paramsGetComponentModelParamsGetComponentModelParamsGetComponentModelParamsget_component_model_params, train_model_componentstrain_model_componentsTrainModelComponentsTrainModelComponentsTrainModelComponentstrain_model_components, set_shape_model_originset_shape_model_originSetShapeModelOriginSetShapeModelOriginSetShapeModelOriginset_shape_model_origin, smallest_rectangle2smallest_rectangle2SmallestRectangle2SmallestRectangle2SmallestRectangle2smallest_rectangle2

Modul

Matching