2013-07-26 20 views
0

這個問題需要旋轉一個3D矩陣給出的圖像,其中第一維是寬度,第二維是高度,第三維包含x,y,z座標。MATLAB:旋轉我的數據後的衝浪圖

目前我使用下面的代碼

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第三個圖層。現在我需要在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); 

當我更新我的情節,我沒有得到任何錯誤,但它看起來並不像它正確繪製它。它似乎對我的數據造成了巨大的偏移,並將它置於某個我不希望定位的地方。我不會期望旋轉矩陣會影響縮放,只是方向。讓我知道是否有任何更快/更好的方式來完成這個衝浪情節,謝謝!

回答

-1

對於任何有興趣的人,我找到了解決方案。

如果您想旋轉x,y,z數據位於第三維的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座標。這將允許您輕鬆繪製初始數據集,旋轉它,然後重新繪製它。