文档

imtransform

对图像进行二维空间变换

imtransform不推荐。使用imwarp代替。

语法

B = imtransform(A,tform)
B = imtransform(A,tform,插值函数
[B,xdata,ydata] = imtransform(…)
[B,xdata,ydata] = imtransform(…,名称,值)

描述

B = imtransform(A,tform)变换图像一个根据定义的二维空间变换tform.如果ndims(A) >,例如对于RGB图像,则imtransform将相同的二维变换应用到所有高维平面上。

B = imtransform(A,tform,插值函数指定要使用的插值形式。

[B,xdata,ydata] = imtransform(…)返回输出图像的位置B在输出X-Y空间中。默认情况下,imtransform计算xdata而且ydata自然而然地B包含整个转换后的图像一个.方法的值可以覆盖此自动计算“XData”而且“YData”参数。

[B,xdata,ydata] = imtransform(…,名称,值)使用附加选项对图像进行转换,以控制由一个或多个指定的空间转换的各个方面名称,值对参数。

输入参数

一个

任何非稀疏数值类(实数或复数)或类的图像逻辑

tform

返回的空间转换结构maketformcp2tformimtransform假设转换的空间坐标约定tform.具体地说,转换的第一个维度是水平或x-坐标,第二个维度是垂直或y协调。这个约定与MATLAB中的数组下标约定相反®

插值函数

插值使用的形式,指定为:“双三次的”双线性的,或“最近的”(加权)。另外,插值函数可以是重新取样返回的结构makeresampler.这个选项允许对如何进行更多的控制imtransform进行重采样。

默认值:双线性的

名称-值对实参

的逗号分隔的可选对名称,值参数,的名字参数名称和价值对应的值。的名字必须出现在单引号内(' '),不区分大小写。可以以任意顺序指定多个名称和值对参数Name1Value1、……

“UData”

一个双元实向量,当它与“VData”,指定图像的空间位置一个在二维输入空间U-V中。的两个元素“UData”u的第一列和最后一列的坐标(水平)一个,分别。

默认值:[1大小(2)

“VData”

一个双元实向量,当它与“UData”,指定图像的空间位置一个在二维输入空间U-V中。的两个元素“VData”v的第一行和最后一行的坐标(垂直)一个,分别。

默认值:[1尺寸(1)

“XData”

一个双元实向量,当它与“YData”,指定输出图像的空间位置B在二维输出空间X-Y中。的两个元素“XData”x的第一列和最后一列的坐标(水平)B,分别。

默认值:如果不指定“XData”而且“YData”imtransform估计包含整个转换输出图像的值。为了确定这些值,imtransform使用findbounds函数。

“YData”

一个双元实向量,当与“XData”,指定输出图像的空间位置B在二维输出空间X-Y中。的两个元素“YData”y的第一行和最后一行的坐标(垂直)B,分别。

默认值:如果不指定“XData”而且“YData”imtransform估计包含整个转换输出图像的值。为了确定这些值,imtransform使用findbounds函数。

“XYScale”

一个或两个元素的实向量。第一个元素“XYScale”指定X-Y空间中每个输出像素的宽度。第二个元素(如果存在)指定每个输出像素的高度。如果“XYScale”只有一个元素,则相同的值同时指定宽度和高度。

默认值:如果不指定“XYScale”但是你确实指明了“大小”,然后imtransform计算“XYScale”“大小”“XData”,“YData”.如果您不提供“XYScale”“大小”,然后imtransform使用输入像素的比例“XYScale”,除非输出图像过大。

请注意

如果保留输入图像的比例将导致输出图像过大,则imtransform函数自动增加“XYScale”.要确保输出像素刻度与输入像素刻度匹配,请指定“XYScale”参数。例如,调用imtransform如下面的语法所示:

B = imtransform(A,T,'XYScale',1)

“大小”

一个非负整数的双元素向量,指定输出图像的行数和列数B.对于更高维度,imtransform取大小为B直接从大小一个.因此,大小(B, k)=大小(k)K > 2

默认值:如果不指定“大小”imtransform得到这个值“XData”“YData”,“XYScale”

“FillValues”

包含一个或多个填充值的数组。的imtransform函数在输入图像中相应的转换位置完全超出输入图像边界时,对输出像素使用填充值。如果一个是二维的,“FillValues”需要一个标量。然而,如果一个的维数大于2,则可以指定“FillValues”作为一个数组,其大小满足以下约束:大小(fill_values k)必须等于其中之一大小(k + 2)1

例如,如果一个是一个uint8RGB图像,即200 × 200 × 3,然后可能“FillValues”包括以下值。

价值 填满
0 用黑色填充
(0, 0, 0) 用黑色填充
255 填充白色
(255; 255; 255) 填充白色
(0, 0, 255) 充满蓝色
(255; 255; 0) 充满黄色

如果一个是4-D,尺寸为200 × 200 × 3 × 10,然后您可以指定“FillValues”作为标量,1 × 10, 3 × 1,或3 × 10。

输出参数

B

输出图像的任何非稀疏数字类(实数或复数)或类逻辑

xdata

的双元素向量x的第一列和最后一列的坐标B

请注意

有时输出值xdata而且ydata不完全等于输入“XData”而且“YData”参数。值的不同要么是因为需要整数数量的行和列,要么是因为您为的指定值“XData”“YData”“XYScale”,“大小”这并不完全一致。在任何一种情况下,的第一个元素xdata而且ydata总是等于的第一个元素“XData”而且“YData”,分别。只有第二个元素xdata而且ydata可以是不同的。

ydata

的双元素向量y的第一行和最后一行的坐标B

例子

简单的转换。对强度图像应用水平剪切:

I = imread('cameraman.tif');Tform = maketform('affine',[10 0 0;.5 10 0;0 0 1]);J = imtransform(I,tform);imshow(I), figure, imshow(J)

横向剪切

射影变换。用射影变换将一个正方形映射到一个四边形:

设置一个输入坐标系统,使输入图像%用顶点(0 0),(10 0),(1 1),(0 1)填充单位正方形。Udata = [0 1];Vdata = [0 1];%转换为顶点(-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), ... axis on subplot(1,2,2), imshow(B,'XData',xdata,'YData',ydata), ... axis on

射影变换

图像配准。将航拍照片注册到正射影像。

读一张航拍照片到MATLAB工作区并查看它。

未注册= imread('westconcordaerial.png');图中,imshow(未注册)

航拍照片

读取一个正射影像到MATLAB工作区并查看它。

图,imshow(“westconcordorthophoto.png”)

正色摄影

装载之前选取的控制点。

负载westconcordpoints

使用这些点为射影转换创建转换结构。

t_concord = cp2tform(movingPoints,fixedPoints,'projective');

获取正射影像的宽度和高度,执行转换,并查看结果。

Info = imfinfo(' westconcordorthphoto .png');Registered = imtransform(unregistered,t_concord,…“XData”,[1信息。Width], 'YData',[1 info.Height]);图中,imshow(注册)

转换图像

提示

  • 图像配准。imtransform函数自动移动输出图像的原点,以使尽可能多的转换后的图像可见。如果你使用imtransform要做图像配准,语法B = imtransform(A,tform)会产生意想不到的结果。若要控制输出图像的空间位置,请设置“XData”而且“YData”明确。

  • 纯粹的翻译。调用imtransform函数使用纯平移变换,得到的输出图像与输入图像完全相同,除非您指定“XData”而且“YData”价值观在你的呼唤中imtransform.例如,如果您希望输出与显示相对于输入图像的翻译的输入大小相同,则调用imtransform如下面的语法所示:

    B = imtransform(A,T,'XData',[1 size(A,2)],…“YData”,[1大小(A, 1)))

    有关此主题的更多信息,请参见执行简单的二维翻译转换

  • 转换速度。的输出空间位置时B使用“XData”而且“YData”imtransform使用函数自动估计位置findbounds.你可以用findbounds作为一些常用转换(如仿射或射影)的快速前向映射选项。对于没有前向映射的转换,例如由fitgeotransfindbounds可能要花更长的时间。如果你可以指定“XData”而且“YData”对于这种变换,imtransform可能会跑得明显更快。

  • 剪裁。的自动估计“XData”而且“YData”使用findbounds有时截取输出图像。为了避免剪切,设置“XData”而且“YData”直接。

  • 任意维变换。使用二维变换tform当使用imtransform.有关任意维数组转换,请参见tformarray

R2006a之前介绍过

这个话题有帮助吗?