create_variation_model
— Erzeugung eines Variationsmodells zum Bildvergleich.
create_variation_model
erzeugt ein Variationsmodell, das zum
Bildvergleich verwendet werden kann. Der Handle auf das generierte
Variationsmodell wird in ModelID
zurückgeliefert.
Das Variationsmodell wird typischerweise verwendet, um korrekt gefertigte Objekte („gute Objekte“) von falsch gefertigten Objekten („schlechte Objekte“) zu unterscheiden. Vorausgesetzt wird hierbei, dass sich die Unterscheidung allein aufgrund der Grauwerte des Objektes treffen läßt.
Das Variationsmodell besteht aus einem idealen Bild des Objektes,
mit dem das Bild eines Objektes später mit
compare_variation_model
oder
compare_ext_variation_model
verglichen werden soll, und
einem Bild, das angibt, wie sehr das Objekt an seinen verschiedenen
Punkten im Grauwert variieren kann. Die Größe der Bilder, mit
denen das Variationsmodell trainiert wird und die später zum
Vergleich verwendet werden, wird mit Width
und
Height
festgelegt. Der Bildtyp der Trainings- und
Vergleichsbilder wird mit Type
angegeben.
Das Variationsmodell wird aus mehrern Bildern guter Objekte
trainiert. Daher ist es unerläßlich, daß die Trainingsbilder die
Objekte in derselben Lage zeigen. Falls dies nicht garantiert
werden kann, kann die Lage des Objektes z.B. mittels Matching (siehe
find_shape_model
) bestimmt werden. Hierauf kann das Bild
mit affine_trans_image
in eine Standardlage rotiert werden.
Mit dem Parameter Mode
kann festgelegt werden, wie das Bild
des idealen Objektes und das zugehörige Variationsbild berechnet
werden. Für Mode
='standard' wird das ideale Bild
des Objektes aus dem Mittelwert aller Trainingsbilder an den
jeweiligen Bildpunkten berechnet. Das zugehörige Variationsbild
wird aus der Standardabweichung der Trainingsbilder an den
jeweiligen Bildpunkten berechnet. Dieser Modus hat den Vorteil,
daß das Modell iterativ trainiert werden kann, d.h. sobald ein
Bild eines guten Objektes vorliegt, kann es mit
train_variation_model
trainiert werden. Der Nachteil dieses
Modus ist, daß sehr genau darauf geachtet werden muß, dass
ausschließlich Bilder guter Objekte trainiert werden, da der
Mittelwert und die Standardabweichung nicht robust gegenüber
Ausreißern sind, d.h. wenn ein Bild eines schlechten Objektes aus
Versehen mittrainiert wird, kann die Genauigkeit des idealen
Objektbildes und des Variationsbildes beeinträchtigt werden.
Falls nicht verhindert werden kann, dass das Variationsmodell mit
Bildern von Objekten trainiert wird, die Fehler enthalten, kann
Mode
='robust' verwendet werden. In diesem Modus
wird das ideale Bild des Objektes aus dem Median aller
Trainingsbilder an den jeweiligen Bildpunkten berechnet. Das
zugehörige Variationsbild wird aus dem Median der absoluten
Abweichungen der Trainingsbilder vom Median an den jeweiligen
Bildpunkten berechnet und geeignet skaliert. Dieser Modus hat den
Vorteil, dass das berechnete Variationsmodell robust gegenüber
Ausreißern ist. Es hat den Nachteil, dass es nicht iterativ
trainiert werden kann, d.h. alle Trainingsbilder müssen mit
concat_obj
aufgesammelt werden und in einem Aufruf von
train_variation_model
trainiert werden.
In manchen Fällen ist es nicht möglich, mehrere Trainingsbilder
aufzunehmen. In diesem Fall kann durch Trainieren des einzigen
Trainingsbildes kein sinnvolles Variationsbild erzeugt werden. Um
dies zu umgehen, können synthetische Variationen des
Trainingsbildes erzeugt werden, z.B. durch Verschieben des
Trainingsbildes um Pixel in Zeilen- und
Spaltenrichtung oder durch Grauwertmorphologie (z.B. mit
gray_erosion_shape
und gray_dilation_shape
) und dann
trainiert werden. Eine andere Möglichkeit, ein Variationsmodell
aus einem Trainingsbild zu erzeugen, ist, das Modell mit
Mode
='direct' zu erzeugen. In diesem Fall kann
das Variationsmodell nur dadurch trainiert werden, dass das ideale
Bild des Objektes und das Variationsbild direkt mit
prepare_direct_variation_model
spezifiziert wird. Da
typischerweise die Variation an den Kanten des Objektes groß ist,
ist es sinnvoll, das Variationsbild mit Kantenoperatoren wie
sobel_amp
, edges_image
oder gray_range_rect
zu erzeugen.
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.
Width
(input_control) extent.x →
(integer)
Breite der zu vergleichenden Bilder.
Defaultwert: 640
Wertevorschläge: 160, 192, 320, 384, 640, 768
Height
(input_control) extent.y →
(integer)
Höhe der zu vergleichenden Bilder.
Defaultwert: 480
Wertevorschläge: 120, 144, 240, 288, 480, 576
Type
(input_control) string →
(string)
Typ der zu vergleichenden Bilder.
Defaultwert: 'byte'
Wertevorschläge: 'byte' , 'int2' , 'uint2'
Mode
(input_control) string →
(string)
Art der Berechnung des Variationsmodells.
Defaultwert: 'standard'
Wertevorschläge: 'standard' , 'robust' , 'direct'
ModelID
(output_control) variation_model →
(handle)
ID des Variationsmodells.
Das mit create_variation_model
erzeugte Modell benötigt
für Mode
= 'standard' und Mode
=
'robust' für Type
= 'byte'
12*Width
*Height
Bytes Speicher. Für
Type
= 'uint2' und Type
=
'int2' werden 14*Width
*Height
Bytes
benötigt. Für Mode
= 'direct' und nachdem die
Trainingsdaten mit clear_train_data_variation_model
gelöscht worden sind, werden für Type
= 'byte'
2*Width
*Height
Bytes benötigt. Für die anderen
Bildtypen werden 4*Width
*Height
benötigt.
create_variation_model
liefert 2 (H_MSG_TRUE) zurück, wenn alle
Parameter korrekt sind.
train_variation_model
,
prepare_direct_variation_model
prepare_variation_model
,
clear_variation_model
,
clear_train_data_variation_model
,
find_shape_model
,
affine_trans_image
Matching