create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXld — Vorbereiten eines isotrop skalierten Formmodells für das Matching
aus XLD-Konturen.
create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXld erzeugt ein isotrop skaliertes
Formmodell für das Matching aus den XLD Konturen ContoursContoursContoursContoursContourscontours. Die
XLD Konturen repräsentieren dabei die Grauwertkanten des zu suchenden Objekts
im Bild. Im Gegensatz zu dem Operator create_scaled_shape_modelcreate_scaled_shape_modelCreateScaledShapeModelcreate_scaled_shape_modelCreateScaledShapeModelCreateScaledShapeModel, der
ein Formmodell aus einem Bild erzeugt, erzeugt der Operator
create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXld das Formmodell aus XLD Konturen, d.h.,
ohne die Verwendung eines Bildes.
Die Anzahl der Pyramidenebenen wird mit NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels
festgelegt. Sie sollte so groß wie möglich gewählt werden, da
hierdurch das Auffinden des Modells erheblich beschleunigt wird.
Bei der Wahl von NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels ist aber darauf zu achten, dass
das Modell auf der obersten Pyramidenstufe noch erkennbar ist und
genügend viele Punkte besitzt (mindestens vier). Falls
nicht genügend Modellpunkte erzeugt werden, wird die Anzahl der
Pyramidenstufen intern solange reduziert, bis auf der obersten
Pyramidenstufe genügend Modellpunkte vorhanden sind. Falls durch
diese Anpassung ein Modell mit keiner Pyramidenstufe entstehen
würde, d.h. falls schon auf der untersten Pyramidenstufe zu wenige
Modellpunkte vorhanden sind, liefert
create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXld eine Fehlermeldung zurück. Falls
für NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels'auto'"auto""auto""auto""auto""auto" übergeben wird, wählt
create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXld die Anzahl der Pyramidenstufen
automatisch. Die gewählte Anzahl von Pyramidenstufen
kann mit get_shape_model_paramsget_shape_model_paramsGetShapeModelParamsget_shape_model_paramsGetShapeModelParamsGetShapeModelParams abgefragt werden. In
seltenen Fällen kann es vorkommen, dass
create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXld die Anzahl der Pyramidenstufen zu
hoch oder zu niedrig bestimmt. Falls die Anzahl der Pyramidenstufen
zu hoch gewählt wird, kann das dazu führen, dass das Modell im Bild
nicht erkannt wird oder dass sehr niedrige Parameter für MinScore
oder Greediness in find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModel selektiert werden
müssen, damit das Modell gefunden wird. Falls die Anzahl der
Pyramidenstufen zu niedrig gewählt wird, kann es zu erhöhten
Laufzeiten in find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModel kommen. In diesen
Fällen sollte die Anzahl der Pyramidenstufen manuell gewählt werden.
Der Parameter MetricMetricMetricMetricMetricmetric legt fest, unter welchen Bedingungen
das Muster im Bild noch erkannt wird. Falls MetricMetricMetricMetricMetricmetric =
'use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity""use_polarity", muss das Objekt im Bild dieselben
Kontrasteigenschaften aufweisen wie das Modell. Wenn z.B. das
Modell ein helles Objekt auf dunklem Hintergrund ist, wird das
Objekt im Bild nur dann gefunden, wenn es auch heller als der
Hintergrund ist. Falls MetricMetricMetricMetricMetricmetric =
'ignore_global_polarity'"ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity", wird das Objekt auch dann im Bild
gefunden, wenn sich der Kontrast global umkehrt. Im obigen Beispiel
würde das Objekt also auch dann gefunden, wenn es dunkler als der
Hintergrund ist. Die Laufzeit von find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModel
erhöht sich in diesem Fall geringfügig. Falls MetricMetricMetricMetricMetricmetric =
'ignore_local_polarity'"ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity", wird das Modell auch dann
gefunden, wenn sich die Kontrastverhältnisse lokal ändern. Dieser
Modus kann z.B. dann sinnvoll sein, wenn das Objekt aus einem Teil
mittleren Grauwerts besteht, auf dem entweder dunkle oder helle
Unterobjekte liegen können. Da sich in diesem Fall die Laufzeit von
find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModel aber wesentlich erhöht, ist es in
solchen Fällen meist sinnvoller, mehrere Modelle mit
create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXld zu erzeugen und mit
find_scaled_shape_modelsfind_scaled_shape_modelsFindScaledShapeModelsfind_scaled_shape_modelsFindScaledShapeModelsFindScaledShapeModels zu suchen. Die obigen drei
Metriken können nur auf einkanalige Bilder angewendet werden. Falls
im Modellbild oder in den Suchbildern ein mehrkanaliges Bild
übergeben wird, wird stillschweigend nur der erste Kanal des Bildes
verwendet. Falls MetricMetricMetricMetricMetricmetric =
'ignore_color_polarity'"ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity", wird das Modell auch dann
gefunden, falls sich die Farbkontraste lokal ändern können. Dies
ist z.B. der Fall, wenn Teile des Objektes ihre Farbe ändern können,
z.B. von rot auf grün. Dieser Modus ist insbesondere dann sinnvoll,
wenn nicht vorab bekannt ist, in welchen Kanälen das Objekt zu
erkennen ist. Auch hier kann sich die Laufzeit von
find_scaled_shape_modelfind_scaled_shape_modelFindScaledShapeModelfind_scaled_shape_modelFindScaledShapeModelFindScaledShapeModel erheblich erhöhen. Die Metrik
'ignore_color_polarity'"ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity" kann auf Bilder mit einer
beliebigen Anzahl von Kanälen angewendet werden. Falls sie mit
einkanaligen Bildern verwendet wird, hat sie dieselbe Wirkung wie
'ignore_local_polarity'"ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity". Es ist zu beachten, dass für
MetricMetricMetricMetricMetricmetric = 'ignore_color_polarity'"ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity" die
Kanäle nicht einer spektralen Unterteilung des Lichtes (wie z.B. bei
einem RGB-Bild) entsprechen müssen. Die Kanäle können z.B. auch
durch Beleuchtung des Objektes aus unterschiedlichen Richtungen
entstanden sein.
Es ist auch zu beachten, dass die beiden ersten Werte für MetricMetricMetricMetricMetricmetric
('use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity""use_polarity" und 'ignore_global_polarity'"ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity") nur dann
verwendet werden können, wenn bei allen Konturen, die in ContoursContoursContoursContoursContourscontours
übergeben wurden, das Attribut 'edge_direction'"edge_direction""edge_direction""edge_direction""edge_direction""edge_direction" gesetzt ist, da es
die Polarität der Kanten festlegt. Dieses Attribut ist z.B. bei Konturen
gesetzt, die mit dem Operator edges_sub_pixedges_sub_pixEdgesSubPixedges_sub_pixEdgesSubPixEdgesSubPix bestimmt wurden, wenn
dort der Parameter MethodMethodMethodMethodMethodmethod z.B. den Wert 'canny'"canny""canny""canny""canny""canny" hat.
Ansonsten besteht die Möglichkeit, die beiden Werte für MetricMetricMetricMetricMetricmetric mit
dem Operator set_shape_model_metricset_shape_model_metricSetShapeModelMetricset_shape_model_metricSetShapeModelMetricSetShapeModelMetric zu setzen, der die Polarität
der Kanten aus einem Bild bestimmt.
Es ist zu beachten, dass vorabgenerierte Modelle für eine spezifische
Bildgröße bestimmt sind. Aus Laufzeitgründen ist die Verwendung von Bildern
mit verschiedenen Größen während der Suche mit dem gleichen Modell nicht
parallel möglich. In diesem Fall müssen Kopien des gleichen Modells verwendet
werden. Anderenfalls kann das Programm abstürzen.
Die XLD-Konturen, die in ContoursContoursContoursContoursContourscontours übergeben werden, sollten
in etwa auf die mittlere Größe skaliert worden sein, in der das Objekt
in den Suchbildern erscheint. Das Produkt sollte also
etwa 1 ergeben.
Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
Wird ohne Parallelisierung verarbeitet.
Dieser Operator liefert ein Handle zurück. Es ist zu beachten, dass der Zustand einer Instanz dieses Handletyps durch bestimmte Operatoren geändert werden kann, obwohl das Handle als Eingabeparameter in diesen Operatoren verwendet wird.
Sind die Parameterwerte korrekt, dann liefert
create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXld den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird
eine Fehlerbehandlung durchgeführt. Wenn der Parameter
NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels so gewählt wurde, dass das Modell zu wenige Punkte
besitzt, wird die Fehlermeldung 8510 zurückgeliefert.