2015-06-18 154 views
0

我有一個三維數組,其中包含概率值作爲空間位置(x和y座標)的函數。當我使用imagesc或surf來繪製這個數組時,我會得到一個最大值的橢圓輪廓。我想旋轉XY平面中最大概率點的數據,使得Y軸平行於橢圓的長軸(我使用regionprops計算)。我不想旋轉圖像或使用旋轉或幾何對象旋轉的表面,因爲我需要包含旋轉數據的數組。如果我知道圍繞Z軸的旋轉角度(用regionprops獲得),我怎麼能實現這一點?XY平面中的3D數據旋轉(Matlab)

編輯:這裏是我用來圍繞中心旋轉我的矩陣的代碼。然而,當我用衝浪繪製的結果,我得到的最古怪的結果...

% Translation and anti-translation matrix 
translate = [1 0 0 -centroide(1); 0 1 0 -centroide(2); 0 0 1 0; 0 0 0 1]; 
anti_translate = [1 0 0 centroide(1); 0 1 0 centroide(2); 0 0 1 0; 0 0 0 1]; 

% Rotation matrix 
rotate = [cosd(-orientation) -sind(-orientation) 0 0; sind(-orientation) cosd(-orientation) 0 0; 0 0 1 0; 0 0 0 1]; 

% Temporary cell array for data transformation 
data_vector = cell(size(RCb,1),size(RCb,2),size(RCb,3)); 
% Cell array for transformed data storage 
transformed_data = cell(size(RCb,3),1); 
for i = 1:(size(RCb,3)) 
    transformed_data{i} = zeros(3, size(RCb,1)*size(RCb,2)); 
end 
for i = 1:size(RCb,3) % temporal dimension 
    for j = 1:size(RCb,2) % x dimension 
     for k = 1:size(RCb,1) % y dimension 
      % [x y z] vector 
      data_vector{k,j,i} = [j,k,RCb(k,j,i),1]'; 
      % translation 
      data_vector{k,j,i} = translate*data_vector{k,j,i}; 
      % rotation 
      data_vector{k,j,i} = rotate*data_vector{k,j,i}; 
      % anti-translation 
      data_vector{k,j,i} = anti_translate*data_vector{k,j,i}; 
      data_vector{k,j,i} = data_vector{k,j,i}(1:3); 
      transformed_data{i}(:,((j-1)*size(RCb,1)+k)) = data_vector{k,j,i}; 
     end 
    end 
end 

%%%% Test %%%% : image at 100 ms 
figure, 
imagesc(transformed_data{100}(2,:),transformed_data{100}(1,:),transformed_data{100}(3,:)); 

我得到這個圖片:enter image description here

我在做什麼錯?

+0

你可以添加橢圓輪廓圖像到你的問題? –

回答

0

您是否嘗試過rotz旋轉矩陣圍繞z軸旋轉,請查看文檔here


Othewise,你可以用下面的矩陣R與旋轉角γ乘以你的矩陣:

enter image description here

注意,該功能在Matlab cossin是基於弧度。您可以使用程度cosd