3D 形状を揃える方法を探しています。AB、A、および B のマトリックスがあり、それぞれに 3D アイテムが含まれています。行列 AB は A と B で構成されています。
A と B が AB を再構築するために必要な変換 (回転、平行移動) を見つけたいと思います。
私を助けることができる方法論や便利な機能はありますか?
よろしく。
次のアプローチを考えています。
最初に、関連する自由度を処理する変換行列を取得します。次に、非線形最適化を使用して、バイナリ 3D の差異を最小限に抑えます。自由度について: (x,y,z) 位置と (theta,phi,psi) 角度方向 (Euler) の各オブジェクト。したがって、検索を実行するには 6+6=12 の自由度 (または次元) が必要だと考える人もいるでしょう。ただし、2つのボディが存在する必要があるという制約があるため、次元は低くなります。したがって、相対を探すだけで十分です。空間分離 (dx,dy,dz) と相対角度差 (theta,phi,psi) 。さらに、形状に対称性があるかどうかを尋ねることができます。たとえば、形状の 1 つが球体であるか、角度が無関係であるかなどです。したがって、自由度ごとに、関連する 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)
この詳細については、次のリンクを参照してください。