运用逆变换变换的图像不给原

问题描述 投票:3回答:1

我有一个射影变换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

image matlab image-processing computer-vision
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.