projective_trans_region (Operator)

Name

projective_trans_region — Apply a projective transformation to a region.

Signature

projective_trans_region(Regions : TransRegions : HomMat2D, Interpolation : )

Description

projective_trans_region applies the projective transformation specified by the homogeneous matrix HomMat2D on the regions in Regions and returns the transformed regions in TransRegions.

If 'clip_region' is set to its default value 'true' by set_system('clip_region', 'true') or if the transformation is degenerated and thus produces infinite regions, the output region is clipped by the rectangle with upper left corner (0, 0) and lower right corner ('width', 'height'), where 'width' and 'height' are system variables (see also get_system). If 'clip_region' is 'false', the output region is not clipped except by the maximum supported coordinate size 'MAX_FORMAT'. This may result in extremely memory and time intensive computations, so use with care.

Attention

The used coordinate system is the same as in affine_trans_pixel. This means that in fact not HomMat2D is applied but a modified version. Therefore, applying projective_trans_region corresponds to the following chain of transformations, which is applied to each point (Row_i, Col_i) of the region (input and output pixels as homogeneous vectors):

As an effect, you might get unexpected results when creating projective transformations based on coordinates that are derived from the region, e.g., by operators like area_center. For example, if you use this operator to calculate the center of gravity of a rotationally symmetric region and then rotate the region around this point using hom_mat2d_rotate, the resulting region will not lie on the original one. In such a case, you can compensate this effect by applying the following translations to HomMat2D before using it in projective_trans_region:

hom_mat2d_translate(HomMat2D, 0.5, 0.5, HomMat2DTmp) hom_mat2d_translate_local(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted) projective_trans_region(Region, TransRegion, HomMat2DAdapted, 'bilinear')

For an explanation of the different 2D coordinate systems used in HALCON, see the introduction of chapter Transformations / 2D Transformations.

Execution Information

• Multithreading type: reentrant (runs in parallel with non-exclusive operators).
• Automatically parallelized on tuple level.

Parameters

Regions (input_object)  region(-array) object

Input regions.

TransRegions (output_object)  region(-array) object

Output regions.

HomMat2D (input_control)  hom_mat2d (real)

Homogeneous projective transformation matrix.

Interpolation (input_control)  string (string)

Interpolation method for the transformation.

Default value: 'bilinear'

List of values: 'bilinear', 'nearest_neighbor'