Apply an arbitrary affine 2D transformation to pixel coordinates.
affine_trans_pixel applies an arbitrary affine 2D transformation, i.e., scaling, rotation, translation, and slant (skewing), to the input pixels (Row,Col) and returns the resulting pixels in (RowTrans,ColTrans); the input and output pixels are subpixel precise coordinates. The affine transformation is described by the homogeneous transformation matrix given in HomMat2D.
The difference between affine_trans_pixel and affine_trans_point_2d lies in the used coordinate system: affine_trans_pixel uses a coordinate system with origin in the upper left corner of the image, while affine_trans_point_2d uses the standard image coordinate system, whose origin lies in the middle of the upper left pixel and which is also used by operators like area_center.
Applying affine_trans_pixel corresponds to the following chain of tansformations (input and output pixels as homogeneous vectors):
/ RowTrans \ / 1 0 -0.5 \ / 1 0 +0.5 \ / Row \ | ColTrans | = | 0 1 -0.5 | * HomMat2D * | 0 1 +0.5 | * | Col | \ 1 / \ 0 0 1 / \ 0 0 1 / \ 1 /
Hence,
affine_trans_pixel (HomMat2D, Row, Col, RowTrans, ColTrans)corresponds to the following operator sequence:
affine_trans_point_2d (HomMat2D, Row+0.5, Col+0.5, RowTmp, ColTmp) RowTrans := RowTmp-0.5 ColTrans := ColTmp-0.5
|
HomMat2D (input_control) |
hom_mat2d-array -> real |
| Input transformation matrix. | |
|
Row (input_control) |
point.x(-array) -> real / integer |
| Input pixel(s) (row coordinate). | |
| Default value: 64 | |
| Suggested values: 0, 16, 32, 64, 128, 256, 512, 1024 | |
|
Col (input_control) |
point.y(-array) -> real / integer |
| Input pixel(s) (column coordinate). | |
| Default value: 64 | |
| Suggested values: 0, 16, 32, 64, 128, 256, 512, 1024 | |
|
RowTrans (output_control) |
point.x(-array) -> real |
| Output pixel(s) (row coordinate). | |
|
ColTrans (output_control) |
point.y(-array) -> real |
| Output pixel(s) (column coordinate). | |
If the matrix HomMat2D represents an affine transformation (i.e., not a projective transformation), affine_trans_pixel returns 2 (H_MSG_TRUE). Otherwise, an exception is raised.
affine_trans_pixel is reentrant and processed without parallelization.
hom_mat2d_translate, hom_mat2d_translate_local, hom_mat2d_scale, hom_mat2d_scale_local, hom_mat2d_rotate, hom_mat2d_rotate_local, hom_mat2d_slant, hom_mat2d_slant_local
Foundation