この質問では、最初の次元が幅、2 番目の次元が高さ、3 番目の次元が x、y、z 座標を含む 3D マトリックスとして与えられた画像を回転させる必要があります。
現在、次のコードを使用してサーフェスをプロットしています
Fig.sub1im=surf(ToFparam.ROI.XYZ(:,:,1),ToFparam.ROI.XYZ(:,:,2),ToFparam.ROI.XYZ(:,:,3),zeros(ToFparam.ROI.height,ToFparam.ROI.width,3));
これで、100x50x3 の 3 次元マトリックスができました。すべての x データは、3 次元の最初の...ページまたはレイヤーにあり、y は 2 番目のレイヤーです...z は 3 番目のレイヤーです。ここで、xy および z データに 3x3 回転行列を適用する必要があります。これを行うためにマトリックスを再形成する方法を知っています....それを3行×50000列のマトリックスに入れてから、マトリックスを適用します。
次に、プロットをループで更新する必要があります。次に、新しい行列計算も含めて、次のことを行うつもりでした。
ToFparam.ROI.XYZ_Vector = ToFparam.ROI.XYZ;
ToFparam.ROI.XYZ_Vector = reshape(ToFparam.ROI.XYZ, [size(ToFparam.ROI.XYZ,1)*size(ToFparam.ROI.XYZ,2),3]);
ToFparam.ROI.XYZ_Vector = ToFparam.ROI.XYZ_Vector';
ToFparam.ROI.XYZ_DICOM = inv(DICOMparam.calib.navi2dicom(1:3,1:3))*inv(Naviparam.data.Endo_RefHomMat(1:3,1:3))*ToFparam.ROI.XYZ_Vector;
%refresh plot standard cuts
set(Fig.sub1im,'CData', Color);
set(Fig.sub1im, 'XData', ToFparam.ROI.XYZ_DICOM(1,:) + DICOMPos(1)/Fig.sub2samp);
set(Fig.sub1im, 'YData', ToFparam.ROI.XYZ_DICOM(2,:) + DICOMPos(2)/Fig.sub2samp);
set(Fig.sub1im, 'ZData', ToFparam.ROI.XYZ_DICOM(3,:) + DICOMPos(3)/Fig.sub2samp);
プロットを更新すると、エラーは発生しませんが、正しくプロットされているようには見えません。私のデータに大きなオフセットがあり、配置したくない場所に配置されているようです。回転行列がスケーリングに影響を与えるとは思いませんが、方向だけです。このサーフ プロットを達成するためのより高速な/より良い方法があれば教えてください。ありがとう!