这个问题需要旋转一个3D矩阵给出的图像,其中第一个维度是宽度,第二个维度是高度,第三个维度包含x,y,z坐标。
目前我正在使用以下代码
绘制曲面 Fig.sub1im=surf(ToFparam.ROI.XYZ(:,:,1),ToFparam.ROI.XYZ(:,:,2),ToFparam.ROI.XYZ(:,:,3),zeros(ToFparam.ROI.height,ToFparam.ROI.width,3));
现在,我有一个3-D矩阵,它是100x50x3。所有x数据都在第一个...页面或第三维层中,y是第二层... z是第三层。现在我需要在x y和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);
当我更新我的情节时,我没有得到任何错误,但看起来它并没有正确地绘制它。它似乎对我的数据产生了巨大的影响,并将其定位在我不希望它定位的地方。我不希望旋转矩阵影响缩放,只影响方向。如果有更快/更好的方法来完成这个冲浪地图,请告诉我,谢谢!
答案 0 :(得分:-1)
对于任何有兴趣的人,我都找到了解决方案。
如果您想要旋转三维矩阵,其中x,y,z数据位于第三维,请使用以下内容以获得最大速度和效率。
[m,n,z]=size(inMatrix);
outMatrix=reshape((A*(reshape(double(inMatrix),[m*n 3]))')',[m n 3]);
如果inMatrix是您的初始3d矩阵,outMatrix是您的输出3d矩阵,A是您的旋转矩阵。想要在图像中编码旋转时非常有用,因为图像沿其宽度和高度有2个维度,第3个维度是x,y和z坐标。这将允许您轻松绘制初始数据集,旋转它,然后重新绘制它。