N-Dimensional Spatial Transformations
You can perform N-D geometric transformations using the tformarray
function. You can also use tformarray
to perform
mixed-dimensional transformations, in which the input and output arrays do not have the same
dimensions. The output can have either a lower or higher number of dimensions than the input.
For example, if you are sampling 3-D data on a 2-D slice or manifold, the input array might
have a lower dimensionality. The output dimensionality might be higher, for example, if you
combine multiple 2-D transformations into a single 2-D to 3-D operation.
Before using the tformarray
function, prepare the input arguments
required to perform the geometric transformation.
Create the spatial transformation using the
maketform
function. If you create the spatial transformation from a matrix,maketform
expects the matrix to be in the postmultiply convention.Create the resampling structure using the
makeresampler
function. A resampler structure defines how to interpolate values of the input array at specified locations. For example, you could specify your own separable interpolation kernel, build a custom resampler around theinterp2
orinterp3
functions, or even implement an advanced antialiasing technique. The resampling structure also controls the edge behavior when interpolating.
Next, apply the geometric transformation to an image using the
tformarray
function, specifying the spatial transformation structure
and the resampling structure. You can also transform individual points and lines to explore
the geometric effects of a transformation. Use the tformfwd
and tforminv
functions to perform forward and
inverse transformations, respectively.
This example uses tformarray
to perform a projective transformation
of a checkerboard image, and makeresampler
to create a resampling
structure with a standard bicubic interpolation method.
I = checkerboard(20,1,1); figure imshow(I) T = maketform("projective",[1 1; 41 1; 41 41; 1 41], ... [5 5; 40 5; 35 30; -10 30]); R = makeresampler("cubic","circular"); J = tformarray(I,T,R,[1 2],[2 1],[100 100],[],[]); figure imshow(J)
The makeresampler
and tformarray
functions
enable you to control many aspects of the transformation. For example, note how
tformarray
created an output image that is larger than the size of the
original image. Further, notice that the transformed image appears to contain multiple copies
of the original image. This is accomplished by specifying a padding method in the resampling
structure that extends the input image by repeating the pixels in a circular pattern.