map_image — Apply a general transformation to an image.
map_image(Image, Map : ImageMapped : : )
map_image transforms an image Image using an arbitrary
transformation Map which, for example, was previously generated
using gen_image_to_world_plane_map or
gen_radial_distortion_map. The multi-channel image Map
must be organized as follows:
The height and the width of Map define the size of the output
image ImageMapped. The number of channels in Map defines
whether no interpolation or bilinear interpolation should be used.
If Map only consists of one channel, no interpolation is applied
during the transformation. This channel contains 'int4' (resp. 'int8' in
HALCON XL if the value range of 'int4' is not sufficient) values that
describe the geometric transformation: For each pixel in the output image
ImageMapped the linearized coordinate of the pixel in the input
image Image from which the gray value should be taken is stored.
If bilinear interpolation between the pixels in the input image should be
applied, Map must consist of 5 channels. The first channel again
consists of an 'int4' resp. 'int8' image and describes the geometric
transformation. The channels 2-5 consist of an 'uint2' image each and
contain the weights [0...1] of the four neighboring pixels that are used
during bilinear interpolation. If the overall brightness of the output image
ImageMapped should not differ from the overall brightness of the
input image Image, the sum of the four unscaled weights must
be 1 for each pixel. The
weights [0...1] are scaled to the range of values of the
'uint2' image and therefore hold integer values from 0 to 65535.
Furthermore, the weights must be chosen in a way that the range of values
of the output image ImageMapped is not exceeded. The geometric
relation between
the four channels 2-5 is illustrated in the following sketch:
| 2 | 3 |
| 4 | 5 |
The reference point of the four pixels is the upper left pixel. The linearized coordinate of the reference point is stored in the first channel.
It is also possible to use a Map that consists of a vector field
containing absolute subpixel precise row and column coordinates
(i.e., the field must be of the semantic type 'vector_field_absolute'). The
two Map types described above can be converted into this type
using convert_map_type. This type is the only type supported on
compute devices!
The weights must be chosen in a way that the range of values of the output
image ImageMapped is not exceeded.
For runtime reasons during the mapping process, it is not checked whether
the linearized coordinates which are stored in the
first channel of Map, lie inside the input image. Thus, it must
be ensured by the user that this constraint is fulfilled. Otherwise, the
program may crash!
map_image is parallelized automatically if and only if Map
uses bilinear interpolation.
map_image is executed on an OpenCL compute device only if the
input map is of type 'coord_map_sub_pix' and if the input image does not
exceed the maximum size of image objects of the selected device.
Image (input_object) (multichannel-)image(-array) → object (byte / uint2 / real)
Image to be mapped.
Map (input_object) (multichannel-)image → object (int4 / int8 / uint2 / vector_field*) *allowed for compute devices
Image containing the mapping data.
ImageMapped (output_object) (multichannel-)image(-array) → object (byte / uint2 / real)
Mapped image.
map_image returns TRUE if all parameter values
are correct. If necessary, an exception is raised.
gen_image_to_world_plane_map,
gen_radial_distortion_map,
convert_map_type
affine_trans_image,
rotate_image
Foundation