0

任意の点を中心に画像を回転するように依頼されました。彼らが提供したフレームワークは matlab にあったため、MakeTransformMat回転角度と回転したいポイントを受け取る関数を埋める必要がありました。

この回転を行うクラスで見たように、最初にポイントを原点に移動し、次に回転し、最後に元に戻します。

フレームワークは、変換マトリックスを返すように要求します。翻訳-回転-翻訳行列の乗算としてその行列を作成するのは正しいですか? そうでなければ、私は何を忘れていますか?

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
4

2 に答える 2

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]);

乾杯。

于 2014-04-09T05:59:55.330 に答える