Computes affine transform coefficients to map the source ROI to the quadrangle with the specified vertex coordinates
IppStatus ippiGetAffineTransform (IppiRect srcRoi , const double quad [4][2], double coeffs[2][3]);
srcRoi |
Region of interest in the source image (of the IppiRect type). |
quad |
Vertex coordinates of the quadrangle, to which the source ROI is mapped by the affine transform function. |
coeffs |
Output array. Contains the target affine transform coefficients. |
The function ippiGetAffineTransform is declared in the ippi.h file. It operates with ROI (see ROI Processing in Geometric Transforms).
This function is used as a support function for ippiWarpAffine. It computes the coefficients coeffs of the affine transform that must be used by the function ippiWarpAffine to map the source rectangular ROI to the quadrangle with the specified vertex coordinates quad. The first dimension [4] of the array quad[4][2] is equal to the number of vertices, and the second dimension [2] means x and y coordinates of the vertex. Quadrangle vertices have the following meaning:
quad[0] corresponds to the transformed top-left corner of the source ROI, quad[1] corresponds to the transformed top-right corner of the source ROI, quad[2] corresponds to the transformed bottom-right corner of the source ROI, quad[3] corresponds to the transformed bottom-left corner of the source ROI.
The function computes the coordinates of the 4th vertex of the destination quadrangle that uniquely depends on the three other vertices. If the computed coordinates are not equal to the ones specified in quad, the function returns the warning message and continues operation with the computed values.
Example “Using Intel IPP Functions for General Affine Transform” shows how to use the function ippiGetAffineTransform.
ippStsNoErr |
Indicates no error. Any other value indicates an error or warning. |
ippStsRectErr |
Indicates an error condition if width or height of the srcRoi is less than or equal to 1. |
ippStsCoeffErr |
Indicates an error condition if c00*c11 - c01*c10 = 0. |
ippStsSizeErr |
Indicates an error condition if srcRoi has a size field with zero or negative value. |
ippStsAffineQuadChanged |
Indicates a warning that coordinates of the 4th vertex of the specified quadrangle quad are not correct. |
void func_warp_affine()
{
int step;
Ipp32f pSrc[8*8] = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 5.0, 5.0, 1.0, 1.0, 1.0,
1.0, 1.0, 5.0, 5.0, 5.0, 5.0, 1.0, 1.0,
1.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 1.0,
1.0, 5.0, 5.0, 5.0, 5.0, 5.0, 5.0, 1.0,
1.0, 1.0, 5.0, 5.0, 5.0, 5.0, 1.0, 1.0,
1.0, 1.0, 1.0, 5.0, 5.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
int srcStep = 8*sizeof(Ipp32f);
IppiSize srcSize = { 8, 8};
IppiRect srcRoi = {0, 0, 8, 8};
Ipp32f pDst[8*8];
Ipp32f pDstB[8*8];
int dstStep = 8*sizeof(ipp32f);
int dstbStep = 8*sizeof(ipp32f);
IppiRect dstRoi = {0, 0, 8, 8};
double quad[4][2] = {{0.0, 0.0},
{7.0, 1.0},
{8.0, 8.0},
{1.0, 7.0}};
double coeffs[2][3]; // affine transform coefficients
ippiGetAffineTransform(srcRoi, quad, coeffs); //computes the affine transform coefficients
ippiSet_32f_C1R(2,pDst,srcStep,srcSize);
ippiWarpAffine_32f_C1R(pSrc, srcSize, srcStep, srcRoi, pDst, dstStep dstRoi, coeffs, IPPI_INTER_NN);
ippiSet_32f_C1R(3,pDstB,srcStep,srcSize);
ippiWarpAffineBack_32f_C1R( pDst, srcSize, dstStep, dstRoi, pDstB, dstbStep, dstRoi, coeffs, IPPI_INTER_NN);
}
Result:
pSrc
1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
1.0 1.0 1.0 5.0 5.0 1.0 1.0 1.0
1.0 1.0 5.0 5.0 5.0 5.0 1.0 1.0
1.0 5.0 5.0 5.0 5.0 5.0 5.0 1.0
1.0 5.0 5.0 5.0 5.0 5.0 5.0 1.0
1.0 1.0 5.0 5.0 5.0 5.0 1.0 1.0
1.0 1.0 1.0 5.0 5.0 1.0 1.0 1.0
1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
pDst
1.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0
2.0 1.0 1.0 5.0 1.0 1.0 1.0 1.0
2.0 1.0 5.0 5.0 5.0 1.0 1.0 1.0
2.0 5.0 5.0 5.0 5.0 5.0 1.0 1.0
2.0 1.0 5.0 5.0 5.0 5.0 5.0 1.0
2.0 1.0 1.0 5.0 5.0 5.0 5.0 5.0
2.0 1.0 1.0 1.0 5.0 5.0 5.0 1.0
2.0 1.0 1.0 1.0 1.0 5.0 1.0 1.0
pDstB
1.0 2.0 2.0 2.0 1.0 1.0 1.0 1.0
2.0 1.0 1.0 5.0 5.0 1.0 1.0 3.0
2.0 1.0 5.0 5.0 5.0 5.0 1.0 3.0
2.0 5.0 5.0 5.0 5.0 5.0 5.0 3.0
1.0 5.0 5.0 5.0 5.0 5.0 5.0 3.0
1.0 1.0 5.0 5.0 5.0 5.0 1.0 3.0
1.0 1.0 1.0 5.0 5.0 1.0 1.0 3.0
1.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0
Copyright © 2000 - 2011, Intel Corporation. All rights reserved.