如何应用仿射变换使其适用于包括翻译在内的所有变换?

时间:2013-07-10 12:35:26

标签: matlab image-processing affinetransform

由于某种原因,imtransform函数默认忽略转换部分。

如果我按照手册中的说法添加了XDataYData的额外空格,我将只处理简单的情况(即仅翻译)。

那么,如何在Matlab中应用全功能仿射变换?

I = imread('cameraman.png');
imshow(I);

% does not translate
xform = [1 2 0; 2 1 0; 100 0 1];
T = maketform('affine',xform);
I2 = imtransform(I,T);
figure, imshow(I2)


% translates but cuts some portion of an image
xform = [1 2 0; 2 1 0; 100 0 1];
T = maketform('affine',xform);
I2 = imtransform(I,T,'XData',[1 size(I,2)+xform(3,1)],'YData',[1 size(I,1)+xform(3,2)]);
figure, imshow(I2)

1 个答案:

答案 0 :(得分:0)

所以我发现我也应该将变换应用到图像范围。

之后,我可以决定,如果图像角不在坐标的开头,该怎么办。

I = imread('cameraman.png');
XData=[1 size(I,2)];
YData=[1 size(I,1)];
imshow(I);

xform = [1 2 0; 2 1 0; 100 0 1];

T = maketform('affine',xform);
[XData1, YData1] = tformfwd(T, XData, YData);
if XData1(1)>1
    XData1(1)=1;
end
if YData1(1)>1
    YData1(1)=1;
end
I2 = imtransform(I,T,'XData',XData1,'YData',YData1);
figure, imshow(I2)