How can I get the new coordinates of a point after rotation of an image (2D)?
5 次查看(过去 30 天)
显示 更早的评论
I have got the coordinates of a point (P) in my main image (2D). The main image (im) is now rotated using imrotate and the angle alpha. Now, I want to know what the coordinates of P are in the rotated image.
P = [5;8]; % coordinates of point
alpha = 45; % angle for rotation
RotatedIm = imrotate(im,alpha); % rotation of the main image (im)
RotMatrix = [cosd(alpha) -sind(alpha); sind(alpha) cosd(alpha)];
ImCenter = (size(im)/2)'; % Center of the main image
RotatedP = RotMatrix*(P-ImCenter)+ImCenter; % Rotation of point P over center of the image with angle alpha
The rotatedP coordinates are not the right ones. The problem is that there are zeros added on the borders of RotatedIm. I think that that is the reason why the coordinates of RotatedP are not correct. Can someone help me to find the coordinates of point P in the rotated image?
4 个评论
Marco A.
2025-1-20
移动:Matt J
2025-1-20
I know this is a thread from more than 5 years ago but, after transformation, I encountered a +/-1 px shift between the image and the coordinates of the points (when they are at the corners of the image input). In this script, I use the corners of the input to re-locate an extracted (and transformed) patch in its original position (before the transformation). I have managed to improve the shift to a minimum.
See attached.
I hope this script helps someone trying to reconstruct and image from its pieces. :)
Cheers,
Marco
Matt J
2025-1-20
That might be because the OP defined the center of the rotation as
ImCenter = (size(im)/2)';
when really, in 1-based pixel coordinates, the geometric center of the image grid would be at
ImCenter = ((size(im)+1)/2)';
采纳的回答
Matt J
2018-10-3
编辑:Matt J
2018-10-3
P = [5;8]; % coordinates of point
alpha = 45; % angle for rotation
RotatedIm = imrotate(im,alpha); % rotation of the main image (im)
RotMatrix = [cosd(alpha) -sind(alpha); sind(alpha) cosd(alpha)];
ImCenterA = (size(im)/2)'; % Center of the main image
ImCenterB = (size(RotatedIm )/2)'; % Center of the transformed image
RotatedP = RotMatrix*(P-ImCenterA)+ImCenterB;
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!