Image Processing Toolbox User's Guide |
Example: Performing a Translation
This example illustrates how to use the maketform
and imtransform
functions to perform a 2-D spatial transformation of an image. The example performs a simple affine transformation called a translation. In a translation, you shift an image in coordinate space by adding a specified value to the x- and y-coordinates. The example illustrates the following steps:
Step 1: Import the Image to Be Transformed
Bring the image to be transformed into the MATLAB workspace. This example creates a checkerboard image, using the checkerboard
function. By default, checkerboard creates an 80-by-80 pixel image.
Step 2: Define the Spatial Transformation
You must define the spatial transformation that you want to perform. For many types of 2-D spatial transformations, such as affine transformations, you can use a 3-by-3 transformation matrix to specify the transformation. You can also use sets of points in the input and output images to specify the transformation and let maketform
create the transformation matrix. For more information, see Defining the Transformation Data.
This example uses the following transformation matrix to define a spatial transformation called a translation.
In this matrix, xform(3,1)
specifies the number of pixels to shift the image in the horizontal direction and xform(3,2)
specifies the number of pixels to shift the image in the vertical direction.
Step 3: Create the TFORM Structure
You use the maketform
function to create a TFORM
structure. As arguments, you specify the type of transformation you want to perform and the transformation matrix (or set of points) that you created to define the transformation. For more information, see Creating TFORM Structures.
This example calls maketform
, specifying 'affine'
as the type of transformation, because translation is a type of affine transformation, and xform
, the transformation matrix created in step 2.
Step 4: Perform the Transformation
To perform the transformation, call the imtransform
function, specifying the image you want to transform and the TFORM
structure that stores all the required transformation parameters. For more information, see Performing the Spatial Transformation.
The following example passes to the imtransform
function the checkerboard image, created in Step 1, and the TFORM
structure created in Step 3. imtransform
returns the transformed image.
The example includes two optional output arguments: xdata
and ydata
. These arguments return the location of the output image in output coordinate space. xdata
contains the x-coordinates of the pixels at the corners of the output image. ydata
contains the y-coordinates of these same pixels.
Note This section uses the spatial coordinate system when referring to pixel locations. In the spatial coordinates system, the x- and y-coordinates specify the center of the pixel. For more information about the distinction between spatial coordinates and pixel coordinates, see Coordinate Systems. |
The following figure illustrates this translation graphically. By convention, the axes in input space are labeled u and v and the axes in output space are labelled x and y. In the figure, note how imtransform
modifies the spatial coordinates that define the locations of pixels in the input image. The pixel at (1,1) is now positioned at (41,41). (In the checkerboard image, each black, white, and gray square is 10 pixels high and 10 pixels wide.)
Pixel Values and Pixel Locations. The previous figure shows how imtransform
changes the locations of pixels between input space and output space. The pixel located at (1,1) in the input image is now located at (41,41) in the output image. Note, however, that the value at that pixel location has not changed. Pixel (1,1) in the input image is black and so is pixel (41,41) in the output image.
imtransform
determines the value of pixels in the output image by mapping the new locations back to the corresponding locations in the input image (inverse mapping). In a translation, because the size and orientation of the output image is the same as the input image, this is a one to one mapping of pixel values to new locations. For other types of transformations, such as scaling or rotation, imtransform
interpolates within the input image to compute the output pixel value. For more information about the interpolation methods used by imtransform
, see Interpolation.
Step 5: View the Output Image
After performing the transformation, you might want to view the transformed image. The example uses the imshow
function to display the transformed image.
Understanding the Display of the Transformed Image. When viewing the transformed image, especially for a translation operation, it might appear that the transformation had no effect. The transformed image looks identical to the original image. However, if you check the xdata
and ydata
values returned by imtransform
, you can see that the spatial coordinates have changed. The upper left corner of the input image with spatial coordinates (1,1) is now (41,41). The lower right corner of the input image with spatial coordinates (80,80) is now (120,120). The value 40 has been added to each, as expected.
The reason that no change is apparent in the visualization is because imtransform
sizes the output image to be just large enough to contain the entire transformed image but not the entire output coordinate space. To see the effect of the translation in relation to the original image, you can use several optional input parameters that specify the size of output image and how much of the output space is included in the output image.
The example uses two of these optional input parameters, XData
and YData
, to specify how much of the output coordinate space to include in the output image. The example sets the XData
and YData
to include the origin of the original image and be large enough to contain the entire translated image.
Note
Note how all the pixels that are now in the output image that do not correspond to locations in the input image are black. imtransform assigns a value, called a fill value, to these pixels. This example uses the default fill value but you can specify a different one -- see Specifying Fill Values
|
cb_trans2 = imtransform(cb, tform_translate,... 'XData',[1 (size(cb,2)+xform(3,1)],... 'YData', [1 (size(cb,1)+xform(3,2)]); figure, imshow(cb_trans2)
View of the Translated Image in Relation to Original Coordinate Space
Performing General 2-D Spatial Transformations | Defining the Transformation Data |
© 1994-2005 The MathWorks, Inc.