我被要求围绕任意点进行图像旋转。他们提供的框架在matlab中,所以我必须填充一个名为MakeTransformMat
的函数,它接收旋转角度和我们想要旋转的点。
正如我在课堂上看到的那样,首先我们将这个点转换为原点,然后我们旋转,最后我们将其转换回来。
框架要求我返回转换矩阵。我是否正确构建该矩阵作为translate-rotate-translate矩阵的乘法?否则,我忘记了什么?
function TransformMat = MakeTransformMat(theta,center_y,center_x)
%Translate image to origin
trans2orig = [1 0 -center_x;
0 1 -center_y;
0 0 1];
%Rotate image theta degrees
rotation = [cos(theta) -sin(theta) 0;
sin(theta) cos(theta) 0;
0 0 1];
%Translate back to point
trans2pos = [1 0 center_x;
0 1 center_y;
0 0 1];
TransformMat = trans2orig * rotation * trans2pos;
end
答案 0 :(得分:2)
这对我有用。这里 I 是输入图像, J 是旋转图像
[height, width] = size(I);
rot_deg = 45; % Or whatever you like (in degrees)
rot_xc = width/2; % Or whatever you like (in pixels)
rot_yc = height/2; % Or whatever you like (in pixels)
T1 = maketform('affine',[1 0 0; 0 1 0; -rot_xc -rot_yc 1]);
R1 = maketform('affine',[cosd(rot_deg) sind(rot_deg) 0; -sind(rot_deg) cosd(rot_deg) 0; 0 0 1]);
T2 = maketform('affine',[1 0 0; 0 1 0; width/2 height/2 1]);
tform = maketform('composite', T2, R1, T1);
J = imtransform(I, tform, 'XData', [1 width], 'YData', [1 height]);
干杯。
答案 1 :(得分:1)
我在其他地方回答了一个非常类似的问题:Here is the link.
在链接到的代码中,您旋转的点由meshgrid
的定义方式决定。
这有帮助吗?您是否阅读过Wikipedia page on rotation matrices?