Inverse of a projective transformation doesn't work with imwarp

18 ビュー (過去 30 日間)
Matteo Guidi
Matteo Guidi 2018 年 3 月 16 日
コメント済み: Matteo Guidi 2018 年 4 月 3 日
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

採用された回答

Ashish Uthama
Ashish Uthama 2018 年 4 月 2 日
編集済み: Ashish Uthama 2018 年 4 月 2 日
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 件のコメント
Matteo Guidi
Matteo Guidi 2018 年 4 月 3 日
Perfect, that was exactly what I was looking for.
Thank you very much!

サインインしてコメントする。

その他の回答 (0 件)

Community Treasure Hunt

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

Start Hunting!

Translated by