我正在寻找一种对齐3D形状的方法。我有矩阵AB,A和B,每个都包含一个3D项目。 Matrix AB由A和B组成。
我想找到A和B重建AB所需的转换(旋转,平移)。
您是否有任何方法或有用的功能可以帮助我?
问候。
答案 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中查看更详细的说明。