script2

clear
close all
load pts1
rgb = imread(filename);
% rgb = imresize(rgb,0.25);
kp(1,:) = pts(1,:) - pts(2,:);
kp(2,:) = pts(3,:) - pts(4,:);
for k=1:2
    kp(k,:) = kp(k,:)/norm(kp(k,:));
end
s = det(kp(1:2,:));
s = asin(s)*180/pi;
str = sprintf('divergence %g deg',s);
disp(str);
imshow(rgb);
hold on
plot(pts(1:2,1),pts(1:2,2),'b','LineWidth',2);
plot(pts(3:4,1),pts(3:4,2),'b','LineWidth',2);
hold off
title(str);
divergence -75.0002 deg
KK = [6500 0 0; 0 6500 0; 2000 1000 1];
ang(1) = -81.5;
R = rotx(ang(1),'deg');
tf = projective2d(inv(KK)*R*KK);

[x, y] = transformPointsForward(tf,pts(:,1),pts(:,2));
pts2 = [x y]

kp(1,:) = pts2(1,:) - pts2(2,:);
kp(2,:) = pts2(3,:) - pts2(4,:);
for k=1:2
    kp(k,:) = kp(k,:)/norm(kp(k,:));
end
s = det(kp(1:2,:));
s = asin(s)*180/pi;
str = sprintf('angle %g deg   divergence %g deg',ang(1),s);
disp(str);
pts2 =

      -2269.5       -15055
      -290.68       -37527
       7751.3       -15380
       8567.5       -25763

angle -81.5 deg   divergence -0.537493 deg
ymax = max(pts2(:,2));
xrng = [min(pts2(:,1))-2000 max(pts2(:,1))+2000];
diff = xrng(2)-xrng(1);
yrng = [ymax-diff ymax];

myref = imref2d([800 800],xrng,yrng);
[img, ref] = imwarp(rgb,tf,'OutputView',myref,'FillValues',[255 255 200]);
imshow(img);

pts3 = pts2;
pts3(2,:) = pts2(1,:) + 0.5*(pts2(2,:)-pts2(1,:));

[yp, xp] = worldToSubscript(myref,pts3(:,1),pts3(:,2));
hold on
plot(xp(1:2),yp(1:2),'b','LineWidth',2);
plot(xp(3:4),yp(3:4),'b','LineWidth',2);
hold off

title(str);
ref
ref = 

  imref2d with properties:

           XWorldLimits: [-4269.5 10567]
           YWorldLimits: [-29892 -15055]
              ImageSize: [800 800]
    PixelExtentInWorldX: 18.546
    PixelExtentInWorldY: 18.546
    ImageExtentInWorldX: 14837
    ImageExtentInWorldY: 14837
       XIntrinsicLimits: [0.5 800.5]
       YIntrinsicLimits: [0.5 800.5]

% [img, ref] = imwarp(rgb,tf,'FillValues',[255 255 200]);
% imshow(img);
% ref