Name
create_shape_model_xldcreate_shape_model_xldCreateShapeModelXldcreate_shape_model_xldCreateShapeModelXldCreateShapeModelXld — Vorbereiten eines Formmodells für das Matching aus XLD-Konturen.
Herror create_shape_model_xld(const Hobject Contours, const Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, const char* Optimization, const char* Metric, const Hlong MinContrast, Hlong* ModelID)
Herror T_create_shape_model_xld(const Hobject Contours, const Htuple NumLevels, const Htuple AngleStart, const Htuple AngleExtent, const Htuple AngleStep, const Htuple Optimization, const Htuple Metric, const Htuple MinContrast, Htuple* ModelID)
Herror create_shape_model_xld(Hobject Contours, const HTuple& NumLevels, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& AngleStep, const HTuple& Optimization, const HTuple& Metric, const HTuple& MinContrast, Hlong* ModelID)
HShapeModel HXLDCont::CreateShapeModelXld(const HTuple& NumLevels, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& AngleStep, const HTuple& Optimization, const HTuple& Metric, const HTuple& MinContrast) const
HShapeModel HXLDContArray::CreateShapeModelXld(const HTuple& NumLevels, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& AngleStep, const HTuple& Optimization, const HTuple& Metric, const HTuple& MinContrast) const
void HShapeModel::CreateShapeModelXld(const HXLDContArray& Contours, const HTuple& NumLevels, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& AngleStep, const HTuple& Optimization, const HTuple& Metric, const HTuple& MinContrast)
void CreateShapeModelXld(const HObject& Contours, const HTuple& NumLevels, const HTuple& AngleStart, const HTuple& AngleExtent, const HTuple& AngleStep, const HTuple& Optimization, const HTuple& Metric, const HTuple& MinContrast, HTuple* ModelID)
void HShapeModel::HShapeModel(const HXLDCont& Contours, const HTuple& NumLevels, double AngleStart, double AngleExtent, const HTuple& AngleStep, const HTuple& Optimization, const HString& Metric, Hlong MinContrast)
void HShapeModel::HShapeModel(const HXLDCont& Contours, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, const HString& Optimization, const HString& Metric, Hlong MinContrast)
void HShapeModel::HShapeModel(const HXLDCont& Contours, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, const char* Optimization, const char* Metric, Hlong MinContrast)
void HShapeModel::CreateShapeModelXld(const HXLDCont& Contours, const HTuple& NumLevels, double AngleStart, double AngleExtent, const HTuple& AngleStep, const HTuple& Optimization, const HString& Metric, Hlong MinContrast)
void HShapeModel::CreateShapeModelXld(const HXLDCont& Contours, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, const HString& Optimization, const HString& Metric, Hlong MinContrast)
void HShapeModel::CreateShapeModelXld(const HXLDCont& Contours, Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, const char* Optimization, const char* Metric, Hlong MinContrast)
HShapeModel HXLDCont::CreateShapeModelXld(const HTuple& NumLevels, double AngleStart, double AngleExtent, const HTuple& AngleStep, const HTuple& Optimization, const HString& Metric, Hlong MinContrast) const
HShapeModel HXLDCont::CreateShapeModelXld(Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, const HString& Optimization, const HString& Metric, Hlong MinContrast) const
HShapeModel HXLDCont::CreateShapeModelXld(Hlong NumLevels, double AngleStart, double AngleExtent, double AngleStep, const char* Optimization, const char* Metric, Hlong MinContrast) const
void HOperatorSetX.CreateShapeModelXld(
[in] IHUntypedObjectX* Contours, [in] VARIANT NumLevels, [in] VARIANT AngleStart, [in] VARIANT AngleExtent, [in] VARIANT AngleStep, [in] VARIANT Optimization, [in] VARIANT Metric, [in] VARIANT MinContrast, [out] VARIANT* ModelID)
void HShapeModelX.CreateShapeModelXld(
[in] IHXLDContX* Contours, [in] VARIANT NumLevels, [in] double AngleStart, [in] double AngleExtent, [in] VARIANT AngleStep, [in] VARIANT Optimization, [in] BSTR Metric, [in] Hlong MinContrast)
IHShapeModelX* HXLDContX.CreateShapeModelXld(
[in] VARIANT NumLevels, [in] double AngleStart, [in] double AngleExtent, [in] VARIANT AngleStep, [in] VARIANT Optimization, [in] BSTR Metric, [in] Hlong MinContrast)
static void HOperatorSet.CreateShapeModelXld(HObject contours, HTuple numLevels, HTuple angleStart, HTuple angleExtent, HTuple angleStep, HTuple optimization, HTuple metric, HTuple minContrast, out HTuple modelID)
public HShapeModel(HXLDCont contours, HTuple numLevels, double angleStart, double angleExtent, HTuple angleStep, HTuple optimization, string metric, int minContrast)
public HShapeModel(HXLDCont contours, int numLevels, double angleStart, double angleExtent, double angleStep, string optimization, string metric, int minContrast)
void HShapeModel.CreateShapeModelXld(HXLDCont contours, HTuple numLevels, double angleStart, double angleExtent, HTuple angleStep, HTuple optimization, string metric, int minContrast)
void HShapeModel.CreateShapeModelXld(HXLDCont contours, int numLevels, double angleStart, double angleExtent, double angleStep, string optimization, string metric, int minContrast)
HShapeModel HXLDCont.CreateShapeModelXld(HTuple numLevels, double angleStart, double angleExtent, HTuple angleStep, HTuple optimization, string metric, int minContrast)
HShapeModel HXLDCont.CreateShapeModelXld(int numLevels, double angleStart, double angleExtent, double angleStep, string optimization, string metric, int minContrast)
create_shape_model_xldcreate_shape_model_xldCreateShapeModelXldcreate_shape_model_xldCreateShapeModelXldCreateShapeModelXld erzeugt ein 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_shape_modelcreate_shape_modelCreateShapeModelcreate_shape_modelCreateShapeModelCreateShapeModel, der ein Formmodell aus einem Bild
erzeugt, erzeugt der Operator create_shape_model_xldcreate_shape_model_xldCreateShapeModelXldcreate_shape_model_xldCreateShapeModelXldCreateShapeModelXld das Formmodell
aus XLD Konturen, d.h., ohne die Verwendung eines Bildes.
Der Ausgabeparameter ModelIDModelIDModelIDModelIDModelIDmodelID ist ein Handle für dieses
Modell, der in nachfolgenden Aufrufen von find_shape_modelfind_shape_modelFindShapeModelfind_shape_modelFindShapeModelFindShapeModel verwendet
wird. Als Ursprung (Referenzpunkt) des Modells wird der Schwerpunkt des
kleinsten umschließenden Rechtecks der Konturen ContoursContoursContoursContoursContourscontours, das
parallel zu den Koordinatenachsen liegt, verwendet. Falls ein anderer
Ursprung gewünscht wird, kann dieser mit set_shape_model_originset_shape_model_originSetShapeModelOriginset_shape_model_originSetShapeModelOriginSetShapeModelOrigin
gesetzt werden. Das Modell wird für mehrere Pyramidenebenen generiert und
im Speicher abgelegt. Falls eine vollständige Vorabgenerierung des Modells
gewählt wird (siehe unten), wird das Modell in mehreren Rotationen auf jeder
Ebene generiert.
Eingabeparameter im Detail
- NumLevels:
-
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_shape_model_xldcreate_shape_model_xldCreateShapeModelXldcreate_shape_model_xldCreateShapeModelXldCreateShapeModelXld eine Fehlermeldung zurück. Falls für
NumLevelsNumLevelsNumLevelsNumLevelsNumLevelsnumLevels 'auto'"auto""auto""auto""auto""auto" übergeben wird, wählt
create_shape_model_xldcreate_shape_model_xldCreateShapeModelXldcreate_shape_model_xldCreateShapeModelXldCreateShapeModelXld 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_shape_model_xldcreate_shape_model_xldCreateShapeModelXldcreate_shape_model_xldCreateShapeModelXldCreateShapeModelXld 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_shape_modelfind_shape_modelFindShapeModelfind_shape_modelFindShapeModelFindShapeModel 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_shape_modelfind_shape_modelFindShapeModelfind_shape_modelFindShapeModelFindShapeModel kommen. In diesen
Fällen sollte die Anzahl der Pyramidenstufen manuell gewählt werden.
- AngleStart, AngleExtent und AngleStep:
-
Die Parameter AngleStartAngleStartAngleStartAngleStartAngleStartangleStart und AngleExtentAngleExtentAngleExtentAngleExtentAngleExtentangleExtent legen den
Winkelbereich für die möglichen Rotationen des Objekts im Suchbild fest. Das
Objekt kann also mit find_shape_modelfind_shape_modelFindShapeModelfind_shape_modelFindShapeModelFindShapeModel nur in diesem Winkelbereich
gefunden werden. Der Parameter AngleStepAngleStepAngleStepAngleStepAngleStepangleStep gibt die Schrittweite der
Winkel in dem gewählten Winkelbereich an. Falls bei find_shape_modelfind_shape_modelFindShapeModelfind_shape_modelFindShapeModelFindShapeModel
keine Subpixelgenauigkeit spezifiziert wird, gibt AngleStepAngleStepAngleStepAngleStepAngleStepangleStep also die
erreichbare Winkelgenauigkeit an. AngleStepAngleStepAngleStepAngleStepAngleStepangleStep sollte aufgrund der
Größe des Objektes gewählt werden. Kleinere Modelle besitzen nur eine kleine
Anzahl von verschiedenen diskreten Rotationen im Bild. Deshalb sollte
AngleStepAngleStepAngleStepAngleStepAngleStepangleStep für kleinere Modelle größer gewählt werden. Falls
AngleExtentAngleExtentAngleExtentAngleExtentAngleExtentangleExtent kein ganzzahliges Vielfaches von AngleStepAngleStepAngleStepAngleStepAngleStepangleStep ist,
wird AngleStepAngleStepAngleStepAngleStepAngleStepangleStep entsprechend angepasst.
Um sicherzustellen, dass find_shape_modelfind_shape_modelFindShapeModelfind_shape_modelFindShapeModelFindShapeModel für
Modellinstanzen ohne Rotation Winkel von exakt 0.0 zurückgibt, wird der
Winkelbereich der möglichen Rotationen folgendermaßen angepasst: Wenn
kein positiver ganzzahliger Wert n existiert, für den
AngleStartAngleStartAngleStartAngleStartAngleStartangleStart plus n mal AngleStepAngleStepAngleStepAngleStepAngleStepangleStep genau Null ergibt,
wird AngleStartAngleStartAngleStartAngleStartAngleStartangleStart um höchstens AngleStepAngleStepAngleStepAngleStepAngleStepangleStep verringert,
und AngleExtentAngleExtentAngleExtentAngleExtentAngleExtentangleExtent wird um AngleStepAngleStepAngleStepAngleStepAngleStepangleStep vergrößert.
- Optimization:
-
Bei besonders großen Modellen kann es auch sinnvoll sein, die Anzahl der
Modellpunkte durch Setzen des Parameters OptimizationOptimizationOptimizationOptimizationOptimizationoptimization auf einen Wert
ungleich 'none'"none""none""none""none""none" zu setzen. Falls OptimizationOptimizationOptimizationOptimizationOptimizationoptimization =
'none'"none""none""none""none""none", werden alle Modellpunkte abgespeichert. Ansonsten wird die
Anzahl der Punkte entsprechend dem Parameter OptimizationOptimizationOptimizationOptimizationOptimizationoptimization reduziert.
Falls die Anzahl der Punkte reduziert wird, kann es bei
find_shape_modelfind_shape_modelFindShapeModelfind_shape_modelFindShapeModelFindShapeModel notwendig werden, den Parameter Greediness
auf einen kleineren Wert, z.B. 0.7 oder 0.8, zu setzen. Bei kleineren
Modellen bewirkt die Reduktion der Anzahl der Punkte keine Beschleunigung, da
dadurch typischerweise wesentlich mehr potentielle Instanzen des Modells
untersucht werden müssen. Falls für OptimizationOptimizationOptimizationOptimizationOptimizationoptimization 'auto'"auto""auto""auto""auto""auto"
übergeben wird, wählt create_shape_model_xldcreate_shape_model_xldCreateShapeModelXldcreate_shape_model_xldCreateShapeModelXldCreateShapeModelXld die Reduktion der Punkte
automatisch.
- Metric:
-
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_shape_modelfind_shape_modelFindShapeModelfind_shape_modelFindShapeModelFindShapeModel 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_shape_modelfind_shape_modelFindShapeModelfind_shape_modelFindShapeModelFindShapeModel aber wesentlich erhöht, ist es in solchen Fällen
meist sinnvoller, mehrere Modelle mit create_shape_model_xldcreate_shape_model_xldCreateShapeModelXldcreate_shape_model_xldCreateShapeModelXldCreateShapeModelXld zu
erzeugen und mit find_shape_modelsfind_shape_modelsFindShapeModelsfind_shape_modelsFindShapeModelsFindShapeModels 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_shape_modelfind_shape_modelFindShapeModelfind_shape_modelFindShapeModelFindShapeModel 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.
- MinContrast:
Mit MinContrastMinContrastMinContrastMinContrastMinContrastminContrast wird festgelegt, welchen Grauwertkontrast die
Objektkanten später bei der Erkennung mit find_shape_modelfind_shape_modelFindShapeModelfind_shape_modelFindShapeModelFindShapeModel im Bild
mindestens besitzen müssen. Mit anderen Worten stellt dieser Parameter somit
eine Abgrenzung des Objekts von Rauschen im Bild dar. Eine gute Wahl ist
deshalb der Bereich von Grauwertänderungen, der durch das Rauschen im Bild
verursacht wird. Falls die Grauwerte z.B. in einem Bereich von 10 Graustufen
durch Rauschen schwanken, sollte MinContrastMinContrastMinContrastMinContrastMinContrastminContrast auf 10 gesetzt werden.
Falls mehrkanalige Bilder für das Modell und für die Suchbilder verwendet
werden, und falls der Parameter MetricMetricMetricMetricMetricmetric auf
'ignore_color_polarity'"ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity" gesetzt wird (siehe oben), muss das
Rauschen in einem Kanal noch mit der Wurzel der Anzahl der Kanäle
multipliziert werden, um MinContrastMinContrastMinContrastMinContrastMinContrastminContrast zu bestimmen. Falls die
Grauwerte in einem Kanal z.B. in einem Bereich von 10 Graustufen schwanken,
sollte MinContrastMinContrastMinContrastMinContrastMinContrastminContrast bei einem dreikanaligen Bild auf 17 gesetzt
werden. Falls das Modell später in sehr kontrastarmen Bildern erkannt werden
soll, muss MinContrastMinContrastMinContrastMinContrastMinContrastminContrast entsprechend klein gewählt werden. Falls das
Modell mit erheblichen Verdeckungen erkannt werden soll, sollte
MinContrastMinContrastMinContrastMinContrastMinContrastminContrast etwas größer als der Grauwertbereich, der durch das
Rauschen verursacht wird, gewählt werden, um eine robuste und genaue
Lageschätzung des verdeckten Modells zu gewährleisten.
Vollständige Vorabgenerierung des Modells
Optional kann in OptimizationOptimizationOptimizationOptimizationOptimizationoptimization ein zweiter Wert übergeben werden.
Dieser Wert legt fest, ob das Modell vollständig vorab generiert wird oder
nicht. Der zweite Wert von OptimizationOptimizationOptimizationOptimizationOptimizationoptimization ist hierzu auf
'pregeneration'"pregeneration""pregeneration""pregeneration""pregeneration""pregeneration" oder 'no_pregeneration'"no_pregeneration""no_pregeneration""no_pregeneration""no_pregeneration""no_pregeneration" zu setzen. Falls
der zweite Wert nicht angegeben wird, wird der mit
set_system('pregenerate_shape_models',...)set_system("pregenerate_shape_models",...)SetSystem("pregenerate_shape_models",...)set_system("pregenerate_shape_models",...)SetSystem("pregenerate_shape_models",...)SetSystem("pregenerate_shape_models",...) eingestellte Modus
verwendet. Mit der Standardeinstellung ('pregenerate_shape_models'"pregenerate_shape_models""pregenerate_shape_models""pregenerate_shape_models""pregenerate_shape_models""pregenerate_shape_models"
= 'false'"false""false""false""false""false") wird das Modell nicht vollständig vorab generiert. Die
vollständige Vorabgenerierung des Modells führt im Normalfall zu leicht
geringeren Laufzeiten in find_shape_modelfind_shape_modelFindShapeModelfind_shape_modelFindShapeModelFindShapeModel, da das Modell nicht zur
Laufzeit transformiert werden muss. Allerdings sind in diesem Fall der
Speicherbedarf und die Zeit, die zur Modellerzeugung benötigt wird,
wesentlich höher. Zu beachten ist auch, dass in den zwei Modi nicht
dieselben Ergebnisse erwartet werden können, da intern bei der Transformation
zur Laufzeit notwendigerweise andere Daten für die transformierten Modelle
entstehen, als bei der Vorabgenerierung. Falls das Modell nicht vorab
generiert wird, werden z.B. in find_shape_modelfind_shape_modelFindShapeModelfind_shape_modelFindShapeModelFindShapeModel typischerweise leicht
niedrigere Bewertungen (Scores) zurückgeliefert, so dass es unter Umständen
notwendig sein kann, einen niedrigeren Wert für MinScore als bei
vollständiger Vorabgenerierung zu verwenden. Außerdem können sich die durch
Interpolation gewonnenen Subpixelpositionen geringfügig unterscheiden. Falls
höchste Genauigkeit gewünscht wird, sollte die Lage des Modells mittels
Ausgleichsrechnung (Least-Squares Adjustment) bestimmt werden.
Falls eine vollständige Vorabgenerierung des Modells gewählt wird (siehe
unten), wird das Modell in dem gewählten Winkelbereich vorab generiert und im
Speicher abgelegt. Der Speicherbedarf zur Speicherung des Modells ist also
proportional zur Anzahl der Winkelschritte und zur Anzahl der Punkte im
Modell. Wenn also AngleStepAngleStepAngleStepAngleStepAngleStepangleStep zu klein bzw. AngleExtentAngleExtentAngleExtentAngleExtentAngleExtentangleExtent zu
groß gewählt wird, kann es vorkommen, dass das Modell nicht mehr in den
(virtuellen) Speicher passt. In diesem Fall muss entweder AngleStepAngleStepAngleStepAngleStepAngleStepangleStep
größer oder AngleExtentAngleExtentAngleExtentAngleExtentAngleExtentangleExtent kleiner gewählt werden. In jedem Fall ist
es aus Laufzeitgründen vorteilhaft, wenn das Modell komplett in den
Hauptspeicher passt und somit ein Paging durch das Betriebssystem vermieden
werden kann. Da die Möglichkeit zur subpixelgenauen Winkelbestimmung in
find_shape_modelfind_shape_modelFindShapeModelfind_shape_modelFindShapeModelFindShapeModel gegeben ist, kann bei Modellen mit einem Durchmesser
von ca. 200 Pixeln AngleStepAngleStepAngleStepAngleStepAngleStepangleStep >= 1
gewählt werden. Falls AngleStepAngleStepAngleStepAngleStepAngleStepangleStep = 'auto'"auto""auto""auto""auto""auto"
übergeben wird, wählt create_shape_model_xldcreate_shape_model_xldCreateShapeModelXldcreate_shape_model_xldCreateShapeModelXldCreateShapeModelXld
automatisch eine Schrittweite basierend auf der Größe des Modells aus. Die
automatisch gewählte Schrittweite kann mit get_shape_model_paramsget_shape_model_paramsGetShapeModelParamsget_shape_model_paramsGetShapeModelParamsGetShapeModelParams
abgefragt werden.
Falls eine vollständige Vorabgenerierung des Modells nicht gewählt wird, wird
das Modell nur in einer Referenzlage auf jeder Ebene erzeugt. In diesem Fall
muss das Modell zur Laufzeit in find_shape_modelfind_shape_modelFindShapeModelfind_shape_modelFindShapeModelFindShapeModel auf die
verschiedenen Winkel transformiert werden. Dadurch kann es vorkommen, dass
das Auffinden des Modells etwas mehr Zeit benötigt.
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.
Im Gegensatz zum Operator create_shape_modelcreate_shape_modelCreateShapeModelcreate_shape_modelCreateShapeModelCreateShapeModel ist es nicht
möglich die Mindestgröße der Modellkomponenten anzugeben. Um kleine
Modellkomponenten im Formmodell zu vermeiden, können kurze Konturen
vor dem Aufruf von create_shape_model_xldcreate_shape_model_xldCreateShapeModelXldcreate_shape_model_xldCreateShapeModelXldCreateShapeModelXld mit dem Operator
select_contours_xldselect_contours_xldSelectContoursXldselect_contours_xldSelectContoursXldSelectContoursXld eliminiert werden.
- 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.
Eingabekonturen, die zum Aufbau des Modells verwendet
werden.
Maximale Anzahl von Pyramidenebenen.
Defaultwert:
'auto'
"auto"
"auto"
"auto"
"auto"
"auto"
Werteliste: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 'auto'"auto""auto""auto""auto""auto"
Kleinste auftretende Rotation des Musters.
Defaultwert: -0.39
Wertevorschläge: -3.14, -1.57, -0.79, -0.39, -0.20, 0.0
Ausdehnung des Winkelbereichs.
Defaultwert: 0.79
Wertevorschläge: 6.29, 3.14, 1.57, 0.79, 0.39
Restriktion: AngleExtent >= 0
Schrittweite der Winkel (Auflösung).
Defaultwert:
'auto'
"auto"
"auto"
"auto"
"auto"
"auto"
Wertevorschläge: 'auto'"auto""auto""auto""auto""auto", 0.0175, 0.0349, 0.0524, 0.0698, 0.0873
Restriktion: AngleStep > 0 && AngleStep <= pi / 16
Art der Optimierung und optional Methode der
Modellgenerierung.
Defaultwert:
'auto'
"auto"
"auto"
"auto"
"auto"
"auto"
Werteliste: 'auto'"auto""auto""auto""auto""auto", 'no_pregeneration'"no_pregeneration""no_pregeneration""no_pregeneration""no_pregeneration""no_pregeneration", 'none'"none""none""none""none""none", 'point_reduction_high'"point_reduction_high""point_reduction_high""point_reduction_high""point_reduction_high""point_reduction_high", 'point_reduction_low'"point_reduction_low""point_reduction_low""point_reduction_low""point_reduction_low""point_reduction_low", 'point_reduction_medium'"point_reduction_medium""point_reduction_medium""point_reduction_medium""point_reduction_medium""point_reduction_medium", 'pregeneration'"pregeneration""pregeneration""pregeneration""pregeneration""pregeneration"
Art der zum Matchen verwendeten Metrik.
Defaultwert:
'ignore_local_polarity'
"ignore_local_polarity"
"ignore_local_polarity"
"ignore_local_polarity"
"ignore_local_polarity"
"ignore_local_polarity"
Werteliste: 'ignore_color_polarity'"ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity""ignore_color_polarity", 'ignore_global_polarity'"ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity""ignore_global_polarity", 'ignore_local_polarity'"ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity""ignore_local_polarity", 'use_polarity'"use_polarity""use_polarity""use_polarity""use_polarity""use_polarity"
Minimaler Kontrast des Objektes in den Suchbildern.
Defaultwert: 5
Wertevorschläge: 1, 2, 3, 5, 7, 10, 20, 30, 40
Sind die Parameterwerte korrekt, dann liefert
create_shape_model_xldcreate_shape_model_xldCreateShapeModelXldcreate_shape_model_xldCreateShapeModelXldCreateShapeModelXld 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.
read_contour_xld_dxfread_contour_xld_dxfReadContourXldDxfread_contour_xld_dxfReadContourXldDxfReadContourXldDxf,
edges_sub_pixedges_sub_pixEdgesSubPixedges_sub_pixEdgesSubPixEdgesSubPix,
select_contours_xldselect_contours_xldSelectContoursXldselect_contours_xldSelectContoursXldSelectContoursXld
find_shape_modelfind_shape_modelFindShapeModelfind_shape_modelFindShapeModelFindShapeModel,
find_shape_modelsfind_shape_modelsFindShapeModelsfind_shape_modelsFindShapeModelsFindShapeModels,
get_shape_model_paramsget_shape_model_paramsGetShapeModelParamsget_shape_model_paramsGetShapeModelParamsGetShapeModelParams,
clear_shape_modelclear_shape_modelClearShapeModelclear_shape_modelClearShapeModelClearShapeModel,
write_shape_modelwrite_shape_modelWriteShapeModelwrite_shape_modelWriteShapeModelWriteShapeModel,
set_shape_model_originset_shape_model_originSetShapeModelOriginset_shape_model_originSetShapeModelOriginSetShapeModelOrigin,
set_shape_model_paramset_shape_model_paramSetShapeModelParamset_shape_model_paramSetShapeModelParamSetShapeModelParam,
set_shape_model_metricset_shape_model_metricSetShapeModelMetricset_shape_model_metricSetShapeModelMetricSetShapeModelMetric
create_scaled_shape_model_xldcreate_scaled_shape_model_xldCreateScaledShapeModelXldcreate_scaled_shape_model_xldCreateScaledShapeModelXldCreateScaledShapeModelXld,
create_aniso_shape_model_xldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldcreate_aniso_shape_model_xldCreateAnisoShapeModelXldCreateAnisoShapeModelXld
set_systemset_systemSetSystemset_systemSetSystemSetSystem,
get_systemget_systemGetSystemget_systemGetSystemGetSystem
Matching