Main Content

maketform

Create N-D spatial transformation structure (TFORM)

The maketform function is not recommended for 2-D and 3-D geometric transformations. For more information, see Compatibility Considerations.

Description

Create N-D Affine and Projective Transformations from Matrices

example

T = maketform('affine',A) creates a spatial transformation structure T for an N-dimensional affine transformation specified as matrix A. The transformation structure T has both forward and inverse transformations.

A spatial transformation structure (called a TFORM structure) can be used with the tformarray, tformfwd, and tforminv functions.

T = maketform('projective',P) creates a TFORM structure for an N-dimensional projective transformation specified as matrix P. T has both forward and inverse transformations.

Create Transformation from Forward or Inverse Functions

T = maketform('custom',ndims_in,ndims_out,forward_fcn,inverse_fcn,tdata) creates a custom TFORM structure T based on user-provided function handles and parameters. ndims_in and ndims_out are the numbers of input and output dimensions. forward_fcn and inverse_fcn are function handles to forward and inverse functions. The tdata argument can be any MATLAB® array and is typically used to store parameters of the custom transformation. It is accessible to forward_fcn and inverse_fcn via the tdata field of T.

Create Transformation for Spatial Referencing

T = maketform('box',tsize,outCornerStart,outCornerEnd) creates an N-dimensional affine TFORM structure T that maps an input box defined by the coordinates of a corner, ones(1,N), and size tsize, to an output box defined by the opposite corners outCornerStart and outCornerEnd. The 'box' TFORM structure is typically used to register the row and column subscripts of an image or array to some world coordinate system.

T = maketform('box',inCorners,outCorners) creates an N-dimensional affine TFORM structure T. The transformation maps an input box defined by the opposite corners inCorners(1,:) and inCorners(2,:) to an output box defined by the opposite corners outCorners(1,:) and outCorners(2,:).

Create Composite Transformation

T = maketform('composite',T1,T2,...,TL) creates a TFORM structure T that is a composite of transformations T1, T2, ..., TL specified as comma-separated TFORM structures. The forward and inverse functions of T are the functional compositions of the forward and inverse functions of the component transformations T1, T2, ..., TL.

T = maketform('composite',[T1,T2,...,TL]) builds a TFORM structure T that is a composite of transformations T1, T2, ..., TL specified in a vector. The forward and inverse functions of T are the functional compositions of the forward and inverse functions of the component transformations T1, T2, ..., TL.

Examples

collapse all

Create a TFORM structure that defines an affine transformation.

T = maketform('affine',[.5 0 0; .5 2 0; 0 0 1])
T = 

  struct with fields:

       ndims_in: 2
      ndims_out: 2
    forward_fcn: @fwd_affine
    inverse_fcn: @inv_affine
          tdata: [1×1 struct]

Apply the forward transformation.

tformfwd([10 20],T)
ans =

    15    40

Read an image into the workspace and display it.

I = imread('cameraman.tif');
imshow(I)

Apply the transformation to the image.

I2 = imtransform(I,T);

Display the original image and the transformed image.

imshow(I2)

Input Arguments

collapse all

Affine transformation, specified as an (N+1)-by-(N+1) matrix or an (N+1)-by-N matrix, where N is the dimensionality of the affine transformation. The matrix must be nonsingular and real.

If A is (N+1)-by-(N+1), the last column of A must be [zeros(N,1);1]. Otherwise, A is augmented automatically, such that its last column is [zeros(N,1);1]. The matrix A defines a forward transformation such that tformfwd(U,T), where U is a 1-by-N vector, returns a 1-by-N vector X, such that X = U * A(1:N,1:N) + A(N+1,1:N).

Data Types: double

Projective transformation, specified as an (N+1)-by-(N+1) matrix, where N is the dimensionality of the projective transformation. The matrix must be nonsingular and real. P(N+1,N+1) cannot be 0.

The matrix P defines a forward transformation such that tformfwd(U,T), where U is a 1-by-N vector, returns a 1-by-N vector X, such that X = W(1:N)/W(N+1), where W = [U 1] * P.

Data Types: double

Number of input dimensions, specified as a positive integer.

Data Types: double

Number of output dimensions, specified as a positive integer.

Data Types: double

Forward function, specified as a function handle that supports the syntax X = forward_fcn(U,T). U is a numpts-by-ndims_in matrix whose rows are points in the transformation input space and X is a numpts-by-ndims_out matrix whose rows are points in the transformation output space.

forward_fcn can be empty.

Data Types: function_handle

Inverse function, specified as a function handle that supports the syntax U = inverse_fcn(X,T). U is a numpts-by-ndims_in matrix whose rows are points in the transformation input space and X is a numpts-by-ndims_out matrix whose rows are points in the transformation output space.

inverse_fcn can be empty. However, to use the TFORM struct T with the tformarray function, you must define inverse_fcn.

Data Types: function_handle

Parameters of custom transformation, specified as an array.

Data Types: double

Size of input box, specified as an N-element vector of positive integers.

Data Types: double

Starting corner coordinates in the output space, specified as an N-element vector. outCornerStart(k) and outCornerEnd(k) must be different unless tsize(k) is 1, in which case the affine scale factor along the k-th dimension is assumed to be 1.0.

Data Types: double

Opposite corner coordinates in the output space, specified as an N-element vector. outCornerStart(k) and outCornerEnd(k) must be different unless tsize(k) is 1, in which case the affine scale factor along the k-th dimension is assumed to be 1.0.

Data Types: double

Corner coordinates in the input space, specified as an N-by-2 numeric matrix. The first column represents the coordinates of one corner and the second column represents the coordinates of the opposite corner. inCorners(1,k) and inCorners(2,k) must be different unless outCorners(1,k) and outCorners(2,k) are the same.

Data Types: double

Corner coordinates in the output space, specified as an N-by-2 numeric matrix. The first column represents the coordinates of one corner and the second column represents the coordinates of the opposite corner. outCorners(1,k) and outCorners(2,k) must be different unless inCorners(1,k) and inCorners(2,k) are the same.

Data Types: double

Component transformations, specified as TFORM structures.

The inputs T1, T2, ..., TL are ordered just as they would be when using the standard notation for function composition: T = T1T2...TL. Composition is associative, but not commutative. This means that to apply T to the input U, you must apply TL first and T1 last. Thus if L = 3, for example, then tformfwd(U,T) is the same as tformfwd(tformfwd(tformfwd(U,T3),T2),T1). The components T1 through TL must be compatible in terms of the numbers of input and output dimensions.

T has a defined forward transformation function only if all the component transformations have defined forward transform functions. T has a defined inverse transformation function only if all the component transformations have defined inverse transform functions.

Data Types: function_handle

Output Arguments

collapse all

Multidimensional spatial transformation, returned as a TFORM structure.

Compatibility Considerations

expand all

Not recommended starting in R2018b

Extended Capabilities

Introduced before R2006a