1

我正在寻找一种对齐 3D 形状的方法。我有矩阵 AB、A 和 B,每个都包含一个 3D 项目。矩阵 AB 由 A 和 B 组成。

我想找到 A 和 B 重建 AB 所需的转换(旋转、平移)。

您有任何方法或有用的功能可以帮助我吗?

问候。

4

1 回答 1

1

我想到了以下方法:

首先获得将处理相关自由度的变换矩阵。然后使用非线性优化来最小化二进制 3D 差异。关于自由度:每个对象在 (x,y,z) 位置和 (theta,phi,psi) 角度方向 (Euler)。所以有人会认为你需要 6+6=12 个自由度(或维度)来执行搜索。但是,维度较低,因为您有 2 个物体必须存在的约束,所以寻找相对的就足够了空间分离 (dx,dy,dz) 和相对角度差 (theta,phi,psi)。此外,我们可以询问形状是否存在对称性,例如,如果形状中的一个是球体,角度是不相关的,等等。所以对于每个自由度,我希望有一个相关的 3x3 变换矩阵,Rtheta,Rphi,Rpsi,Tx,Ty,Tz。其中 Rtheta 看起来像:

 Rtheta = [cos(theta)    0      -sin(theta)   0
           0             1              0     0
           sin(theta)    0       cos(theta)   0
           0             0              0     1];

这些矩阵可以组合成一个通用的旋转矩阵

 Rot=Rtheta*Rphi*Rpsi;

并同样得到平移矩阵Trans=Tx*Ty*Tz,则

tform_Trans = maketform('affine', Trans);
tform_Rot = maketform('affine', Rot);
tform_RT = maketform('composite',tform_Rot,tform_Trans);

并使用函数应用转换

 tformarray(A, tform_RT, R, TDIMS_A, TDIMS_B, TSIZE_B, TMAP_B, F)

在以下链接中查看更详细的说明。

于 2012-10-30T22:45:02.390 回答