2017-01-08 282 views
1

我想知道如何使用Matlab R2016b沿Z軸旋轉2D圖像並在執行此過程後獲取圖像。在Matlab上將2D圖像轉換爲旋轉的3D圖像

例如,讓我們這個2D圖像:

enter image description here

現在,我將其旋轉45°大致爲:

enter image description here

而現在,90°:

enter image description here

你知道是否可以在Matlab R2016b中執行相同的操作嗎?

非常感謝您的幫助

圖片來源:https://www.youtube.com/watch?v=m89mVexWQZ4

+1

是的,它是可能的。甚至有一個答案,並詳細描述瞭如何在這個網站上做到這一點,但不幸的是,這個問題被擱置了。你的研究成果是什麼?你有什麼嘗試? – beaker

+0

嗨,謝謝你的回答:)真可惜...這個答案現在已經非常有用了。我嘗試使用投影變換,但它沒有按預期工作。此外,我想通過Matlab中的投影變換檢索不可能的旋轉角度。我能做什麼 ? –

+1

對於如何解決這個*如果沒有* 3-D繪圖,並改爲使用圖像轉換,請參閱[這個問題](https://stackoverflow.com/q/47273993/52738) – gnovice

回答

4

是的,它是可能的。最簡單的做法是將圖像以3D形式映射到y = 0平面上,然後將攝像機旋轉到所需的方位角或相對於軸的角度。一旦你這樣做了,你可以使用getframe/cdata成語來實際捕獲變量本身的實際圖像數據。之所以這樣做,是因爲我將用於顯示圖像的方法是通過surf命令繪製3D曲面圖,但這裏的軸是進出軸的軸的屏幕。軸x軸是水平軸,當顯示數據時軸將是垂直軸。

首先使用諸如imread之類的東西讀取圖像,然後您需要定義映射到3D平面的圖像的4個角,然後旋轉相機。您可以使用view功能幫助您通過調整方位角(第一個參數)並將仰角保持爲0來旋轉攝像頭。

類似這樣的東西可以起作用。我將使用辣椒形象,是圖像處理工具箱的一部分:

im = imread('peppers.png'); % Read in the image 
ang = 45; % Rotate clockwise by 45 degrees 

% Define 4 corners of the image 
X = [-0.5 0.5; -0.5 0.5]; 
Y = [0 0; 0 0]; 
Z = [0.5 0.5; -0.5 -0.5]; 

% Place the image on the y = 0 plane 
% Turn off the axis and rotate the camera 
figure; 
surf(X, Y, Z, 'CData', im, 'FaceColor', 'texturemap'); 
axis('off'); 
view(ang, 0); 

% Get the image data after rotation 
h = getframe; 
rot_im = h.cdata; 

rot_im包含旋轉圖像。爲了欣賞圖像的旋轉,我們可以實時循環0到360度的角度。在每個角度,我們可以使用view動態旋轉相機並使用drawnow來更新數字。我還更新了該圖的標題,以向您展示每次更新時的角度。造成這種情況的代碼如下以及保存爲GIF動畫輸出:

for ang = 0 : 360 
    view(ang, 0); 
    pause(0.01); 
    drawnow; 
    title(sprintf('Angle: %d degrees', ang)); 
end