旋转后如何在图像上找到一个点?
How to find a point on image after rotation?
图像上的一个点(x,y)在旋转后需要位于同一图像上。我已经使用 imrotate、imtransform 和 imwarp 来旋转图像(下面的代码显示了 imwarp 的实现),但是 none 似乎对我有用。输出旋转图像大于原始图像。谁能建议如何在输出旋转图像上定位同一点。
close all;
I=imread('P.png');
x=339;
y=317;
subplot(2,2,1);
imshow(I),title('Original Image');
hold on;
plot(x,y,'ro');
hold off;
theta=5;
tform = affine2d([cosd(theta) -sind(theta) 0;sind(theta) cosd(theta) 0; 0 0 1])
RI = imwarp(I,tform);
[x1,y1]=transformPointsForward(tform,x,y);
subplot(2,2,2);
imshow(RI),title('Rotated Image');
hold on;
plot(x1,y1,'ro');
hold off;
尽管如果旋转图像与原始图像具有相同的大小,代码仍然有效。但就我而言,它会导致原始图像的裁剪。我已经能够在各种论坛上找到这个问题的答案,但 none 似乎对我有用。请回答。
像这样调用imwarp
:
[RI, ref] = imwarp(I,tform);
ref
是类型 imref2d
的空间参考对象,它包含输出图像坐标系与 "world coordinate system" 的关系,在本例中,它是坐标输入图像的系统。然后你可以这样解释翻译:
[x1,y1]=transformPointsForward(tform,x,y);
x1 = x1 - ref.XWorldLimits(1);
y1 = y1 - ref.YWorldLimits(1);
图像上的一个点(x,y)在旋转后需要位于同一图像上。我已经使用 imrotate、imtransform 和 imwarp 来旋转图像(下面的代码显示了 imwarp 的实现),但是 none 似乎对我有用。输出旋转图像大于原始图像。谁能建议如何在输出旋转图像上定位同一点。
close all;
I=imread('P.png');
x=339;
y=317;
subplot(2,2,1);
imshow(I),title('Original Image');
hold on;
plot(x,y,'ro');
hold off;
theta=5;
tform = affine2d([cosd(theta) -sind(theta) 0;sind(theta) cosd(theta) 0; 0 0 1])
RI = imwarp(I,tform);
[x1,y1]=transformPointsForward(tform,x,y);
subplot(2,2,2);
imshow(RI),title('Rotated Image');
hold on;
plot(x1,y1,'ro');
hold off;
像这样调用imwarp
:
[RI, ref] = imwarp(I,tform);
ref
是类型 imref2d
的空间参考对象,它包含输出图像坐标系与 "world coordinate system" 的关系,在本例中,它是坐标输入图像的系统。然后你可以这样解释翻译:
[x1,y1]=transformPointsForward(tform,x,y);
x1 = x1 - ref.XWorldLimits(1);
y1 = y1 - ref.YWorldLimits(1);