create_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXld — Vorbereiten eines anisotrop skalierten Formmodells für das Matching
aus XLD-Konturen.
create_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXld erzeugt ein anisotrop 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_aniso_shape_modelcreate_aniso_shape_modelCreateAnisoShapeModelcreate_aniso_shape_modelCreateAnisoShapeModelCreateAnisoShapeModel, der
ein Formmodell aus einem Bild erzeugt, erzeugt der Operator
create_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXld 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_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXld eine Fehlermeldung zurück. Falls
für NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels'auto'"auto""auto""auto""auto""auto" übergeben wird, wählt
create_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXld 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_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXld 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_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModel 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_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModel kommen. In diesen
Fällen sollte die Anzahl der Pyramidenstufen manuell gewählt werden.
Es ist zu beachten, dass die Transformationen intern so behandelt
werden, dass erst die Skalierungen und dann die Rotation angewendet
werden. Daher sollte das Modell im Normalfall so ausgerichtet
werden, dass es im Modellbild horizontal oder vertikal erscheint.
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_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModel
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_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModel aber wesentlich erhöht, ist es in
solchen Fällen meist sinnvoller, mehrere Modelle mit
create_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXld zu erzeugen und mit
find_aniso_shape_modelsfind_aniso_shape_modelsFindAnisoShapeModelsfind_aniso_shape_modelsFindAnisoShapeModelsFindAnisoShapeModels 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_aniso_shape_modelfind_aniso_shape_modelFindAnisoShapeModelfind_aniso_shape_modelFindAnisoShapeModelFindAnisoShapeModel 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.
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. Die Produkte
und sollten
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_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXld 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.