2017-01-08 14 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

はい、それは可能である。そのためのコードは、アニメーションGIFとして保存された出力を下回っているだけでなく、。このサイトでそれを行う方法についての徹底的な説明でも答えはありますが、残念ながら質問は保留になりました。あなたの研究はどのようになったのですか?何を試しましたか? – beaker

+0

こんにちは、あなたの答えをありがとう:)残念なこと...この答えは今非常に便利だったでしょう。私は射影変換を使用しようとしましたが、期待どおりに動作しませんでした。さらに、私はMatlabの射影変換を使って不可能な回転の角度を取得したいと思います。私に何ができる ? –

+1

3次元プロットなしでこの問題を解決する方法を知りたい方、代わりに画像変換を使用する方は、[この質問](https://stackoverflow.com/q/47273993/52738)を参照してください。 – gnovice

答えて

4

はい、それは可能です:

はあなたの助け

Imagesソースいただき、誠にありがとうございます。最も簡単な方法は、y = 0平面上の画像を3Dで写像し、次にカメラを所望の方位角またはy軸に関する角度に回転させることです。いったんこれを行うと、getframe/cdataイディオムを使用して、実際のイメージデータを変数自体に実際にキャプチャすることができます。 y平面に関してこれを行う理由は、画像を表示するために使用する方法が、サーフェスプロットを3Dでプロットするsurfコマンドを使用するためですが、ここではy軸は出入りする軸です画面のxの軸は水平で、データを表示するときはzの軸が垂直になります。

最初に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を使用して図を更新できます。また、図のタイトルを更新して、各更新時に角度がどのように表示されるかを示しました。

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