【问题标题】:MATLAB: surf Plot after rotating my dataMATLAB:旋转我的数据后的冲浪图
【发布时间】:2013-07-26 06:08:12
【问题描述】:

这个问题需要旋转以 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));

现在,我有一个 100x50x3 的 3-D 矩阵。所有 x 数据都在第 3 维的第一页或层中,y 是第二层...z 第三层。现在我需要对 x y 和 z 数据应用 3x3 旋转矩阵。我知道如何重塑矩阵来做到这一点,我认为....只需将其放入 3 行 x...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);

当我更新我的情节时,我没有收到任何错误,但它看起来并不正确。似乎它对我的数据产生了巨大的偏移,并将其定位在我不希望它定位的地方。我不希望旋转矩阵影响缩放,只是方向。让我知道是否有更快/更好的方法来完成这个冲浪情节,谢谢!

【问题讨论】:

    标签: matlab


    【解决方案1】:

    对于任何感兴趣的人,我已经找到了解决方案。

    如果您想旋转 x,y,z 数据位于第 3 维的 3-D 矩阵,请使用以下方法以获得最大速度和效率。

        [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 坐标。这将允许您轻松绘制初始数据集、旋转它,然后重新绘制它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      • 2017-03-07
      • 1970-01-01
      • 2014-08-01
      相关资源
      最近更新 更多