map_image
— Transformieren eines Bildes unter Verwendung einer allgemeinen
Abbildungsvorschrift.
map_image(Image, Map : ImageMapped : : )
map_image
transformiert ein Bild Image
unter Verwendung
einer allgemeinen Abbildungsvorschrift Map
, die z.B. mit
gen_image_to_world_plane_map
oder
gen_radial_distortion_map
erzeugt wurde. Das Mehrkanalbild
Map
muss dabei folgenden Aufbau besitzen:
Höhe und Breite von Map
legen die Größe des Ausgabebildes
ImageMapped
fest. Die Anzahl der Kanäle in Map
legt
fest, ob bei der Transformation keine Interpolation oder bilineare
Interpolation angewendet werden soll.
Besteht Map
lediglich aus einem Kanal, so wird bei der
Transformation keine Interpolation angewendet. In diesem Kanal
(Bildtyp 'int4' bzw. 'int8' in HALCON XL falls der Wertebereich von 'int4'
nicht ausreicht) ist für jedes Pixel
des Ergebnisbildes ImageMapped
die lineare Koordinate desjenigen
Pixels im Eingabebild Image
gespeichert,
von dem der Grauwert übernommen werden soll.
Soll zwischen den Pixeln im Eingabebild bilinear interpoliert werden,
so muss Map
aus einem Bild mit 5 Kanälen bestehen.
Der erste Kanal (Bildtyp 'int4' bzw. 'int8') beschreibt
die geometrische Transformation. Die Kanäle 2-5 (Bildtyp 'uint2')
bestehen enthalten jeweils die Gewichte der vier
benachbarten Pixel für die bilinaere Interpolation. Die Gewichte
[0...1] sind dabei auf den Wertebereich des 'uint2' Bildes skaliert
und besitzen daher ganzzahlige Werte im Bereich von 0 bis 65535.
Soll sich die
Helligkeit des transformierten Bildes nicht von der des Eingabebildes
unterscheiden, so ist darauf zu achten, dass die Summe der
vier unskalierten Gewichte jeweils 1 ergibt. In
diesem Zusammenhang ist auch darauf zu achten, dass der Wertebereich
des Ausgabebildes ImageMapped
nicht überschritten wird.
Der geometrische Bezug zwischen den Kanälen 2-5 ist durch
folgende Skizze ersichtlich:
2 | 3 |
4 | 5 |
Bezugspunkt der vier Pixel ist dabei jeweils das linke obere Pixel, dessen lineare Koordinate im ersten Kanal gespeichert ist.
Es ist außerdem möglich eine Map
zu verwenden die aus einem
Vektorfeld des semantischen Typs 'vector_field_absolute' besteht.
Dieses enthält die subpixelgenauen Koordinaten der Abbildungsfunktion.
Die beiden oben erläuterten Typen können mittels
convert_map_type
in diesen Typ überführt werden. Dieser Typ ist
der einzige Typ, der auf Compute Devices unterstützt wird!
Es ist darauf zu achten, dass der Wertebereich des Ausgabebildes
ImageMapped
nicht überschritten wird.
Aus Laufzeitgründen wird nicht überprüft, ob die linearen Koordinaten im
ersten Kanal von Map
innerhalb des Eingabebildes liegen. Es muss
also darauf geachtet werden, dass diese Bedingung erfüllt ist, da es sonst
zum Programmabsturz kommen kann!
map_image
wird nur dann automatisch parallelisiert, wenn
Map
bilineare Interpolation nutzt.
map_image
wird nur für eine Abbildungsvorschrift vom Typ
'coord_map_sub_pix' auf einem OpenCL fähigen Compute Device ausgeführt.
Ferner darf das Eingangsbild die maximale Größe für Bildobjekte des
ausgewählten Gerätes nicht überschreiten.
Image
(input_object) (multichannel-)image(-array) →
object (byte / uint2 / real)
Zu transformierendes Bild.
Map
(input_object) (multichannel-)image →
object (int4 / int8 / uint2 / vector_field*) *erlaubt für Compute Devices
Bild mit Transformationsdaten.
ImageMapped
(output_object) (multichannel-)image(-array) →
object (byte / uint2 / real)
Transformiertes Bild.
Sind die Parameterwerte korrekt, dann liefert
map_image
den Wert 2 (H_MSG_TRUE).
gen_image_to_world_plane_map
,
gen_radial_distortion_map
,
convert_map_type
affine_trans_image
,
rotate_image
Foundation