matlab:对齐3D形状

时间:2012-10-30 13:51:52

标签: matlab alignment

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

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

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

问候。

1 个答案:

答案 0 :(得分:1)

我想到了以下方法:

首先获得将照顾相关自由度的变换矩阵。然后使用非线性优化来最小化二进制3D差异。 关于自由度: 每个物体在(x,y,z)位置和(θ,phi,psi)角度方向(欧拉)。所以人们会认为你需要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)

请在以下link中查看更详细的说明。

相关问题