Image Processing Toolbox User's Guide Previous page   Next Page
cp2tform

Infer geometric transformation from control point pairs

Syntax

Description

TFORM = cp2tform(input_points,base_points,transformtype) takes pairs of control points and uses them to infer a spatial transformation. input_points is an m-by-2 double matrix containing the x- and y-coordinates of control points in the image you want to transform. base_points is an m-by-2 double matrix containing the x- and y-coordinates of control points specified in the base image. The function returns a TFORM structure containing the spatial transformation.

TFORM = cp2tform(CPSTRUCT,transformtype) takes pairs of control points and uses them to infer a spatial transformation. CPSTRUCT is a structure that contains the control point matrices for the input and base images. You use the Control Point Selection Tool to create the CPSTRUCT.

transformtype specifies the type of spatial transformation to infer. This table lists all the transformation types supported by cp2tform in order of complexity. The 'lwm' and 'polynomial' transform types can each take an optional, additional parameter. See the syntax descriptions that follow for details.

Transformation Type

Description
Minimum Control Points
Example
'linear conformal'
Use this transformation when shapes in the input image are unchanged, but the image is distorted by some combination of translation, rotation, and scaling. Straight lines remain straight, and parallel lines are still parallel.
2 pairs




'affine'
Use this transformation when shapes in the input image exhibit shearing. Straight lines remain straight, and parallel lines remain parallel, but rectangles become parallelograms.
3 pairs




'projective'
Use this transformation when the scene appears tilted. Straight lines remain straight, but parallel lines converge toward vanishing points that might or might not fall within the image.
4 pairs




'polynomial'
Use this transformation when objects in the image are curved. The higher the order of the polynomial, the better the fit, but the result can contain more curves than the base image.
6 pairs
(order 2)
10 pairs
(order 3)
16 pairs
(order 4)




'piecewise linear'
Use this transformation when parts of the image appear distorted differently.
4 pairs




'lwm'
Use this transformation (local weighted mean), when the distortion varies locally and piecewise linear is not sufficient.
6 pairs
(12 pairs recommended)




TFORM = cp2tform(input_points,base_points,'polynomial',order) returns a TFORM structure specifying a 'polynomial' transformation, where order specifies the order of the polynomial to use. order can be the scalar value 2, 3, or 4. If you omit order, it defaults to 3.

TFORM = cp2tform(CPSTRUCT,'polynomial',order) same as the previous syntax except that the control points are specified in a CPSTRUCT.

TFORM = cp2tform(input_points,base_points,'lwm',N) returns a TFORM structure specifying a 'lwm' transformation, where N specifies the number of points used to infer each polynomial. The radius of influence extends out to the furthest control point used to infer that polynomial. The N closest points are used to infer a polynomial of order 2 for each control point pair. If you omit N, it defaults to 12. N can be as small as 6, but making N small risks generating ill-conditioned polynomials.

TFORM = cp2tform(CPSTRUCT,'lwm',N) same as the previous syntax except that the control points are specified in a CPSTRUCT.

[TFORM,input_points,base_points] = cp2tform(CPSTRUCT,...) returns the control points that were actually used in the return values input_points and base_points. Unmatched and predicted points are not used. For more information, see cpstruct2pairs.

[TFORM,input_points,base_points,input_points_bad,base_points_bad]=
cp2tform(input_points,base_points,'piecewise linear')
returns a TFORM structure specifying a 'piecewise linear' transformation. Returns the control points that were actually used in input_points and base_points, and returns the control points that were eliminated because they were middle vertices of degenerate fold-over triangles, in input_points_bad and base_points_bad.

[TFORM,input_points,base_points,input_points_bad,base_points_bad]=
cp2tform(CPSTRUCT,'piecewise linear')
same as the previous syntax except that the control points are specified in a CPSTRUCT.

Algorithms

cp2tform uses the following general procedure:

  1. Use valid pairs of control points to infer a spatial transformation or an inverse mapping from output space (x,y) to input space (u,v) according to transformtype.
  2. Return TFORM structure containing spatial transformation.

The procedure varies depending on the transformtype.

Linear Conformal

Linear conformal transformations can include a rotation, a scaling, and a translation. Shapes and angles are preserved. Parallel lines remain parallel. Straight lines remain straight.

