matlab中的逆变换图像

时间:2014-11-13 20:57:41

标签: matlab matlab-figure image-scaling

我正在使用此代码翻译图像但是当我对图像应用逆时,它没有显示整个图像,它只显示转换后的图像。

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 个答案:

答案 0 :(得分:2)

我认为您的问题来自您提供imtransform的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中的XData和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,但这是您的电话。

希望有所帮助!