Apply 2-D spatial transformation to image
imtransform
is not recommended. Use imwarp
instead.
transforms image B
= imtransform(A
,tform
)A
according to the 2-D spatial transformation
defined by tform
, and returns the transformed image,
B
.
If A
is a color image, then imtransform
applies the same 2-D transformation to each color channel. Likewise, if
A
is a volume or image sequence with three or more dimensions,
then imtransform
applies the same 2-D transformation to all 2-D
planes along the higher dimensions. For arbitrary-dimensional array transformations, use
tformarray
.
uses name-value pairs to control various aspects of the spatial transformation.B
= imtransform(___,Name,Value
)
[
also returns the extent of the output image B
,xdata
,ydata
] = imtransform(___)B
in the output X-Y
space. By default, imtransform
calculates xdata
and ydata
automatically so that B
contains the
entire transformed image A
. However, you can override this
automatic calculation by specifying values for the XData
and
YData
name-value pair input arguments.
Apply a horizontal shear to a grayscale image.
I = imread('cameraman.tif'); tform = maketform('affine',[1 0 0; .5 1 0; 0 0 1]); J = imtransform(I,tform); imshow(J)
Map a square to a quadrilateral with a projective transformation. Set up an input coordinate system so that the input image fills the unit square with vertices (0 0), (1 0), (1 1), (0 1).
I = imread('cameraman.tif');
udata = [0 1]; vdata = [0 1];
Transform to a quadrilateral with vertices (-4 2), (-8 3), (-3 -5), (6 3).
tform = maketform('projective',[ 0 0; 1 0; 1 1; 0 1],... [-4 2; -8 -3; -3 -5; 6 3]);
Fill with gray and use bicubic interpolation. Make the output size the same as the input size.
[B,xdata,ydata] = imtransform(I,tform,'bicubic', ... 'udata',udata,... 'vdata',vdata,... 'size',size(I),... 'fill',128); subplot(1,2,1); imshow(I,'XData',udata,'YData',vdata) subplot(1,2,2); imshow(B,'XData',xdata,'YData',ydata)
Read an aerial photo into the MATLAB® workspace and view it.
unregistered = imread('westconcordaerial.png');
figure
imshow(unregistered)
Read an orthophoto into the MATLAB workspace and view it.
figure
imshow('westconcordorthophoto.png')
Load control points that were previously picked.
load westconcordpoints
Create a transformation structure for a projective transformation using the points.
t_concord = cp2tform(movingPoints,fixedPoints,'projective');
Get the width and height of the orthophoto, perform the transformation, and view the result.
info = imfinfo('westconcordorthophoto.png'); registered = imtransform(unregistered,t_concord,... 'XData',[1 info.Width],'YData',[1 info.Height]); figure imshow(registered)
Image Registration. The
imtransform
function automatically shifts the origin of your
output image to make as much of the transformed image visible as possible. If you use
imtransform
to do image registration, the syntax B =
imtransform(A,tform)
can produce unexpected results. To control the
spatial location of the output image, set XData
and
YData
explicitly.
Pure Translation. Calling the
imtransform
function with a purely translational transformation
results in an output image that is exactly like the input image unless you specify
XData
and YData
values in your call to
imtransform
. For example, if you want the output to be the same
size as the input revealing the translation relative to the input image, call
imtransform
as shown in the following syntax:
B = imtransform(A,T,'XData',[1 size(A,2)],... 'YData',[1 size(A,1)])
For more information about this topic, see Perform Simple 2-D Translation Transformation.
Transformation Speed. If you do not specify the
output-space location for B
using XData
and
YData
, then imtransform
estimates the
location automatically using the function findbounds
. You can use findbounds
as a quick
forward-mapping option for some commonly used transformations, such as affine or
projective. For transformations that do not have a forward mapping, such as
polynomial transformations computed by fitgeotrans
, findbounds
can take much longer. If
you can specify XData
and YData
directly
for such transformations, then imtransform
may run noticeably
faster.
Clipping. The automatic estimate of
XData
and YData
using
findbounds
sometimes clips the output image. To avoid clipping,
set XData
and YData
directly.
Arbitrary Dimensional Transformations. Use a 2-D
transformation for tform
when using
imtransform
. For arbitrary-dimensional array transformations, see
tformarray
.
checkerboard
| cp2tform
| imresize
| imrotate
| makeresampler
| maketform
| tformarray