script8

n = 19;
load filelist
load script2
eval(['load script8_pic' int2str(n)]);
filename = char(files(n));
rgb = imread(filename);
imshow(rgb);

% clear pts
% pts = ginput();
eval(['save script8_pic' int2str(n) ' pts']);

hold on
plot(pts(1:2,1),pts(1:2,2),'c','LineWidth',2);
plot(pts(3:4,1),pts(3:4,2),'m','LineWidth',2);
plot(pts(5:6,1),pts(5:6,2),'y','LineWidth',2);
plot(pts(:,1),pts(:,2),'wx');
hold off

% calculate vanishing points
vpt(1,:) = intersect(pts(1:2,:),pts(3:4,:));
vpt(2,:) = intersect(pts(3:4,:),pts(5:6,:));
vpt(3,:) = intersect(pts(1:2,:),pts(5:6,:));
vp = sum(vpt)/3;
hold on
plot(vp(1,1),vp(1,2),'wo');
hold off
Warning: Image is too big to fit on screen; displaying at 50% 
fprintf('scale (pixels/ft) %g\n',scale)
tpts = tformfwd(tf2,pts(3:4,1),pts(3:4,2));
dist = norm(diff(tpts))/scale;
fprintf('length of magneta line (left wall/floor intersection) %g ft\n',dist);
d2 = perpdist(tpts(1:2,1),tpts(1:2,2),0,0)/scale;
fprintf('distance of camera from left wall %g ft\n',d2);
scale (pixels/ft) 253.488
length of magneta line (left wall/floor intersection) 15.4722 ft
distance of camera from left wall 2.365 ft
f = 2530;
cen = [size(rgb,2) size(rgb,1)]/2
vpc = vp - cen
theta = atan(vpc/f)*180/pi
cen =

        1024         768


vpc =

  401.3958 -510.8238


theta =

    9.0151  -11.4149

phi = 9:12;
for k=1:length(phi)
    [diva tf3 vpd] = look_down( phi(k), f, size(rgb), pts);
    angle(k) = atan(vpd(2)/f)*180/pi;
end
plot(phi,angle,'ko-');
grid
xlabel('look-down angle (degrees)');
ylabel('vertical vp deviation (degrees)');
ang = interp1(angle,phi,0);
fprintf('phi (zero vp deviation) %g\n',ang);

[diva tf3 vpd R] = look_down( ang, f, size(rgb), pts);
theta = atan(vpd/f)*180/pi
phi (zero vp deviation) 11.3491

theta =

    2.1280   -0.0000

out = imtransform(rgb,tf3,'Xdata',[-400 400],'Ydata',[-400 400]);
imshow(out);
[divb tf4 vpe] = look_left( 99, f, size(rgb), pts(3:end,:), R);
fprintf('divergence %g degrees\n',divb)
divergence 0.0751261 degrees
scl = 2;
out = imtransform(rgb,tf4,'Xdata',[ 0 12000],'Ydata',[-800 800],'XYscale',scl);
imshow(out);

[xpts ypts] = tformfwd(tf4,pts(3:end,1),pts(3:end,2));
hold on
xv = xpts/scl;
yv = ypts/scl + 800/scl;
plot(xv(1:2),yv(1:2),'m','LineWidth',2);
%hold on;
%plot([0 40000 40000 0 0],[-10000 -10000 5000 5000 -10000],'k');
plot(xv(3:4),yv(3:4),'y','LineWidth',2);
plot(xv(5:6),yv(5:6),'w',xv(7:8),yv(7:8),'w','LineWidth',2);
hold off
sclx = scale/scl;

ht1 = -perpdist(xv(1:2),yv(1:2),xv(3),yv(3))/sclx % 5 blocks, 8 inch high

ht2 = 8*5/12

fprintf('sclx %g (pixels/ft)\n',sclx);

wd1 =  norm(diff([xv(1:2) yv(1:2)]))/sclx

wd2 =  perpdist(xv(7:8),yv(7:8),xv(2),yv(2))/sclx

wd3 = 12*16/12 % 12 blocks, 16 inch wide per block

door = -perpdist(xv(7:8),yv(7:8),xv(5),yv(5))/sclx
ht1 =

    3.2592


ht2 =

    3.3333

sclx 126.744 (pixels/ft)

wd1 =

   15.4957


wd2 =

   15.9683


wd3 =

    16


door =

    6.3003