How to rotate a 2D array (2D image) in 3D space around the x-axis?

8 ビュー (過去 30 日間)
IOANNIS
IOANNIS 2023 年 1 月 21 日
回答済み: IOANNIS 2023 年 1 月 21 日
Hi everyone,
I have a 2D image ( a 2D array ) and i want to rotate this image in 3D space around the x-axis using an angle
and i want to store the resulted rotated 2D image in a new 2D array.
For example, if i want to rotate this 2D image around the z-axis i can do it using:
A = imread('img.tif');
A_RotZ = imrotate(A,angle,'nearest','loose');
but i can't find how to do the same around x-axis.
A_RotX = ???
Any ideas?
  2 件のコメント
Matt J
Matt J 2023 年 1 月 21 日
i want to store the resulted rotated 2D image in a new 2D array.
Surely you mean you want to store it in a 3D array. If the image is rotated about the x-axis it will no longer occupy the xy plane, so how would you be able to express it in 2D form?
IOANNIS
IOANNIS 2023 年 1 月 21 日
編集済み: IOANNIS 2023 年 1 月 21 日
Thank you for the quick response.
If you keep a real 2D image in your hands and rotate it vertical, it will not become a 3D image. It is a rotated 2D image in a 3D space (check image attached). There are several similar question in matlabcentral/answers but, they explain how to make the visualization of this process, not how to get the image in a 2D-array.
he has 2D points in a star form, and he rotates the 2D star in 3D space. The star is again 2D, but with other origin.
In my case i have an image, and i want to get back this rotated image as a 2D array (which will look like the 2D rotated star in the example)

サインインしてコメントする。

採用された回答

IOANNIS
IOANNIS 2023 年 1 月 21 日
Finally!!
tform = projective2d([ cosd(TH) 0 0 ; 0 1 0 ; 0 0 cosd(TH) ]);
A_rotX = imwarp(A, tform);
imshowpair(A, A_rotX, 'montage');
I dont know why, but it worked!

その他の回答 (1 件)

Matt J
Matt J 2023 年 1 月 21 日
編集済み: Matt J 2023 年 1 月 21 日
A=rand(5)
A = 5×5
0.9780 0.1184 0.2270 0.7351 0.5083 0.1574 0.6862 0.4062 0.9613 0.1056 0.8993 0.0520 0.0274 0.8168 0.0247 0.0745 0.2219 0.3940 0.5630 0.1267 0.5624 0.1992 0.1596 0.5698 0.8510
theta=90;
R=eye(3);
R(2:3,2:3) = [ cosd(theta) -sind(theta); ...
sind(theta) cosd(theta)];
A=cat(3,0*A,A,0*A);
A_RotX = imwarp(A, rigid3d(R,[0;0;0]'))
A_RotX =
A_RotX(:,:,1) = 0 0 0 0 0 0.5624 0.1992 0.1596 0.5698 0.8510 0 0 0 0 0 A_RotX(:,:,2) = 0 0 0 0 0 0.0745 0.2219 0.3940 0.5630 0.1267 0 0 0 0 0 A_RotX(:,:,3) = 0 0 0 0 0 0.8993 0.0520 0.0274 0.8168 0.0247 0 0 0 0 0 A_RotX(:,:,4) = 0 0 0 0 0 0.1574 0.6862 0.4062 0.9613 0.1056 0 0 0 0 0 A_RotX(:,:,5) = 0 0 0 0 0 0.9780 0.1184 0.2270 0.7351 0.5083 0 0 0 0 0
  4 件のコメント
Matt J
Matt J 2023 年 1 月 21 日
That is what I have given you.
IOANNIS
IOANNIS 2023 年 1 月 21 日
編集済み: IOANNIS 2023 年 1 月 21 日
This works
tform = projective2d([1 -0.1 0.001; 0 1 0; 0 0 1]);
A_rotX = imwarp(A, tform);
imshowpair(A, A_rotX, 'montage');
but i dont know how to put the angle in it.
I tried to use in projective2d:
R=eye(3);
R(2:3,2:3) = [ cosd(theta) -sind(theta); ...
sind(theta) cosd(theta)];
but no success

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeGeometric Transformation and Image Registration についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by