This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English version of the page.

Note: This page has been translated by MathWorks. Click here to see
To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

2-D and 3-D Geometric Transformation Process Overview

To perform a 2-D or 3-D geometric transformation, first create a geometric transformation object that stores information about the transformation. Then, pass the image to be transformed and the geometric transformation object to the imwarp function. You optionally can provide spatial referencing information about the input image to imwarp.

Create Geometric Transformation Object

Different types of geometric transformation objects store different information about the transformation.

There are several ways to create a geometric transformation object.

Approach to Create Tranformation Objectaffine2daffine3dprojective2dgeometricTransform2d / geometricTransform3dOther Transformation Objects
Define Transformation MatrixXXX  
Define Custom Point-Wise Mapping Function   X 
Estimate Transformation from Control Point PairsX X X
Estimate Transformation Using Similarity OptimizationXX   
Estimate Transformation Using Phase CorrelationX    

Define Transformation Matrix

If you know the transformation matrix for the geometric transformation you want to perform, then you can create a affine2d, projective2d, or affine3d geometric transformation object directly. For more information about creating a transformation matrix, see Matrix Representation of Geometric Transformations.

The following example defines the transformation matrix for a 2-D translation and creates an affine2d geometric transformation object.

xform = [ 1 0 0
          0 1 0
         40 40 1 ];

tform_translate = affine2d(xform);
tform_translate = 

  affine2d with properties:

                 T: [3x3 double]
    Dimensionality: 2

Define Custom Point-Wise Mapping Function

If you have an inverse point-wise mapping function, then you can define a custom 2-D and 3-D geometric transformation using the geometricTransform2d and the geometricTransform3d objects respectively.

The following example specifies an inverse mapping function that accepts and returns 2-D points in packed (x,y) format. Then, the example creates a geometricTransform2d custom geometric transformation object.

inversefn = @(c) [c(:,1)+c(:,2),c(:,1).^2]
inversefn = function_handle with value:
    @(c)[c(:,1)+c(:,2),c(:,1).^2]
tform = geometricTransform2d(inversefn)
tform = 
  geometricTransform2d with properties:

        InverseFcn: @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2)]
        ForwardFcn: []
    Dimensionality: 2

Similarly, the following example creates a geometricTransform3d custom geometric transformation object using the inverse mapping function. The example specifies an inverse mapping function that accepts and returns 3-D points in packed (x,y,z) format.

inversefn = @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2),c(:,3).^2]
inversefn = function_handle with value:
    @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2),c(:,3).^2]
tform = geometricTransform3d(inversefn)
tform = 

  geometricTransform3d with properties:

        InverseFcn: @(c)[c(:,1)+c(:,2),c(:,1)-c(:,2),c(:,3).^2]
        ForwardFcn: []
    Dimensionality: 3

Estimate Transformation from Control Point Pairs

You can create a geometric transformation object by passing two sets of control point pairs to the fitgeotrans function. The fitgeotrans function automatically estimates the transformation from these points and returns one of the geometric transformation objects.

Different transformations require a varying number of points. For example, affine transformations require three non-collinear points in each image (a triangle) and projective transformations require four points (a quadrilateral).

This example passes two sets of control points to fitgeotrans, which returns an affine2d geometric transformation object.

movingPoints = [11 11;21 11; 21 21];
fixedPoints = [51 51;61 51;61 61];

tform_cpp = fitgeotrans(movingPoints,fixedPoints,'affine')
tform_cpp = 

  affine2d with properties:

                 T: [3x3 double]
    Dimensionality: 2

Estimate Transformation Using Similarity Optimization

If you have a fixed image and a moving image that are slightly misaligned, then you can use the imregtform function to estimate an affine geometric transformation that aligns the images. imregtform optimizes the mean squares or Mattes mutual information similarity metric of the two images, using a regular step gradient descent or one-plus-one evolutionary optimizer. For more information, see Create an Optimizer and Metric for Intensity-Based Image Registration.

Estimate Transformation Using Phase Correlation

If you have a fixed image and a moving image that are severely misaligned, then you can use the imregcorr function to estimate an affine geometric transformation that improves the image alignment. You can refine the resulting transformation by using similarity optimization.

Perform the Geometric Transformation

After you define the transformation in a geometric transformation object, perform the transformation by using the imwarp function. When calling the function, specify the image to be transformed and the geometric transformation object.

imwarp uses the geometric transformation to map coordinates in the output image to the corresponding coordinates in the input image (inverse mapping). Then, imwarp uses the coordinate mapping to interpolate pixel values within the input image and compute the output pixel value.

See Also

| | | | | |

Related Examples

More About