可以使用几何变换矩阵对图像进行全局变换。首先,定义一个变换矩阵,并用它创建一个几何变换对象。然后,通过调用对图像应用全局变换imwarp
几何变换对象。例如,请参见执行简单的二维转换.
表格列出了二维仿射变换和用来定义它们的变换矩阵。对于二维仿射变换,最后一列必须包含[0,0 1]齐次坐标。
使用任何二维变换矩阵的组合来创建affine2d
几何变换对象。使用2-D平移和旋转矩阵的组合创建rigid2d
几何变换对象。
二维仿射变换 | 示例(原始图像和转换后的图像) | 变换矩阵 | |
---|---|---|---|
翻译 |
有关像素坐标的更多信息,请参见图像坐标系. |
||
规模 |
|
||
剪切 |
|
||
旋转 |
|
投影变换使图像的平面倾斜。平行线可以收敛到消失点,形成深度的外观。
这个变换是一个3 × 3矩阵。不像仿射变换,变换矩阵的最后一列没有限制。
二维射影变换 | 例子 | 变换矩阵 | |
---|---|---|---|
倾斜 |
|
什么时候 注意,当 |
射影变换经常用于配准不对齐的图像。如果你有两个图像想要对齐,首先选择控制点对使用cpselect
. 然后,用投影变换矩阵拟合控制点对菲吉奥特兰斯
并设置转换类型
来“射影”
.这将自动创建一个投影2D
几何变换对象。转换矩阵作为属性存储在投影2D
然后,可以使用imwarp
.
可以使用矩阵乘法将多个变换组合成一个矩阵。矩阵乘法的顺序很重要。
此示例演示如何创建二维平移和旋转变换的组合。
创建将进行转换的棋盘图像。还要为图像创建空间参照对象。
cb =棋盘(4,2);cb_ref = imref2d(大小(cb));
要演示图像的空间位置,请创建一个平面背景图像。将棋盘覆盖在背景上,以绿色突出显示棋盘的位置。
背景= 0 (150);imshowpair (cb、cb_ref、背景、imref2d(大小(背景)))
创建一个翻译矩阵,并将其存储为affine2d
几何变换对象。这个平移将使图像水平移动100像素。
T=[1 0;0 1 0;100 0 1];T形式T=affine2d(T);
创建一个旋转矩阵,并将其存储为affine2d
几何变换对象。此平移将围绕原点顺时针旋转图像30度。
R = [sind(30) sind(30) 0;-sind(30) sind(30) 0;0 0 1];tform_r = affine2d (R);
平移后旋转
首先执行平移,然后执行旋转。在变换矩阵的乘法中,平移矩阵T
在左边,旋转矩阵呢R
在右边。
TR=T*R;tform_tr=仿射2d(tr);[out,out\u ref]=imwarp(cb,cb\u ref,tform\u tr);imshowpair(out,out\u ref,background,imref2d(size(background)))
先旋转后平移
反转转换的顺序:首先执行旋转,然后执行平移。在变换矩阵的乘法中,旋转矩阵R
在左边,平移矩阵T
在右边。
RT=R*T;t形式_rt=仿射2d(rt);[out,out\u ref]=imwarp(cb,cb\u ref,tform\u rt);imshowpair(out,out\u ref,background,imref2d(size(background)))
注意变换后图像的空间位置与平移后旋转时的空间位置是不同的。
下表列出了三维仿射变换以及用于定义它们的变换矩阵。请注意,在三维情况下,有多个矩阵,具体取决于您希望旋转或剪切图像的方式。最后一列必须包含[0 1]。
使用任何三维变换矩阵的组合来创建一个affine3d
几何变换对象。使用3-D平移和旋转矩阵的组合创建rigid3d
几何变换对象。
三维仿射变换 | 变换矩阵 | ||
---|---|---|---|
翻译 |
|
||
规模 |
|
||
剪切 | x, y剪切力:
|
x, z剪切力:
|
y, z剪切力:
|
旋转 | 关于x轴:
|
关于y轴:
|
关于z轴:
|
对于N-D仿射变换,最后一列必须包含[0 (N, 1);1]
.imwarp
不支持超过三个维度万博1manbetx的转换。
imwarp
|菲吉奥特兰斯
|affine2d
|affine3d
|rigid2d
|rigid3d
|投影2D