几何变换的矩阵表示
您可以使用一个几何变换矩阵来完成全球转换的图像。首先,定义一个变换矩阵,并使用它来创建一个几何变换对象。然后,应用到一个图像通过调用一个全球转换imwarp
与对象的几何变换。例如,看到的执行简单的二维翻译转换。
二维仿射变换
下表列出了一些二维仿射变换的变换矩阵用于定义它们。对于二维仿射变换,最后一列必须包含(0 0 1)齐次坐标。
使用变换矩阵来创建一个affine2d
几何变换对象。
二维仿射变换 | 示例(原始和转换图像) | 变换矩阵 | |
---|---|---|---|
翻译 |
关于像素坐标的更多信息,请参阅图像坐标系统。 |
||
规模 |
|
||
剪切 |
|
||
旋转 |
|
二维射影变换
射影变换使得图像的平面倾斜。平行线可以收敛到一个消失点,创造深度。
3 x3的转换矩阵。和仿射变换不同的是,没有任何限制的最后一列变换矩阵。
二维射影变换 | 例子 | 变换矩阵 | |
---|---|---|---|
倾斜 |
|
当 注意,当 |
射影变换经常用于注册图像对齐。如果你有两张图片,你想要对齐,首先选择控制点对使用cpselect
。然后,适合一个射影变换矩阵控制点对使用fitgeotrans
并设置transformationType
来“射影”
。这会自动地创建一个projective2d
几何变换对象。变换矩阵存储为属性projective2d
对象。转换可以被应用到其他图像imwarp
。
创建复合二维仿射变换
您可以组合多个转换成一个矩阵使用矩阵乘法。矩阵乘法的顺序很重要。
这个例子展示了如何创建一个复合的二维平移和旋转变换。
创建一个棋盘图像,将进行转换。也为图像创建一个空间引用对象。
cb =棋盘(4,2);cb_ref = imref2d(大小(cb));
为了说明图像的空间位置,创建一个平坦的背景图像。叠加棋盘背景,用绿色突出显示棋盘的位置。
背景= 0 (150);imshowpair (cb、cb_ref、背景、imref2d(大小(背景)))
创建一个转换矩阵,并将其存储为affine2d
几何变换对象。这种转换将100像素的图像水平。
T = [1 0 0、0 1 0、100 0 1];tform_t = affine2d (T);
创建一个旋转矩阵,并将其存储为affine2d
几何变换对象。这翻译会顺时针旋转30度图像原点。
R = [cosd(30)信德(30)0;信德(30)cosd (30) 0。0 0 1);tform_r = affine2d (R);
翻译跟着旋转
执行翻译第一和第二旋转。在变换矩阵的乘法,转换矩阵T
在左边,和旋转矩阵R
在右边。
TR = T * R;tform_tr = affine2d (TR);[,out_ref] = imwarp (cb、cb_ref tform_tr);imshowpair (out_ref,背景,imref2d(大小(背景)))
旋转之后,翻译
反向转换的顺序:先进行旋转和翻译。在变换矩阵的乘法,旋转矩阵R
在左边,翻译矩阵T
在右边。
RT = R * T;tform_rt = affine2d (RT);[,out_ref] = imwarp (cb、cb_ref tform_rt);imshowpair (out_ref,背景,imref2d(大小(背景)))
注意转换后的图像的空间位置不同翻译时旋转紧随其后。
三维仿射变换
下表列出了三维仿射变换的变换矩阵用于定义它们。注意,在三维情况下,有多个矩阵,这取决于你想旋转或剪切图像。最后一列必须包含(0 0 0 1)。
使用变换矩阵来创建一个affine3d
几何变换对象。
三维仿射变换 | 变换矩阵 | ||
---|---|---|---|
翻译 |
|
||
规模 |
|
||
剪切 | x, y剪:
|
x, z剪:
|
y, z剪:
|
旋转 | 关于x轴:
|
关于y轴:
|
关于z轴:
|
一天的仿射变换,最后一列必须包含[0 (N, 1);1]
。imwarp
不支持转换超过三个万博1manbetx维度。