我認爲你的問題來自你提供的變換的XData和YData的大小。由於它們對應於原始圖像的大小,並且後者被翻譯,所以MATLAB填充0以填充空白,但是由於您指定要爲圖像指定特定維度,因此您似乎只能獲取圖像的一部分。
這裏是你展示你的翻譯工作做一個變通方法:
1)創建包含原始圖像的畫布;畫布足夠大以容納圖像,其餘的只是黑色。我使用MATLAB附帶的硬幣圖像。
img = imread('coins.png');
%// Get size of original image
[height,width,~] = size(img)
canvas = zeros(2*size(img),'like',img);
%// Put image in canvas.
canvas(height+1:end,width+1:end) = img;
figure;
imagesc(canvas)
colormap gray
title('Original image','FontSize',16)
看起來像這樣:
然後應用代碼的圖像翻譯。注意在imtransform在擴展數據和YDATA這種變化:
tran= [1 0 0; 0 1 0; -130 -100 1];
traninv= [1 0 0; 0 1 0; 130 100 1];
% apply translation
tform= maketform('affine', tran);
ttform=maketform('affine', traninv);
out=imtransform(canvas, tform, 'XData',[1 size(canvas,2)],'YData',[1 size(canvas,1)]); %// Size is important!
figure;
imagesc(out);
title ('translated image','FontSize',16);
colormap gray
ot=imtransform(out, ttform, 'XData',[1 size(canvas,2)],'YData',[1 size(canvas,1)]);
figure;
imagesc(ot);
title ('inverse translated image','FontSize',16);
colormap gray
這樣做具有以下翻譯圖片:
和逆翻譯圖像:
看起來完全像原來的一樣。請注意,最好使用affine2d
與imwarp
結合,而不是maketform
和imtransform
,但這是您的電話。
希望有幫助!
使用'tformarray'而不是'imtform',它以更好的方式處理翻譯。 – Shai