script8
n = 19;
load filelist
load script2
eval(['load script8_pic' int2str(n)]);
filename = char(files(n));
rgb = imread(filename);
imshow(rgb);
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
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);
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
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
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