2014-11-13 40 views
1

我使用此代碼來翻譯圖像,但是當我在圖像上應用逆時,它沒有顯示整個圖像,它只顯示變換後的圖像。matlab中的逆變換圖像

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(img, tform, 'XData',[1 size(img,2)],'YData',[1 size(img,1)]); 
figure; 
imagesc(out); 
title ('translated image'); 
colormap gray 
ot=imtransform(out, ttform, 'XData',[0 size(out,0)],'YData',[0 size(out,0)]); 
figure; 
imagesc(ot); 
    title ('inverse translated image'); 
    colormap gray 
+1

使用'tformarray'而不是'imtform',它以更好的方式處理翻譯。 – Shai

回答

2

我認爲你的問題來自你提供的變換的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) 

看起來像這樣:

enter image description here

然後應用代碼的圖像翻譯。注意在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 

這樣做具有以下翻譯圖片:

enter image description here

和逆翻譯圖像:

enter image description here

看起來完全像原來的一樣。請注意,最好使用affine2dimwarp結合,而不是maketformimtransform,但這是您的電話。

希望有幫助!

+0

當我翻譯圖像的一部分熄滅。 –

+0

由於您正在翻譯尺寸範圍內的圖片,但我的圖片不在尺寸範圍內,圖片中的圖片僅顯示在圖 –

+0

中我不確定要理解您的意思;你可以試試更大的畫布嗎?你想要翻譯的圖像大小是多少? –