imtransform
(不推荐)对图像应用二维空间变换
不建议使用 imtransform
。请改用 imwarp
进行二维和三维变换。使用 tformarray
进行高维变换。
语法
说明
使用名称-值对组来控制空间变换的各个方面。B
= imtransform(___,Name,Value
)
示例
简单变换
对灰度图像应用水平剪切。
I = imread('cameraman.tif'); tform = maketform('affine',[1 0 0; .5 1 0; 0 0 1]); J = imtransform(I,tform); imshow(J)
投影变换
用投影变换将正方形映射到一个不规则四边形。设置输入坐标系,将输入图像填充到顶点为 (0 0)、(1 0)、(1 1)、(0 1) 的单位正方形。
I = imread('cameraman.tif');
udata = [0 1]; vdata = [0 1];
变换为具有顶点 (-4 2)、(-8 3)、(-35)、(6 3) 的四边形。
tform = maketform('projective',[ 0 0; 1 0; 1 1; 0 1],... [-4 2; -8 -3; -3 -5; 6 3]);
用灰色填充并使用双三次插值。使输出大小与输入大小相同。
[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)
图像配准
将航拍照片读入 MATLAB® 工作区并查看它。
unregistered = imread('westconcordaerial.png');
figure
imshow(unregistered)
将正射影像读入 MATLAB 工作区并查看它。
figure
imshow('westconcordorthophoto.png')
加载先前选取的控制点。
load westconcordpoints
使用这些点创建投影变换的变换结构体。
t_concord = cp2tform(movingPoints,fixedPoints,'projective');
获取正射影像的宽度和高度,执行变换,并查看结果。
info = imfinfo('westconcordorthophoto.png'); registered = imtransform(unregistered,t_concord,... 'XData',[1 info.Width],'YData',[1 info.Height]); figure imshow(registered)
输入参数
输出参数
提示
图像配准。
imtransform
函数会自动平移输出图像的原点,以尽可能多地显示变换后的图像。如果您使用imtransform
进行图像配准,语法B = imtransform(A,tform)
可能会产生意外的结果。要控制输出图像的空间位置,请显式设置XData
和YData
。纯平移。使用纯平移变换调用
imtransform
函数会产生与输入图像完全相同的输出图像,除非您在对imtransform
的调用中指定XData
和YData
值。例如,如果您希望输出与输入大小相同,同时又显示它相对于输入图像发生了平移,请使用下列语法调用imtransform
:B = imtransform(A,T,'XData',[1 size(A,2)],... 'YData',[1 size(A,1)])
有关此主题的详细信息,请参阅Perform Simple 2-D Translation Transformation。
变换速度。如果您没有使用
XData
和YData
指定B
的输出空间位置,则imtransform
会使用函数findbounds
自动估计位置。您可以使用findbounds
作为一些常用变换(如仿射或投影)的快速前向映射选项。对于没有正向映射的变换,如fitgeotform2d
计算的多项式变换,findbounds
可能需要更长的时间。如果您可以直接为这些变换指定XData
和YData
,则imtransform
的运行速度可能会明显加快。裁剪。使用
findbounds
对XData
和YData
进行自动估计时有可能裁剪输出图像。为避免裁剪,请直接设置XData
和YData
。
版本历史记录
在 R2006a 之前推出