script4b (directed homography)
clear
close all
rgb = imread('mod_3.jpg');
imshow(rgb);
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]
T1 = R*inv(KK);
cp = mean(pts,2);
newcp = h2e(T1*e2h(cp))
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]