cube4

Recover oblique view
close all
clear
load view2;
% projected view
rgb1 = imread('view2.jpg');
imshow(rgb1);
% ortho image
rgb = imread('vis1.jpg');
imshow(rgb);
sz = size(rgb);
% calculate transform
idx = [1 2 5 4];
scale=sz(1)-1;
tpts = cp(idx,[1 3])*scale;
tpts(:,2) = scale - tpts(:,2);
cpts = pts(idx,:);
T = cp2tform(cpts,tpts,'projective');
disp(T)
disp('T.tdata');
disp(T.tdata);
disp('forward');
disp(T.tdata.T);
disp('inverse');
disp(T.tdata.Tinv);
       ndims_in: 2
      ndims_out: 2
    forward_fcn: @fwd_projective
    inverse_fcn: @inv_projective
          tdata: [1x1 struct]

T.tdata
       T: [3x3 double]
    Tinv: [3x3 double]

forward
    0.5759    0.1308   -0.0004
   -0.0219    0.5607   -0.0003
 -153.5629 -174.0151    1.2031

inverse
    1.8951   -0.2464    0.0006
    0.2358    1.9182    0.0006
  276.0000  246.0000    1.0000

% show entire transformed image
close
im = imtransform(rgb1,T);
imshow(im);
% show just the piece we are interested in
close
rng = [0 scale];
im = imtransform(rgb1,T,'XData',rng,'YData',rng);
%[im  xdata ydata] = imtransform(rgb1,T);
imshow(im);
% look at differences
g1 = im2double(rgb2gray(rgb));
g2 = im2double(rgb2gray(im));
diff = g2-g1;
gmax = max(max(diff));
gmin = min(min(diff));
fprintf('max differences %g %g\n',gmax,gmin);
imshow((diff/max(gmax,-gmin)+1)/2);
max differences 0.611765 -0.360784