主要内容

执行简单的二维转换

此示例演示如何执行称为平移的简单仿射变换。在平移中,通过向x坐标和y坐标添加指定值来移动坐标空间中的图像。(也可以使用翻译函数来执行翻译。)

读取要转换的图像。此示例使用棋盘作用

cb=棋盘格;imshow(cb)

图中包含一个轴对象。axes对象包含类型为image的对象。

获取有关图像的空间参考信息。当您希望显示转换结果时,此信息非常有用。

cb_ref=imref2d(尺寸(cb))
cb_ref=imref2d,具有以下属性:XWorldLimits:[0.5000 80.5000]YWorldLimits:[0.5000 80.5000]ImageSize:[80 80 80]PixelExtentInWorldX:1 PixelExtentInWorldY:1 ImageExtentInWorldX:80 ImageExtentInWorldY:80 xintriscLimits:[0.5000 80.5000]yintriscLimits:[0.5000 80.5000]

创建一个3乘3的变换矩阵,称为T在本例中,它定义了转换。在这个矩阵中,T(3,1)指定要在水平方向和垂直方向上移动图像的像素数T(3,2)指定要在垂直方向上移动图像的像素数。

T=[10;01;20 30 1]
T=3×31 0 0 0 1 0 20 30 1

创建定义要执行的平移的几何变换对象。因为平移变换是仿射变换的特例,所以本例使用仿射2D表示平移的几何变换对象。创建一个仿射2D通过传递3×3变换矩阵,T,致仿射2D构造器。

tform=affine2d(T);

执行转换。调用伊姆瓦普函数指定要变换的图像和几何变换对象。伊姆瓦普返回转换后的图像,cb_翻译。此示例还返回可选的空间参照对象,cb_翻译_参考,其中包含有关变换图像的空间参考信息。

[cb_translated,cb_translated_ref]=imwarp(cb,tform);

使用子地块配合显示图像。查看翻译后的图像时,可能显示转换没有效果。转换后的图像看起来与原始图像相同。可视化中没有明显变化的原因是:伊姆瓦普调整输出图像的大小,使其刚好能够包含整个变换图像,但不能包含整个输出坐标空间。但是,请注意,坐标值已被变换更改。

图形子批次(1,2,1);imshow(cb,cb_参考);子批次(1,2,2);imshow(cb_翻译,cb_翻译参考)

图中包含2个轴对象。轴对象1包含image类型的对象。轴对象2包含image类型的对象。

要在与原始图像坐标空间原点相同的关系中查看变换图像的整体,请使用伊姆瓦普“OutputView”参数,指定空间参照对象。空间参照对象指定输出图像的大小以及输出图像中包含多少输出坐标空间。为此,该示例创建与原始图像关联的空间参照对象的副本,并修改世界坐标限制以适应变换图像的完整大小。该示例以世界坐标设置输出图像的限制,以包括来自输入的原点

cb_-translated_-ref=cb_-ref;cb_翻译参考文献XWorldLimits(2)=cb_翻译参考文献XWorldLimits(2)+20;cb_翻译参考YWorldLimits(2)=cb_翻译参考YWorldLimits(2)+20;[cb_translated,cb_translated_ref]=imwarp(cb,tform,“OutputView”图,子地块(1,2,1);imshow(cb,cb-ref);子地块(1,2,2);imshow(cb-ref,cb-ref)

图中包含2个轴对象。轴对象1包含image类型的对象。轴对象2包含image类型的对象。

另见

||

相关话题