- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hi,

I am currentlly using the

**ippi**library for computer vision.I perform geometric transforms using the following functions:

**ippiWarpBilinearQuad**

ippiWarpAffineQuadippiWarpAffineQuad

Does anyone know of a way to get the coefficients ofthe matrixs used in thesetransformations?

Thanks in advance,

Giora

Link Copied

4 Replies

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hi, Giora,

It could be done by ippiGetAffine/BilinearTransform function if your argument quadrangle is a rectangle. In other case some matrix manipulation are necessary

Eg for affine transform you could form and solve the system of 6 linear equations for 3 of quadrangle corners. Pixel indices are coordinates:

x0'=c00*x0+c01*y0+c02

y0'=c10*x0+c11*y0+c12 etc

Alexander

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Dear Alexander,

Thanks for your answer. Unfortunately my argumant is not rectangular.

Do you know what functions in IPP can help me to solve the system of 6 linear equations?

Thanks again,

Giora

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hi,

there is OpenCV sample for general case

Code:

/* Calculates coefficients of perspective transformation * which maps (xi,yi) to (ui,vi), (i=1,2,3,4): * * c00*xi + c01*yi + c02 * ui = --------------------- * c20*xi + c21*yi + c22 * * c10*xi + c11*yi + c12 * vi = --------------------- * c20*xi + c21*yi + c22 * * Coefficients are calculated by solving linear system: * / x0 y0 1 0 0 0 -x0*u0 -y0*u0 /c00 /u0 * | x1 y1 1 0 0 0 -x1*u1 -y1*u1 | |c01| |u1| * | x2 y2 1 0 0 0 -x2*u2 -y2*u2 | |c02| |u2| * | x3 y3 1 0 0 0 -x3*u3 -y3*u3 |.|c10|=|u3|, * | 0 0 0 x0 y0 1 -x0*v0 -y0*v0 | |c11| |v0| * | 0 0 0 x1 y1 1 -x1*v1 -y1*v1 | |c12| |v1| * | 0 0 0 x2 y2 1 -x2*v2 -y2*v2 | |c20| |v2| * 0 0 0 x3 y3 1 -x3*v3 -y3*v3 / c21/ v3/ * * where: * cij - matrix coefficients, c22 = 1 */ CV_IMPL CvMat* cvWarpPerspectiveQMatrix( const CvPoint2D32f* src, const CvPoint2D32f* dst, CvMat* matrix ) { CV_FUNCNAME( "cvGetPerspectiveTransformMatrix" ); __BEGIN__; double a[8][8]; double b[8], x[9]; CvMat A = cvMat( 8, 8, CV_64FC1, a ); CvMat B = cvMat( 8, 1, CV_64FC1, b ); CvMat X = cvMat( 8, 1, CV_64FC1, x ); int i; if( !src || !dst || !matrix ) CV_ERROR( CV_StsNullPtr, "" ); for( i = 0; i < 4; ++i ) { a[0] = a[i+4][3] = src.x; a[1] = a[i+4][4] = src.y; a[2] = a[i+4][5] = 1; a[3] = a[4] = a[5] = a[i+4][0] = a[i+4][1] = a[i+4][2] = 0; a[6] = -src.x*dst.x; a[7] = -src.y*dst.x; a[i+4][6] = -src.x*dst.y; a[i+4][7] = -src.y*dst.y; b= dst.x; b[i+4] = dst.y; } cvSolve( &A, &B, &X, CV_SVD ); x[8] = 1; X = cvMat( 3, 3, CV_64FC1, x ); cvConvert( &X, matrix ); __END__; return matrix; }

Regards,

Vladimir

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

Hi Vladimir,

Thanks for your detailed answer - this might do the work for me.

Regards,

Giora

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page