set_shape_model_clutter
— Setzen der Störparameter eines Formmodells.
set_shape_model_clutter(ClutterRegion : : ModelID, HomMat2D, ClutterContrast, GenParamName, GenParamValue : )
set_shape_model_clutter
setzt die Störparameter eines Formmodells
ModelID
, d.h. es wird eine Region relativ zum Formmodell definiert,
in der im Suchbild keine (oder zu schwache) Störungen auftreten sollen.
Hilfreich ist dies beispielsweise, wenn in einem Suchbereich mit sich
wiederholendem Muster nach einer Instanz des Modells gesucht wird, in deren
Umgebung ein Teil des Musters nicht auftritt.
Das HDevelop Beispielprogramm find_shape_model_clutter.hdev
zeigt
z.B. wie mit Hilfe von Störparametern spezifische Matches in Bildern von
Kugelgitteranordnungen (BGA) gefunden werden können.
(1) | (2) | (3) | (4) | (5) |
Für Matches im Suchbild erhöhen Kanten, die in der Störregion
gefunden werden, den Störwert. Dieser wird von den Operatoren
find_shape_model
, find_scaled_shape_model
,
find_aniso_shape_model
, find_shape_models
,
find_scaled_shape_models
und find_aniso_shape_models
zusätzlich im Parameter Score
ausgegeben, nach den üblichen
Werten aus der Berechnung der Sichtbarkeit des Modells.
Es ist zu beachten, dass im Eingabeparameter MinScore
dieser
Operatoren zusätzlich Angaben zum maximalen Störwert (für welchen
Matches zurückgegeben werden sollen) gemacht werden. Für weitere
Informationen zum Setzen von MinScore
, siehe die entsprechende
Operatorreferenz.
Um die Störregion relativ zu den Modellkonturen zu definieren, braucht man
zum einen die Region ClutterRegion
und zum anderen die
Transformationsmatrix HomMat2D
, welche die Position der
Modellkonturen im Suchbild abbildet.
Ein typisches Vorgehen um eine geeignete Transformationsmatrix zu erhalten
wäre, eine Instanz im Bild zu finden (beispielsweise
mit find_shape_model
) und aus den Ausgabeparametern mit Hilfe der
Prozedur get_hom_mat2d_from_matching_result
die
Transformationsmatrix HomMat2D
zu berechnen.
Im Anschluss kann ClutterRegion
für die gefundene
Instanz im gleichen Bild spezifiziert werden.
Mit ClutterRegion
sollten dabei sämtliche Störungen, welche
typischerweise im Umfeld der gefundenen Instanzen auftreten,
abgedeckt sein. Es wird empfohlen
die Störregion größer als notwendig zu spezifizieren wenn die
Skalierungen des Formmodells stark variieren. Die Robustheit der Suche kann
verbessert werden indem die Störregion nicht zu nah an den erwarteten
Modellkonturen gewählt wird.
Der Parameter ClutterContrast
bestimmt den Kontrast, den eine
Kante in der Störregion aufweisen muss, um als Störung gewertet
zu werden. In vielen Anwendungsfällen ist der Parameter Contrast
,
welcher zur Erstellung des Formmodells genutzt wurde, auch hierfür ein
sinnvoller Wert. ClutterContrast
darf dabei nicht kleiner sein
als der Parameter MinContrast
des Formmodells, ansonsten wird
eine Fehlermeldung zurückgegeben.
Die Polarität der gefundenen Störkanten wird ignoriert, d.h. helle
Objekte auf dunklem Hintergrund erzielen den selben Störwert wie
dunkle Objekte auf hellem Hintergrund, unabhängig vom Parameter
Metric
des Formmodells.
Es ist zu beachten, dass von sämtlichen Ergebnissen des formbasierten
Matchings die Störwerte am stärksten von Beleuchtungsänderungen
beeinflusst werden.
Wird GenParamName
auf 'clutter_border_mode' gesetzt, kann
das Verhalten des Störwertes für den Fall, dass die Störregion nicht komplett
im Bildbereich enthalten ist, beeinflusst werden. Als entsprechende Werte für
'clutter_border_mode' (GenParamValue
) kommen
'clutter_border_average' oder 'clutter_border_empty' in
Frage.
'clutter_border_average' :
Wenn GenParamValue
auf 'clutter_border_average'
(Standardwert) gesetzt wird, wird angenommen, dass der verdeckte Teil
durschnittlich den selben Störanteil aufweist wie der sichtbare Teil. Ist
die Störregion gar nicht zu sehen, wird der Störwert des gefundenen Matches
auf 0.0 gesetzt.
'clutter_border_empty' :
Wird GenParamValue
auf 'clutter_border_empty' gesetzt,
wird angenommen, dass der verdeckte Teil der Störregionen keine Störungen
enthält.
Es ist zu beachten, dass mit 'clutter_border_average' für
GenParamValue
höhere Störwerte erreicht werden.
Die Nutzung von Störparametern im Formmodell kann mit
set_shape_model_param
aktiviert oder deaktiviert werden.
Für neu generierte Formmodelle ist die Nutzung von Störparametern
deaktiviert. Nach dem Aufruf von set_shape_model_clutter
ist die
Nutzung von Störparametern aktiviert. Je nach Aktivierungsstatus
erwarten die jeweiligen find-Operatoren eine
unterschiedliche Anzahl an Eingabeparametern für MinScore
(siehe auch die entsprechenden Operatorreferenzen).
Die gesetzten Störparameter sowie der Wert von 'use_clutter'
können mit dem Operator get_shape_model_clutter
abgefragt werden.
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.
ClutterRegion
(input_object) region →
object
Region, in der keine Störungen auftreten sollen.
ModelID
(input_control, Zustand wird modifiziert) shape_model →
(handle)
Handle des Modells.
HomMat2D
(input_control) hom_mat2d →
(real)
Transformationsmatrix.
ClutterContrast
(input_control) number →
(integer)
Minimaler Kontrast für Störungen im Suchbild.
Defaultwert: 128
GenParamName
(input_control) attribute.name(-array) →
(string)
Parameternamen.
Werteliste: 'clutter_border_mode'
GenParamValue
(input_control) attribute.value(-array) →
(real / integer / string)
Parameterwerte.
Werteliste: 'clutter_border_average' , 'clutter_border_empty'
* * Create a shape model. read_image (ImageModel, '/bga_gap/bga_gap_01.png') gen_circle (ROI, 753.869, 551.624, 28.4027) reduce_domain (ImageModel, ROI, ImageReduced) create_aniso_shape_model (ImageReduced, 'auto', rad(0), rad(0), 'auto', 0.95, 1.05, 'auto', 0.95, 1.05, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID) * * Specify the clutter parameters. find_aniso_shape_model (ImageModel, ModelID, rad(0), rad(0), 0.95, 1.05, 0.95, 1.05, 0.83, 0, 0.0, 'least_squares', 0, 0.0, Row, Column, Angle, ScaleR, ScaleC, Score) get_hom_mat2d_from_matching_result (Row[0], Column[0], Angle[0], ScaleR[0], ScaleC[0], HomMat2D) * gen_circle (ROI_0, 700.655, 548.666, 21.6273) gen_circle (ROI_1_0, 810.655, 550.611, 21.6273) union2 (ROI_0, ROI_1_0, ClutterRegion) * ClutterContrast := 12 * * Set the clutter parameters into shape model. set_shape_model_clutter (ClutterRegion, ModelID, HomMat2D, ClutterContrast, [], []) * * Use the shape model to detect objects with a small amount of clutter read_image (Image,'/bga_gap/bga_gap_02.png') MaxClutter := 0.09 find_aniso_shape_model (Image, ModelID, rad(0), rad(0), 0.95, 1.05, 0.95, 1.05, [0.83, MaxClutter], 0, 0.0, 'least_squares', [4, 3], 0.0, Row, Column, Angle, ScaleR, ScaleC, Score) * * Visualize the matches dev_display_shape_matching_results (ModelID, ['green', 'red'], Row, Column, Angle, ScaleR, ScaleC, 0) Clutter := Score[|Score|/2:|Score|-1] Score := Score[0:|Score|/2-1] dev_inspect_ctrl ([Score, Clutter])
Sind die Parameterwerte korrekt, dann liefert
set_shape_model_clutter
den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine
Fehlerbehandlung durchgeführt.
create_shape_model
,
create_scaled_shape_model
,
create_aniso_shape_model
,
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
,
find_shape_models
,
find_scaled_shape_models
,
find_aniso_shape_models
,
get_shape_model_clutter
Matching