Let

Solve for sc, ss, tx, ty.

The coefficients of the inverse mapping are stored in t_lc.tdata.Tinv.

Since linear conformal transformations are a subset of affine transformations, t_lc.forward_fcn is @affine_fwd and t_lc.inverse_fcn is @affine_inv.

At least two control-point pairs are needed to solve for the four unknown coefficients.

Affine

In an affine transformation, the x and y dimensions can be scaled or sheared independently and there can be a translation. Parallel lines remain parallel. Straight lines remain straight. Linear conformal transformations are a subset of affine transformations.

For an affine transformation,

Tinv is a 3-by-2 matrix. Solve for the six elements of Tinv.

The coefficients of the inverse mapping are stored in t_affine.tdata.Tinv.

At least three control-point pairs are needed to solve for the six unknown coefficients.

Projective

In a projective transformation, quadrilaterals map to quadrilaterals. Straight lines remain straight. Affine transformations are a subset of projective transformations.

For a projective transformation

where

Tinv is a 3-by-3 matrix.

Assuming

Solve for the nine elements of Tinv.

The coefficients of the inverse mapping are stored in t_proj.tdata.Tinv.

At least four control-point pairs are needed to solve for the nine unknown coefficients.

Polynomial

In a polynomial transformation, polynomial functions of x and y determine the mapping.

Second-Order Polynomials

For a second-order polynomial transformation,

  • [u v] = [1  x  y  x*y  x^2  y^2] * Tinv
    

Both u and v are second-order polynomials of x and y. Each second-order polynomial has six terms. To specify all coefficients, Tinv has size 6-by-2.

  • t_poly_ord2 = cp2tform(input_points, base_points,'polynomial');
    

The coefficients of the inverse mapping are stored in t_poly_ord2.tdata.

At least six control-point pairs are needed to solve for the 12 unknown coefficients.

Third-Order Polynomials

For a third-order polynomial transformation:

  • [u v] = [1  x  y  x*y  x^2  y^2  y*x^2  x*y^2  x^3  y^3] * Tinv
    

Both u and v are third-order polynomials of x and y. Each third-order polynomial has ten terms. To specify all coefficients, Tinv has size 10-by-2.

  • t_poly_ord3 = cp2tform(input_points, base_points,'polynomial',3);
    

The coefficients of the inverse mapping are stored in t_poly_ord3.tdata.

At least ten control-point pairs are needed to solve for the 20 unknown coefficients.

Fourth-Order Polynomials

For a fourth-order polynomial transformation:

[u v] = [1 x y x*y x^2 y^2 y*x^2 x*y^2 x^3 y^3 x^3*y x^2*y^2 x*y^3 x^4 y^4] * Tinv

Both u and v are fourth-order polynomials of x and y. Each fourth-order polynomial has 15 terms. To specify all coefficients, Tinv has size 15-by-2.

  • t_poly_ord4 = cp2tform(input_points, base_points,'polynomial',4);
    

The coefficients of the inverse mapping are stored in t_poly_ord4.tdata.

At least 15 control-point pairs are needed to solve for the 30 unknown coefficients.

Piecewise Linear

In a piecewise linear transformation, linear (affine) transformations are applied separately to each triangular region of the image [1].

  1. Find a Delaunay triangulation of the base control points.
  2. Using the three vertices of each triangle, infer an affine mapping from base to input coordinates.

Local Weighted Mean

For each control point in base_points:

  1. Find the N closest control points.
  2. Use these N points and their corresponding points in input_points to infer a second-order polynomial.
  3. Calculate the radius of influence of this polynomial as the distance from the center control point to the farthest point used to infer the polynomial (using base_points). [2]

Example

To recover angle and scale,

See Also

cpcorr, cpselect, cpstruct2pairs, imtransform

References

[1]  Goshtasby, Ardeshir, "Piecewise linear mapping functions for image registration," Pattern Recognition, Vol. 19, 1986, pp. 459-466.

[2]  Goshtasby, Ardeshir, "Image registration by local approximation methods," Image and Vision Computing, Vol. 6, 1988, pp. 255-261.


Previous page  corr2 cpcorr Next page

© 1994-2005 The MathWorks, Inc.