Computes the perspective transform coefficients to map the source ROI to the quadrangle with the specified vertex coordinates.
IppStatus ippiGetPerspectiveTransform(IppiRect srcRoi, const double quad[4][2], double coeffs[3][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 perspective transform function. |
coeffs |
Output array. Contains the target perspective transform coefficients. |
The function ippiGetPerspectiveTransform 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 ippiWarpPerspective. It computes the coefficients coeffs that should be used by the function ippiWarpPerspective to map the source rectangular ROI to the quadrangle with the given 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.
Example “Using Intel IPP Functions for Perspective Warping” shows how to use the function ippiGetPerspectiveTransform.
ippStsNoErr |
Indicates no error. Any other value indicates an error. |
ippStsSizeErr |
Indicates an error condition if srcRoi has a size field with zero or negative value. |
ippStsCoeffErr |
Indicates an error condition if coefficient values are invalid. |
ippStsRectErr |
Indicates an error condition if width or height of the srcRoi is less than or equal to 1. |
void func_WarpPerspective()
{
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);
IppiRect dstRoi = {0, 0, 8, 8};
IppiSize dstSize = {8, 8};
int dstbStep = 8*sizeof(ipp32f);
IppiRect dstbRoi = {0, 0, 8, 8};
double quad[4][2] = {{0.0, 0.0},
{8.0, 0.0},
{6.0, 8.0},
{2.0, 8.0}};
double coeffs[3][3];
ippiSet_32f_C1R(2,pDst,srcStep,srcSize);
ippiSet_32f_C1R(3,pDstB,srcStep,srcSize);
ippiGetPerspectiveTransform(srcRoi, quad, coeffs);
ippiWarpPerspective_32f_C1R(pSrc, srcSize, srcStep, srcRoi, pDst, dstStep, dstRoi, coeffs, IPPI_INTER_NN);
ippiWarpPerspectiveBack_32f_C1R( pDst, dstSize, dstStep, dstRoi, pDstB, dstbStep, dstbRoi, 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 1.0 1.0 1.0 1.0 1.0 1.0 1.0
2.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0
2.0 1.0 1.0 1.0 5.0 5.0 1.0 1.0
2.0 1.0 1.0 5.0 5.0 5.0 1.0 1.0
2.0 1.0 1.0 5.0 5.0 5.0 1.0 1.0
2.0 2.0 5.0 5.0 5.0 5.0 5.0 2.0
2.0 2.0 5.0 5.0 5.0 5.0 5.0 2.0
2.0 2.0 1.0 5.0 5.0 5.0 1.0 2.0
pDstB
1.0 1.0 1.0 1.0 1.0 1.0 1.0 3.0
2.0 1.0 1.0 5.0 5.0 1.0 1.0 3.0
1.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 2.0
2.0 5.0 5.0 5.0 5.0 5.0 5.0 2.0
1.0 1.0 5.0 5.0 5.0 5.0 1.0 1.0
3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0
3.0 3.0 3.0 3.0 3.0 3.0 3.0 3.0
Copyright © 2000 - 2011, Intel Corporation. All rights reserved.