2014-11-13 5 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

Затем нанесите свой код, чтобы перевести изображение. Обратите внимание на то, что изменение в XData и YData в функции imtransform:

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

, который выглядит точно так же, как оригинал. Обратите внимание, что предпочтительно использовать affine2d в сочетании с imwarp вместо maketform и imtransform, но это ваш звонок.

Надеюсь, что это поможет!

+0

, когда я переводил изображение, часть его части гаснет. –

+0

Поскольку вы переводите изображение в размер, но мое изображение выходит из измерения и изображение в пределах размера, только показанного на рисунке –

+0

Я не уверен, что вы понимаете, что вы имеете в виду; вы можете попробовать с гораздо большим холстом? Каков размер изображения, которое вы пытаетесь перевести? –

Смежные вопросы