www.gusucode.com > images 案例代码 matlab源码程序 > images/PerformSimple2DTranslationTransformationExample.m

    %% Perform Simple 2-D Translation Transformation 
% This example shows how to perform 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. (You can also use
% the |imtranslate| function to perform translation.)
%%
% Read the image to be transformed. This example creates a checkerboard
% image using the checkerboard function.

% Copyright 2015 The MathWorks, Inc.

cb = checkerboard;
imshow(cb)
%%
% Get spatial referencing information about the image. This information is
% useful when you want to display the result of the transformation.
Rcb = imref2d(size(cb))
%%
% Create a 3-by-3 transformation matrix, called |A| in this example, that
% defines the transformation. In this matrix, A(3,1) specifies the number
% of pixels to shift the image in the horizontal direction and A(3,2)
% specifies the number of pixels to shift the image in the vertical
% direction.
A = [1 0 0; 0 1 0; 20 20 1]
%%
% Create a geometric transformation object that defines the translation you
% want to perform. Because a translation is a type of 2-D affine
% transformation, the examples uses a |affine2d| geometric transformation
% object. You use the |affine2d| function to create a geometric
% transformation object, passing the function the 3-by-3 transformation
% matrix, |A|, you created previously.
tform = affine2d(A);
%%
% Perform the transformation. Call the |imwarp| function specifying the
% image you want to transform and the geometric transformation object.
% |imwarp| returns the transformed image. This example gets the optional
% spatial referencing object return value which contains information about
% the transformed image. View the original and the transformed image
% side-by-side using the |subplot| function in conjunction with |imshow| .
% When viewing the translated image, it might appear that the
% transformation had no effect. The transformed image looks identical to
% the original image. The reason that no change is apparent in the
% visualization is because |imwarp| sizes the output image
% to be just large enough to contain the entire transformed image but not
% the entire output coordinate space. Notice, however, that the coordinate
% values have been changed by the transformation.
[out,Rout] = imwarp(cb,tform);
figure;
subplot(1,2,1);
imshow(cb,Rcb);
subplot(1,2,2);
imshow(out,Rout)
%%
% To see the entirety of the transformed image in the same relation to the
% origin of the coordinate space as the original image, use |imwarp| with
% the |'OutputView'| parameter, specifying a spatial referencing object.
% The spatial referencing object specifies the size of the output image and
% how much of the output coordinate space is included in the output image.
% To do this, the example makes a copy of the spatial referencing object
% associated with the original image and modifies the world coordinate
% limits to accommodate the full size of the transformed image. The example
% sets the limits of the output image in world coordinates to include the
% origin from the input
Rout = Rcb;
Rout.XWorldLimits(2) = Rout.XWorldLimits(2)+20;
Rout.YWorldLimits(2) = Rout.YWorldLimits(2)+20;

[out,Rout] = imwarp(cb,tform,'OutputView',Rout);

figure, subplot(1,2,1);
imshow(cb,Rcb);
subplot(1,2,2);
imshow(out,Rout)