Inverse of a projective transformation doesn't work with imwarp

4 vues (au cours des 30 derniers jours)
Matteo Guidi
Matteo Guidi le 16 Mar 2018
Commenté : Matteo Guidi le 3 Avr 2018
I have an image, and a general projective2d transformation.
I = imread('cameraman.tif');
imshow(I)
tform = projective2d([0.96119642,-0.44830978,-0.00025835048;0.14598410,1.6215615,6.6809996e-05;1496.0447,1046.4227,1]);
J = imwarp(I,tform);
figure
imshow(J)
I want to apply the inverse of the transformation, to get back to the original image. So I do:
tInv = invert(tform);
K = imwarp (J, tInv);
imshow(K);
Why are the results not consistent? The final image is tilted. How can I fix that?
Thanks

Réponse acceptée

Ashish Uthama
Ashish Uthama le 2 Avr 2018
Modifié(e) : Ashish Uthama le 2 Avr 2018
Try this:
I = imread('cameraman.tif');
imshow(I)
tform = projective2d([0.96119642,-0.44830978,-0.00025835048;
0.14598410,1.6215615,6.6809996e-05;
1496.0447,1046.4227,1]);
[J, Jref] = imwarp(I, imref2d(size(I)),tform);
disp(Jref)
figure
imshow(J)
tInv = invert(tform);
K = imwarp (J,Jref, tInv);
imshow(K);
imref2d helps capture the full spatial location of the output image. Notice how the X/YWorldLimits are large numbers? This gets lost when you dont use spatial referencing - hence, in your post, the input you are giving the second imwarp is not strictly the mathematical output of the first imwarp call.
  1 commentaire
Matteo Guidi
Matteo Guidi le 3 Avr 2018
Perfect, that was exactly what I was looking for.
Thank you very much!

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by