Matlab R2016bを使用してZ軸に沿って2D画像を回転させ、この手順を実行した後に画像を取得する方法を知りたいと思います。例えばMatlab上で2D画像を回転する3D画像にする
、のは、この2D画像みましょう:今すぐ
を、私はおよそ45°のそれを回転させる:
そして今、90°の:
Matlab R2016bで同じ操作を実行できるかどうか知っていますか? https://www.youtube.com/watch?v=m89mVexWQZ4
Matlab R2016bを使用してZ軸に沿って2D画像を回転させ、この手順を実行した後に画像を取得する方法を知りたいと思います。例えばMatlab上で2D画像を回転する3D画像にする
、のは、この2D画像みましょう:今すぐ
を、私はおよそ45°のそれを回転させる:
そして今、90°の:
Matlab R2016bで同じ操作を実行できるかどうか知っていますか? https://www.youtube.com/watch?v=m89mVexWQZ4
はい、それは可能です:
はあなたの助け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
はい、それは可能である。そのためのコードは、アニメーションGIFとして保存された出力を下回っているだけでなく、。このサイトでそれを行う方法についての徹底的な説明でも答えはありますが、残念ながら質問は保留になりました。あなたの研究はどのようになったのですか?何を試しましたか? – beaker
こんにちは、あなたの答えをありがとう:)残念なこと...この答えは今非常に便利だったでしょう。私は射影変換を使用しようとしましたが、期待どおりに動作しませんでした。さらに、私はMatlabの射影変換を使って不可能な回転の角度を取得したいと思います。私に何ができる ? –
3次元プロットなしでこの問題を解決する方法を知りたい方、代わりに画像変換を使用する方は、[この質問](https://stackoverflow.com/q/47273993/52738)を参照してください。 – gnovice