主要内容

imtransform

(不推荐)对图像进行二维空间变换

imtransform不推荐。使用imwarp而不是二维和三维变换。使用tformarray对于高维变换。

描述

例子

B= imtransform (一个tform变换图像一个根据定义的二维空间变换tform,并返回转换后的图像,B

如果一个那么是彩色图像吗imtransform对每个颜色通道应用相同的二维变换。同样地,如果一个那么,一个体积或图像序列是否具有三个或更多维度imtransform将相同的二维变换应用到所有高维平面上。

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

B= imtransform (___名称,值使用名称-值对来控制空间转换的各个方面。

例子

Bxdataydata= imtransform(___也返回输出图像的范围B在输出X-Y空间中。默认情况下,imtransform计算xdata而且ydata自然而然地B包含整个转换后的图像一个.方法的值可以覆盖此自动计算XData而且YData名称-值对输入参数。

例子

简单的转换

对灰度图像应用水平剪切。

I = imread(“cameraman.tif”);Tform = maketform(仿射的,[10 0 0;.5 10 0;0 0 1]);J = imtransform(I,tform);imshow (J)

射影变换

用射影变换将正方形映射到四边形。设置一个输入坐标系统,使输入图像用顶点(0 0)、(10 0)、(1 1)、(0 1)填充单元正方形。

I = imread(“cameraman.tif”);Udata = [0 1];Vdata = [0 1];

变换为一个顶点为(- 4.2),(- 8.3),(-3 -5),(6 3)的四边形。

Tform = maketform(“射影”,[0 0;1 0;1 1;0 1],...[4 2;8 3;3 5;6 3]);

填充灰色并使用双三次插值。使输出大小与输入大小相同。

[B,xdata,ydata] = imtransform(I,tform,“双三次的”...“udata”udata,...“vdata”vdata,...“大小”、大小(我),...“填满”, 128);次要情节(1、2、1);imshow(我“XData”udata,“YData”vdata)次要情节(1、2、2);imshow (B,“XData”xdata,“YData”ydata)

图像配准

将航拍照片读入MATLAB®工作区并查看它。

未注册= imread(“westconcordaerial.png”);图imshow(未注册)

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

图imshow (“westconcordorthophoto.png”

装载之前选取的控制点。

负载westconcordpoints

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

t_concord = cp2tform(movingPoints,fixedPoints,“射影”);

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

Info = iminfo (“westconcordorthophoto.png”);Registered = imtransform(unregistered,t_concord,...“XData”[1的信息。宽度),“YData”[1 info.Height]);图imshow(注册)

输入参数

全部折叠

要转换的图像,指定为任意维度的数字或逻辑数组。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑

转换结构,指定为TFORM结构,如返回的maketform.转换的第一个维度是水平或x-坐标,第二个维度是垂直或y协调。这个约定与MATLAB中的数组下标约定相反。

插值方法,指定为这些值之一。

插值法 描述
双线性的 线性插值
“最近的” 最近邻插值——输出像素被指定为该点所在像素的值。不考虑其他像素。
“双三次的” 三次插值
重新取样结构 重新取样返回的结构makeresampler.这个选项允许对如何进行更多的控制imtransform进行重采样。

数据类型:字符

名称-值参数

指定逗号分隔的可选对名称,值参数。的名字参数名称和价值对应的值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:“FillValues”,128年

输入图像的空间范围一个在U-V输入空间中,指定为2元数值向量。的价值UData而且VData表示世界坐标系中的坐标。的两个元素UDatau的第一列和最后一列的坐标(水平)一个,分别。的两个元素VDatav的第一行和最后一行的坐标(垂直)一个

的空间范围一个在U-V空间中与图像在本征坐标中的范围相同。的默认值UData[1大小(2)的默认值VData[1尺寸(1)

变换后图像的空间范围B在X-Y输入空间中,指定为2元数值向量。的价值XData而且YData表示世界坐标系中的坐标。的两个元素XDatax的第一列和最后一列的坐标(水平)B,分别。的两个元素YDatay的第一行和最后一行的坐标(垂直)B

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

X-Y输出空间中的像素大小,指定为数值标量或2元素数值向量。如果XYScale是标量,那么输出像素是平方和XYScale指定边长。否则,两个元素XYScale分别在X-Y空间中指定每个输出像素的宽度和高度。

的默认值。XYScale这取决于您是否指定大小

  • 如果你指定大小,然后imtransform计算XYScale大小XData,YData

  • 如果不指定大小,然后imtransform使用输入像素的比例XYScale,除非输出图像过大。

请注意

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

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

变换后的图像大小B,指定为两个元素的正整数向量。的两个元素大小指定输出图像的行数和列数B,分别。对于更高维度,imtransform取大小为B直接从大小输入图像一个.因此,大小(B, k)=大小(k)K > 2

如果不指定大小,然后imtransform得到这个值XDataYData,XYScale

填充值,用于输入图像边界以外的输出像素,指定为逗号分隔的对,由“FillValues”和数值标量或数值数组。当输入图像中对应的反变换位置完全在输入图像边界之外时,填充值用于输出像素。

  • 如果输入图像一个是二维的,那么FillValues必须是一个标量。

  • 如果一个是三维的还是N-D的FillValues可以是一个数组,其大小满足以下约束:大小(FillValues 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在X-Y输出空间中,作为两个元素的数字向量返回。的两个元素xdatax的第一列和最后一列的坐标(水平)B分别在世界坐标系中。

请注意

第一个元素xdata的第一个元素XData参数,如果指定。然而,有时第二要素xdata不完全等于的第二元素XData.值的不同,要么是因为需要整数数量的行和列,要么是因为您为的指定值XDataYDataXYScale,大小这并不完全一致。

转换后图像的垂直范围B在X-Y输出空间中,作为两个元素的数字向量返回。的两个元素ydatay的第一行和最后一行的坐标(垂直)B分别在世界坐标系中。

请注意

第一个元素ydata的第一个元素YData参数,如果指定。然而,有时第二要素ydata不完全等于的第二元素YData.值的不同,要么是因为需要整数数量的行和列,要么是因为您为的指定值XDataYDataXYScale,大小这并不完全一致。

提示

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

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

    B = imtransform(A,T,“XData”[1大小(2),...“YData”[1大小(1)))

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

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

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

R2006a之前介绍过