MATLAB点云处理(二十):三维刚体几何变换矩阵(regid3d)与仿射几何变换矩阵(affine3d)
Posted 没事就要敲代码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB点云处理(二十):三维刚体几何变换矩阵(regid3d)与仿射几何变换矩阵(affine3d)相关的知识,希望对你有一定的参考价值。
文章目录
1 rigid3d 对象
1.1 rigid3d 语法
rigid3d
对象存储有关三维刚体几何变换的信息,并启用正向和反向变换。
刚性变换 是指在三维空间中,把一个物体做旋转、平移,是一种保持物体大小和形状不变的仿射变换,刚体变换又称为欧式变换、齐次变换。
主要有 2 种形式
NO.1 通过指定正向刚性变换矩阵
t
t
t 来创建rigid3d
对象
tform = rigid3d(t)
NO.2 通过设置旋转矩阵rot
和平移参数trans
来创建rigid3d
对象
tform = rigid3d(rot,trans)
1.2 rigid3d 参数详解
T
— Forward rigid transformation
正向刚性变换,为4×4数值矩阵,默认为4×4单位矩阵。该矩阵必须是齐次变换矩阵,满足以下公式给出的右乘约定:
[ x y z 1 ] = [ u v w 1 ] ∗ T \\begin{bmatrix} x&y&z&1\\\\ \\end{bmatrix}=\\begin{bmatrix} u&v&w&1\\\\ \\end{bmatrix}*T [xyz1]=[uvw1]∗T
其中, T = [ r 11 r 12 r 13 0 r 21 r 22 r 23 0 r 31 r 32 r 33 0 t x t y t z 1 ] T=\\begin{bmatrix} r_{11}&r_{12}&r_{13}&0\\\\ r_{21}&r_{22}&r_{23}&0\\\\ r_{31}&r_{32}&r_{33}&0\\\\ t_{x}&t_{y}&t_{z}&1\\\\ \\end{bmatrix} T=⎣⎢⎢⎡r11r21r31txr12r22r32tyr13r23r33tz0001⎦⎥⎥⎤
变换矩阵 T T T 中, r r r 为旋转矩阵, t t t 为平移向量
数据类型: single | double
Dimensionality
— Dimensionality of geometric transformation
此属性是只读的。
几何变换的维数,指定为正整数。
Rotation
— Rotation component of transformation
变换矩阵的旋转分量,指定为3×3的数值矩阵。该旋转矩阵满足以下公式给出的右乘约定:
[ x y z ] = [ u v w ] ∗ R \\begin{bmatrix} x&y&z\\\\ \\end{bmatrix}=\\begin{bmatrix} u&v&w\\\\ \\end{bmatrix}*R [xyz]=[uvw]∗R
数据类型:single | double
Translation
— Translation component of transformation
平移向量,指定为3元素行向量。该平移向量满足以下公式给出的约定:
[ x y z ] = [ u v w ] + t \\begin{bmatrix} x&y&z\\\\ \\end{bmatrix}=\\begin{bmatrix} u&v&w\\\\ \\end{bmatrix}+t [xyz]=[uvw]+t
数据类型:single | double
1.3 rigid3d 示例
代码:
clc;
clear;
% 以度(°)为单位指定旋转角度,并创建3×3旋转矩阵
theta1 = 30;
rot1 = [ cosd(theta1) sind(theta1) 0; ...
-sind(theta1) cosd(theta1) 0; ...
0 0 1];
% 以弧度为单位指定旋转角度,并创建3×3旋转矩阵(绕Z轴逆时针旋转)
theta2 = pi/6;
rot2 = [ cos(theta2) -sin(theta2) 0; ...
sin(theta2) cos(theta2) 0; ...
0 0 1];
% 分别指定x | y | z 平移量
trans = [2 3 4];
% 根据旋转矩阵和平移向量创建刚性变换rigid3d对象
tform = rigid3d(rot1,trans)
输出结果:
tform =
rigid3d with properties:
Rotation: [3x3 double]
Translation: [2 3 4]
注意: R2018a 没有 rigid3d 对象
2 affine3d 对象
affine3d
: 三维仿射几何变换
仿射变换:是指物体从一个向量空间进行一次线性变换并接上一个平移,变换到另一个向量空间。平移、旋转、缩放、剪切、反射以及它们任意次序的组合都是仿射变换。
点云处理中的pctransform
函数对affine3d
对象的要求如下:
三维仿射几何变换,指定为刚体变换对象。输入必须是有效的刚性变换(仅限旋转和平移)
在MATLAB R2018a中,affine3d
与R2021a中的 regid3d
类似
2.1 affine3d 语法
主要有 1 种形式:
NO.1 将属性T设置为由非奇异矩阵A定义的有效仿射变换。
tform = affine3d(A)
2.2 affine3d 参数详解
T
— Forward 3-D affine transformation
正向三维仿射变换,指定为非奇异的4乘4数值矩阵,默认为4×4单位阵,矩阵T使用以下约定:
[ x y z 1 ] = [ u v w 1 ] ∗ T \\begin{bmatrix} x&y&z&1\\\\ \\end{bmatrix}=\\begin{bmatrix} u&v&w&1\\\\ \\end{bmatrix}*T [xyz1]=[uvw1]∗T
其中, T = [ r 11 r 12 r 13 0 r 21 r 22 r 23 0 r 31 r 32 r 33 0 t x t y t z 1 ] T=\\begin{bmatrix} r_{11}&r_{12}&r_{13}&0\\\\ r_{21}&r_{22}&r_{23}&0\\\\ r_{31}&r_{32}&r_{33}&0\\\\ t_{x}&t_{y}&t_{z}&1\\\\ \\end{bmatrix} T=⎣⎢⎢⎡r11r21r31txr12r22r32t以上是关于MATLAB点云处理(二十):三维刚体几何变换矩阵(regid3d)与仿射几何变换矩阵(affine3d)的主要内容,如果未能解决你的问题,请参考以下文章MATLAB点云处理(二十六):将无序点云转换为有序点云(pcorganize),删除无效点(removeInvalidPoints)
MATLAB点云处理(二十六):将无序点云转换为有序点云(pcorganize),删除无效点(removeInvalidPoints)