hom_mat2d_scale ( : : HomMat2D, Sx, Sy, Px, Py : HomMat2DScale )

Add a scaling to a homogeneous 2D transformation matrix.

hom_mat2d_scale adds a scaling by the scale factors Sx and Sy to the homogeneous 2D transformation matrix HomMat2D and returns the resulting matrix in HomMat2DScale. The scaling is described by a 2x2 scaling matrix S. It is performed relative to the global (i.e., fixed) coordinate system; this corresponds to the following chain of transformation matrices:

                  / Sx 0  0 \
  HomMat2DScale = | 0  Sy 0 | * HomMat2D
                  \ 0  0  1 /

       S = | Sx 0 |
           | 0 Sy |

The point (Px,Py) is the fixed point of the transformation, i.e., this point remains unchanged when transformed using HomMat2DScale. To obtain this behavior, first a translation is added to the input transformation matrix that moves the fixed point onto the origin of the global coordinate system. Then, the scaling is added, and finally a translation that moves the fixed point back to its original position. This corresponds to the following chain of transformations:

                  / 1 0 +Px \   / Sx 0  0 \   / 1 0 -Px \ 
  HomMat2DScale = | 0 1 +Py | * | 0  Sy 0 | * | 0 1 -Py | * HomMat2D
                  \ 0 0  1  /   \ 0  0  1 /   \ 0 0  1  /   


Attention

Note that homogeneous matrices are stored row-by-row as a tuple; the last row is not stored because it is identical for all homogeneous matrices that describe an affine transformation. For example, the homogeneous matrix

    / ra rb tc \
    | rd re tf |
    \ 0  0  1  /

is stored as the tuple [ra, rb, tc, rd, re, tf].


Parameters

HomMat2D (input_control)
affine2d-array -> real
Input transformation matrix.
Number of elements: 6

Sx (input_control)
number -> real / integer
Scale factor along the x-axis.
Default value: 2
Suggested values: 0.125, 0.25, 0.5, 1, 2, 4, 8, 16
Restriction: Sx != 0

Sy (input_control)
number -> real / integer
Scale factor along the y-axis.
Default value: 2
Suggested values: 0.125, 0.25, 0.5, 1, 2, 4, 8, 16
Restriction: Sy != 0

Px (input_control)
point.x -> real / integer
Fixed point of the transformation (x coordinate).
Default value: 0
Suggested values: 0, 16, 32, 64, 128, 256, 512, 1024

Py (input_control)
point.y -> real / integer
Fixed point of the transformation (y coordinate).
Default value: 0
Suggested values: 0, 16, 32, 64, 128, 256, 512, 1024

HomMat2DScale (output_control)
affine2d-array -> real
Output transformation matrix.
Number of elements: 6


Result

hom_mat2d_scale returns 2 (H_MSG_TRUE) if both scale factors are not 0. If necessary, an exception is raised.


Parallelization Information

hom_mat2d_scale is reentrant and processed without parallelization.


Possible Predecessors

hom_mat2d_identity, hom_mat2d_translate, hom_mat2d_scale, hom_mat2d_rotate, hom_mat2d_slant


Possible Successors

hom_mat2d_translate, hom_mat2d_scale, hom_mat2d_rotate, hom_mat2d_slant


Module

Basic operators



Copyright © 1996-2005 MVTec Software GmbH