本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。
将二维空间变换应用于图像
不建议使用 imtransform
。请改用 imwarp
。
根据 B
= imtransform(A
,tform
)tform
定义的二维空间变换来变换图像 A
,并返回变换后的图像 B
。
如果 A
是彩色图像,则 imtransform
会对每个颜色通道应用相同的二维变换。类似地,如果 A
是三维体或具有三个或更多维度的图像序列,则 imtransform
将相同的二维变换应用于沿更高维度的所有二维平面。对于任意维度的数组变换,请使用 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
作为一些常用变换(如仿射或投影)的快速前向映射选项。对于没有正向映射的变换,如 fitgeotrans
计算的多项式变换,findbounds
可能需要更长的时间。如果您可以直接为这些变换指定 XData
和 YData
,则 imtransform
的运行速度可能会明显加快。
裁剪。使用 findbounds
对 XData
和 YData
进行自动估计时有可能裁剪输出图像。为避免裁剪,请直接设置 XData
和 YData
。
任意维度变换。使用 imtransform
时,对 tform
使用二维变换。有关任意维度数组变换,请参阅 tformarray
。
checkerboard
| cp2tform
| imresize
| imrotate
| makeresampler
| maketform
| tformarray