1

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

如果我像手册中所说的那样添加额外的空间XData,我将只处理简单的情况(即仅翻译)。YData

那么,如何在 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)
4

1 回答 1

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)
于 2013-07-10T13:03:52.887 回答