script4b (directed homography)

clear
close all
rgb = imread('mod_3.jpg');
imshow(rgb);

% pause
% pts = ginput(4);
% save script4b pts
load script4b
pts = pts';

hold on
plot(pts(1,:),pts(2,:),'bx','MarkerSize',11,'LineWidth',2);
hold off
vi = [1 0 0];
vk = [0 1 0];
vj = cross(vk,vi);
f = 879.2;

hpts = e2h(pts);

KK = [ f 0 320; 0 f 320; 0 0 1];
R = [vi; vj; vk]
%R = eye(3);

T1 = R*inv(KK);

cp = mean(pts,2);
newcp = h2e(T1*e2h(cp))


%newcp = [0 0]';

M = [300 0 0; 0 300 0; 0 0 1]*[eye(2,2) -newcp ;  0 0 1];
T = M*T1;

newpts = h2e(T*hpts)

plot([newpts(1,:) newpts(1,1)],[newpts(2,:) newpts(2,1)],'k');
axis ij
axis equal
R =

     1     0     0
     0     0    -1
     0     1     0


newcp =

    0.0028
   -3.2944


newpts =

  -99.6516   99.3268  100.4108  -99.8025
   90.4215   91.9472 -114.1173 -109.5285

t = maketform('projective',T');

t.tdata.T

[U V] = tformfwd(t,pts(1,:),pts(2,:))
ans =

    0.3412         0         0
   -0.0010    1.1241    0.0011
 -108.8833 -659.7190   -0.3640


U =

  -99.6516   99.3268  100.4108  -99.8025


V =

   90.4215   91.9472 -114.1173 -109.5285

out = imtransform(rgb,t,'XData',[-400 400],'YData',[-400 400],'XYScale',1);
imshow(out);
tf = projective2d(T');

imageSize = [800 800];
xWorldLimits = [-400 400];
yWorldLimits = [-400 400];

RA = imref2d(imageSize,xWorldLimits,yWorldLimits);

[out, RB] = imwarp(rgb,tf,'OutputView',RA);
imshow(out);
RB
RB = 

  imref2d with properties:

           XWorldLimits: [-400 400]
           YWorldLimits: [-400 400]
              ImageSize: [800 800]
    PixelExtentInWorldX: 1
    PixelExtentInWorldY: 1
    ImageExtentInWorldX: 800
    ImageExtentInWorldY: 800
       XIntrinsicLimits: [0.5000 800.5000]
       YIntrinsicLimits: [0.5000 800.5000]