| Table of Contents / Regions / Geometric Transformations | Operators |
affine_trans_region — Apply an arbitrary affine 2D transformation to regions.
affine_trans_region(Region : RegionAffineTrans : HomMat2D, Interpolate : )
affine_trans_region applies an arbitrary affine 2D transformation, i.e., scaling, rotation, translation, and slant (skewing), to the regions given in Region and returns the transformed regions in RegionAffineTrans. The affine transformation is described by the homogeneous transformation matrix given in HomMat2D, which can be created using the operators hom_mat2d_identity, hom_mat2d_scale, hom_mat2d_rotate, hom_mat2d_translate, etc., or be the result of operators like vector_angle_to_rigid.
The components of the homogeneous transformation matrix are interpreted as follows: The row coordinate of the image corresponds to x and the col coordinate corresponds to y of the coordinate system in which the transformation matrix was defined. This is necessary to obtain a right-handed coordinate system for the image. In particular, this assures that rotations are performed in the correct direction. Note that the (x,y) order of the matrices quite naturally corresponds to the usual (row,column) order for coordinates in the image.
The parameter Interpolate determines whether the transformation is to be done by using interpolation internally. If Interpolate is set to 'true', the interpolation 'constant' is used, which is described in detail for affine_trans_image. If Interpolate is set to 'false', the interpolation 'none' is used. An interpolation can lead to smoother region boundaries, especially if regions are enlarged. However, the runtime increases drastically.
affine_trans_region in general is not reversible (clipping and discretization during rotation and scaling).
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 affine_trans_region corresponds to a chain of transformations (see affine_trans_pixel), which is applied to each point of the region (input and output pixels as homogeneous vectors). As an effect, you might get unexpected results when creating affine 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 affine_trans_region:
hom_mat2d_translate(HomMat2D, 0.5, 0.5, HomMat2DTmp) hom_mat2d_translate_local(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted) affine_trans_region(Region, RegionAffinTrans, HomMat2DAdapted, 'false')
Region(s) to be rotated and scaled.
Transformed output region(s).
Number of elements: RegionAffineTrans == Region
Input transformation matrix.
Should the transformation be done using interpolation?
Default value: 'false'
List of values: 'true', 'false'
If the matrix HomMat2D represents an affine transformation (i.e., not a projective transformation), affine_trans_region returns 2 (H_MSG_TRUE). The behavior in case of empty input (no regions given) can be set via set_system('no_object_result',<Result>), the behavior in case of an empty input region via set_system('empty_region_result',<Result>), and the behavior in case of an empty result region via set_system('store_empty_region',<true/false>). If necessary, an exception is raised.
hom_mat2d_identity, hom_mat2d_scale, hom_mat2d_translate, hom_mat2d_invert, hom_mat2d_rotate
move_region, mirror_region, zoom_region
Foundation
| Table of Contents / Regions / Geometric Transformations | Operators |
| HALCON Reference Manual 10.0.2 | Copyright © 1996-2011 MVTec Software GmbH |