簡體   English   中英

在XY平面上旋轉3D數據(Matlab)

[英]Rotation of 3D data in XY plane (Matlab)

我有一個3D數組,其中包含概率值與空間位置(x和y坐標)的關系。 當我使用imagesc或surf繪制此數組時,得到的橢圓形輪廓最大。 我想繞着XY平面中最大概率的點旋轉數據,以使Y軸變得平行於橢圓的主軸(我使用regionprops計算得出)。 我不想使用旋轉或幾何對象旋轉來旋轉圖像或表面,因為我需要包含旋轉數據的數組。 如果我知道繞Z軸旋轉的角度(通過regionprops獲得),如何實現?

編輯 :這是我用來圍繞矩陣旋轉矩陣的代碼。 但是,當我使用surf繪制結果時,我得到了最奇怪的結果...

% 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,:));

我得到這張圖片: 在此處輸入圖片說明

我究竟做錯了什么?

您是否嘗試過將rotz用於旋轉矩陣以繞z軸旋轉,請查看此處的文檔。


否則,您可以將矩陣與以下矩陣R乘以旋轉角γ:

在此處輸入圖片說明

注意,Matlab中的函數cossin是基於弧度的。 您可以使用cosd學位。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM