![]() |
Leptonica
1.82.0
Image processing and image analysis suite
|
#include <math.h>
#include "allheaders.h"
Go to the source code of this file.
Functions | |
l_float32 * | createMatrix2dTranslate (l_float32 transx, l_float32 transy) |
l_float32 * | createMatrix2dScale (l_float32 scalex, l_float32 scaley) |
l_float32 * | createMatrix2dRotate (l_float32 xc, l_float32 yc, l_float32 angle) |
PTA * | ptaTranslate (PTA *ptas, l_float32 transx, l_float32 transy) |
PTA * | ptaScale (PTA *ptas, l_float32 scalex, l_float32 scaley) |
PTA * | ptaRotate (PTA *ptas, l_float32 xc, l_float32 yc, l_float32 angle) |
BOXA * | boxaTranslate (BOXA *boxas, l_float32 transx, l_float32 transy) |
BOXA * | boxaScale (BOXA *boxas, l_float32 scalex, l_float32 scaley) |
BOXA * | boxaRotate (BOXA *boxas, l_float32 xc, l_float32 yc, l_float32 angle) |
PTA * | ptaAffineTransform (PTA *ptas, l_float32 *mat) |
BOXA * | boxaAffineTransform (BOXA *boxas, l_float32 *mat) |
l_ok | l_productMatVec (l_float32 *mat, l_float32 *vecs, l_float32 *vecd, l_int32 size) |
l_ok | l_productMat2 (l_float32 *mat1, l_float32 *mat2, l_float32 *matd, l_int32 size) |
l_ok | l_productMat3 (l_float32 *mat1, l_float32 *mat2, l_float32 *mat3, l_float32 *matd, l_int32 size) |
l_ok | l_productMat4 (l_float32 *mat1, l_float32 *mat2, l_float32 *mat3, l_float32 *mat4, l_float32 *matd, l_int32 size) |
Composable coordinate transforms l_float32 *createMatrix2dTranslate() l_float32 *createMatrix2dScale() l_float32 *createMatrix2dRotate()
Special coordinate transforms on pta PTA *ptaTranslate() PTA *ptaScale() PTA *ptaRotate()
Special coordinate transforms on boxa BOXA *boxaTranslate() BOXA *boxaScale() BOXA *boxaRotate()
General coordinate transform on pta and boxa PTA *ptaAffineTransform() BOXA *boxaAffineTransform()
Matrix operations l_int32 l_productMatVec() l_int32 l_productMat2() l_int32 l_productMat3() l_int32 l_productMat4()
Definition in file affinecompose.c.
[in] | boxas | |
[in] | mat | 3x3 transform matrix; canonical form |
Definition at line 487 of file affinecompose.c.
References boxaConvertToPta(), ptaAffineTransform(), ptaConvertToBoxa(), and ptaDestroy().
[in] | boxas | |
[in] | xc,yc | location of center of rotation |
[in] | angle | rotation in radians; clockwise is positive |
Notes: (1) See createMatrix2dRotate() for details of transform.
Definition at line 418 of file affinecompose.c.
References boxaConvertToPta(), ptaConvertToBoxa(), ptaDestroy(), and ptaRotate().
[in] | boxas | |
[in] | scalex | horizontal scale factor |
[in] | scaley | vertical scale factor |
Notes: (1) See createMatrix2dScale() for details of transform.
Definition at line 385 of file affinecompose.c.
References boxaConvertToPta(), ptaConvertToBoxa(), ptaDestroy(), and ptaScale().
[in] | boxas | |
[in] | transx | x component of translation wrt. the origin |
[in] | transy | y component of translation wrt. the origin |
Notes: (1) See createMatrix2dTranslate() for details of transform.
Definition at line 352 of file affinecompose.c.
References boxaConvertToPta(), ptaConvertToBoxa(), ptaDestroy(), and ptaTranslate().
l_float32* createMatrix2dRotate | ( | l_float32 | xc, |
l_float32 | yc, | ||
l_float32 | angle | ||
) |
[in] | xc,yc | location of center of rotation |
[in] | angle | rotation in radians; clockwise is positive |
Notes: (1) The rotation is equivalent to: v' = Av where v and v' are 1x3 column vectors in the form v = [x, y, 1]^ ^ denotes transpose and the affine rotation matrix is A = [ cosa -sina xc*1-cosa + yc*sina sina cosa yc*1-cosa - xc*sina 0 0 1 ]
If the rotation is about the origin, xc, yc) = (0, 0 and this simplifies to A = [ cosa -sina 0 sina cosa 0 0 0 1 ]
These relations follow from the following equations, which you can convince yourself are correct as follows. Draw a circle centered on xc,yc) and passing through (x,y), with (x',y') on the arc at an angle 'a' clockwise from (x,y). [ Hint: cosa + b = cosa * cosb - sina * sinb sina + b = sina * cosb + cosa * sinb ]
x' - xc = x - xc) * cosa - (y - yc * sina y' - yc = x - xc) * sina + (y - yc * cosa
Definition at line 179 of file affinecompose.c.
l_float32* createMatrix2dScale | ( | l_float32 | scalex, |
l_float32 | scaley | ||
) |
[in] | scalex | horizontal scale factor |
[in] | scaley | vertical scale factor |
Notes: (1) The scaling is equivalent to: v' = Av where v and v' are 1x3 column vectors in the form v = [x, y, 1]^ ^ denotes transpose and the affine scaling matrix is A = [ sx 0 0 0 sy 0 0 0 1 ]
(2) We consider scaling as with respect to a fixed origin. In other words, the origin is the only point that doesn't move in the scaling transform.
Definition at line 130 of file affinecompose.c.
l_float32* createMatrix2dTranslate | ( | l_float32 | transx, |
l_float32 | transy | ||
) |
[in] | transx | x component of translation wrt. the origin |
[in] | transy | y component of translation wrt. the origin |
Notes: (1) The translation is equivalent to: v' = Av where v and v' are 1x3 column vectors in the form v = [x, y, 1]^ ^ denotes transpose and the affine translation matrix is A = [ 1 0 tx 0 1 ty 0 0 1 ]
(2) We consider translation as with respect to a fixed origin. In a clipping operation, the origin moves and the points are fixed, and you use (-tx, -ty) where (tx, ty) is the translation vector of the origin.
Definition at line 93 of file affinecompose.c.
l_ok l_productMat2 | ( | l_float32 * | mat1, |
l_float32 * | mat2, | ||
l_float32 * | matd, | ||
l_int32 | size | ||
) |
[in] | mat1 | square matrix, as a 1-dimensional size^2 array |
[in] | mat2 | square matrix, as a 1-dimensional size^2 array |
[in] | matd | square matrix; product stored here |
[in] | size | of matrices |
Definition at line 558 of file affinecompose.c.
Referenced by l_productMat3(), and l_productMat4().
l_ok l_productMat3 | ( | l_float32 * | mat1, |
l_float32 * | mat2, | ||
l_float32 * | mat3, | ||
l_float32 * | matd, | ||
l_int32 | size | ||
) |
[in] | mat1 | square matrix, as a 1-dimensional size^2 array |
[in] | mat2 | square matrix, as a 1-dimensional size^2 array |
[in] | mat3 | square matrix, as a 1-dimensional size^2 array |
[in] | matd | square matrix; product stored here |
[in] | size | of matrices |
Definition at line 597 of file affinecompose.c.
References l_productMat2().
Referenced by l_productMat4().
l_ok l_productMat4 | ( | l_float32 * | mat1, |
l_float32 * | mat2, | ||
l_float32 * | mat3, | ||
l_float32 * | mat4, | ||
l_float32 * | matd, | ||
l_int32 | size | ||
) |
[in] | mat1 | square matrix, as a 1-dimensional size^2 array |
[in] | mat2 | square matrix, as a 1-dimensional size^2 array |
[in] | mat3 | square matrix, as a 1-dimensional size^2 array |
[in] | mat4 | square matrix, as a 1-dimensional size^2 array |
[in] | matd | square matrix; product stored here |
[in] | size | of matrices |
Definition at line 638 of file affinecompose.c.
References l_productMat2(), and l_productMat3().
l_ok l_productMatVec | ( | l_float32 * | mat, |
l_float32 * | vecs, | ||
l_float32 * | vecd, | ||
l_int32 | size | ||
) |
[in] | mat | square matrix, as a 1-dimensional size^2 array |
[in] | vecs | input column vector of length size |
[in] | vecd | result column vector |
[in] | size | matrix is size x size; vectors are length size |
Definition at line 522 of file affinecompose.c.
Referenced by ptaAffineTransform().
[in] | ptas | for initial points |
[in] | mat | 3x3 transform matrix; canonical form |
Definition at line 451 of file affinecompose.c.
References l_productMatVec(), ptaAddPt(), ptaCreate(), ptaGetCount(), and ptaGetPt().
Referenced by boxaAffineTransform().
[in] | ptas | for initial points |
[in] | xc,yc | location of center of rotation |
[in] | angle | rotation in radians; clockwise is positive |
Notes; (1) See createMatrix2dScale() for details of transform. (2) This transform can be thought of as composed of the sum of two parts: a) an (x,y)-dependent rotation about the origin: xr = x * cosa - y * sina yr = x * sina + y * cosa b) an (x,y)-independent translation that depends on the rotation center and the angle: xt = xc - xc * cosa + yc * sina yt = yc - xc * sina - yc * cosa The translation part (xt,yt) is equal to the difference between the center (xc,yc) and the location of the center after it is rotated about the origin.
Definition at line 307 of file affinecompose.c.
References ptaAddPt(), ptaCreate(), ptaGetCount(), and ptaGetPt().
Referenced by boxaRotate().
[in] | ptas | for initial points |
[in] | scalex | horizontal scale factor |
[in] | scaley | vertical scale factor |
Notes: (1) See createMatrix2dScale() for details of transform.
Definition at line 256 of file affinecompose.c.
References ptaAddPt(), ptaCreate(), ptaGetCount(), and ptaGetPt().
Referenced by boxaScale().
[in] | ptas | for initial points |
[in] | transx | x component of translation wrt. the origin |
[in] | transy | y component of translation wrt. the origin |
Notes: (1) See createMatrix2dTranslate() for details of transform.
Definition at line 217 of file affinecompose.c.
References ptaAddPt(), ptaCreate(), ptaGetCount(), and ptaGetPt().
Referenced by boxaTranslate().