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)

基于ICP算法的三维点云模型的自动配准算法matlab仿真

点云数据处理

如何用matlab读取三维点云数据,麻烦大神能写出具体的代码