将逆变换应用于变换后的图像不会得到原始

时间:2019-02-07 16:43:25

标签: image matlab image-processing computer-vision

我有一个投影变换t

t = [0.646     0.110    9.339e-05;
     0.0113    0.551    -1.004e-05;
     307.649   1131.141         1]

当我将此转换应用于图像,然后将此转换的逆应用于生成的图像时,我期望回到第一张图像。但是我不是!

tProj = projective2d(t);
img1 = imwarp(original,tProj);
figure(1); imshow(img1);

tProj2 = projective2d(inv(t));
img2 = imwarp(img1,tProj2);
figure(2); imshow(img2);

原始图片

Original Image

原始图像的转换

Original Image

原始图像变换的逆变换

Original Image

1 个答案:

答案 0 :(得分:2)

您非常亲密。您还必须引用空间位置对象(通过imref2d对象)以帮助捕获输出图像的完整空间位置。反转图像时,可以将其指定为imwarp的附加输入。最重要的是,您还必须从第一个imref2d调用中捕获输出imwarp对象。一旦拥有了这些对象,就可以使用它来反变形以恢复原始图像。请注意,由于扭曲的图像超出了原始图像的尺寸,因此您将进行零填充。

换句话说:

t = [0.646     0.110    9.339e-05;
0.0113    0.551    -1.004e-05;
307.649   1131.141         1];

original = imread('https://i.stack.imgur.com/lZzdT.jpg');

tProj = projective2d(t);
[img1, ra] = imwarp(original, tProj); % New
figure(1); imshow(img1);

tProj2 = projective2d(inv(t));
img2 = imwarp(img1,ra,tProj2); % New
figure(2); imshow(img2);

这是我将扭曲的图像反转后得到的输出图像:

enter image description here