set_shape_model_metric
— Setzen der Metrik eines Formmodells, das aus XLD-Konturen erzeugt wurde.
set_shape_model_metric
ändert den Wert des Parameters Metric
der bei der Erstellung des Formmodells ModelID
gesetzt wurde.
Hierfür wird die Polarität der Modellkanten unter Verwendung des Bildes
Image
bestimmt. Die Transformationsmatrix HomMat2D
beschreibt die Transformation, die die Modellkanten an die entsprechende
Stelle des Bildes transformiert, an der das Objekt erscheint.
Der Parameter Metric
legt fest, unter welchen Bedingungen das Muster
später im Suchbild noch erkannt wird. Falls Metric
=
'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 Metric
= '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_model
erhöht sich in diesem Fall
geringfügig.
Es muss sichergestellt werden, dass die Objektkanten im Bild Image
die gleiche (oder inverse) Polarität aufweisen wie die entsprechenden Kanten
im späteren Suchbild. Insbesondere darf das Objekt nicht verdeckt sein und
der Hintergrund muss entweder heller oder dunkler sein als das Objekt.
Ansonsten stimmt die Polarität der Modellkanten nicht mit der Polarität der
Kanten im Suchbild überein und das Formmodell kann dort nicht gefunden
werden. Zu beachten ist, dass nur die Polarität der Kanten bestimmt wird,
nicht ihr Kontrast. Desweiteren ist zu beachten, dass die Polarität nur aus
einem einkanaligen Bild bestimmt wird. Wird ein Mehrkanalbild in
Image
übergeben, so wird nur der erste Kanal verwendet (und keine
Fehlermeldung zurückgegeben).
Die Transformation, die durch die Matrix HomMat2D
definiert ist,
transformiert die Modellkonturen an die Stelle an der das Objekt im Bild
Image
erscheint. Sie kann dadurch bestimmt werden, dass man das
Objekt z.B. mittels find_shape_model
im Bild Image
findet
und anschließend die entsprechende Transformationsmatrix mit der
Prozedur get_hom_mat2d_from_matching_result
berechnet. Der Operator
set_shape_model_metric
ignoriert mit set_shape_model_origin
gesetzte Ursprünge und nimmt stets (0,0) als Ursprung. Wird das Objekt im
Bild Image
gesucht, müssen auch alle anderen Operatoren
den Ursprung im Punkt (0,0) setzen, weshalb set_shape_model_origin
mit (0,0) als Ursprung aufgerufen werden soll.
Eine typische Vorgehensweise besteht darin, zuerst die XLD-Konturen aus einer
Datei einzulesen. Da diese XLD-Konturen keine Polaritätsinformation haben,
muss der Parameter Metric
bei der Erzeugung des Formmodells aus den
XLD-Konturen auf den Wert 'ignore_local_polarity' gesetzt werden.
Dann kann das Modell in einem ersten Suchbild gefunden werden. Aus den
resultierenden Matchingergebnissen lassen sich die Transformationsparameter
bestimmen, die die Modellkonturen an die Stelle des Suchbildes abbilden, an
der das Objekt erscheint. Um die Matchingergebnisse interaktiv zu
kontrollieren, können die Modellkonturen entsprechend transformiert werden.
Ist das Matchingergebnis korrekt, kann der Wert des Parameters
Metric
z.B. zu 'use_polarity' verändert werden. Dies führt
in den nachfolgenden Bildern zu einer schnelleren und robusteren Erkennung.
set_shape_model_metric
kann nur mit Formmodellen genutzt werden,
die aus XLD-Konturen erzeugt wurden.
Dieser Operator modifiziert den Zustand des folgenden Eingabeparameters:
Während der Ausführung dieses Operators muss der Zugriff auf den Wert dieses Parameters synchronisiert werden, wenn er über mehrere Threads hinweg verwendet wird.
Image
(input_object) singlechannelimage →
object (byte / uint2)
Eingabebild, das zur Bestimmung der Polarität verwendet wird.
ModelID
(input_control, Zustand wird modifiziert) shape_model →
(handle)
Handle des Modells.
HomMat2D
(input_control) hom_mat2d →
(real)
Transformationsmatrix.
Metric
(input_control) string →
(string)
Art der zum Matchen verwendeten Metrik.
Defaultwert: 'use_polarity'
Werteliste: 'ignore_global_polarity' , 'use_polarity'
* * Read the contours from file read_contour_xld_dxf (Contours, 'metal-part-01', [], [], DxfStatus) * * Scale the contours such that they correspond to the image hom_mat2d_identity (HomMat2DIdentity) hom_mat2d_scale (HomMat2DIdentity, 3.35, 3.35, 0, 0, HomMat2DScale) affine_trans_contour_xld (Contours, ContoursAffineTrans, HomMat2DScale) * * Create the shape model with Metric='ignore_local_polarity' create_shape_model_xld (ContoursAffineTrans, 'auto', rad(0), rad(360), \ 'auto', 'auto', 'ignore_local_polarity', 5, ModelID) * * Get an image of the object and try to find the object in this image read_image (Image, 'metal-parts/metal-parts-01') find_shape_model (Image, ModelID, rad(0), rad(360), 0.5, 1, 0.5, \ 'least_squares', 0, 0.9, Row, Column, Angle, Score) * * Visualize the match vector_angle_to_rigid (0, 0, 0, Row, Column, Angle, HomMat2D) get_shape_model_contours (ModelContours, ModelID, 1) affine_trans_contour_xld (ModelContours, ModelContoursAffineTrans, HomMat2D) * * Set the matching metric to 'use_polarity', based on the position * of the found object set_shape_model_metric (Image, ModelID, HomMat2D, 'use_polarity') * * Use the shape model to detect the object faster and more robust read_image (Image, 'metal-parts/metal-parts-02') find_shape_model (Image, ModelID, rad(0), rad(360), 0.5, 0, 0.5, \ 'least_squares', 0, 0.9, Row, Column, Angle, Score) * * Visualize the matches for Index := 0 to |Score|-1 by 1 vector_angle_to_rigid (0, 0, 0, Row[Index], Column[Index], Angle[Index], \ HomMat2D) affine_trans_contour_xld (ModelContours, ModelContoursAffineTrans, \ HomMat2D) endfor
Sind die Parameterwerte korrekt, dann liefert
set_shape_model_metric
den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine
Fehlerbehandlung durchgeführt.
create_shape_model_xld
,
create_scaled_shape_model_xld
,
create_aniso_shape_model_xld
find_shape_model
,
find_scaled_shape_model
,
find_aniso_shape_model
create_shape_model_xld
,
create_scaled_shape_model_xld
,
create_aniso_shape_model_xld
Matching