script1
clear close all load cpts % contains cpts1 and cpts2 load mpts % contains mpts1 and mpts2 load CalibResults
figure(1); rgb1 = imread(files{1}); show_points(rgb1,cpts1); title([int2str(size(cpts1,1)) ' points']); figure(2); rgb2 = imread(files{2}); show_points(rgb2,cpts2); title([int2str(size(cpts2,1)) ' points']);
Warning: Image is too big to fit on screen; displaying at 33% Warning: Image is too big to fit on screen; displaying at 33%
worldPoints = [ 0 0; 21 0; 21 21; 0 21]; [R1, T1] = extrinsics(cpts1(1:4,:),worldPoints,cameraParams) [R2, T2] = extrinsics(cpts2(1:4,:),worldPoints,cameraParams)
R1 = 0.96888 -0.12796 0.21191 0.24754 0.50279 -0.8282 -0.00057246 0.85489 0.51882 T1 = -11.718 -3.6801 62.27 R2 = 0.99939 0.0096765 0.033588 0.024548 0.48976 -0.87151 -0.024883 0.8718 0.48923 T2 = -9.8666 -5.8465 69.849
[F, inliersIndex] = estimateFundamentalMatrix(mpts1,mpts2); format shortg F format inliersIndex' % Fundamental matrix should be rank 2 fprintf('rank(F) = %d\n',rank(F));
F = -1.6172e-08 -4.1798e-07 -0.00098563 3.4252e-07 -9.3557e-08 0.0026743 0.00064487 -0.0021594 0.99999 ans = Columns 1 through 13 0 1 0 1 0 1 0 1 0 1 1 0 0 Columns 14 through 25 0 0 1 1 1 1 0 0 0 1 1 1 rank(F) = 2
% mpts2 * F * mpts1' = 0; clear dev npts = size(mpts1,1); for k = 1:npts dev(k) = [mpts2(k,1:2) 1]*F*[mpts1(k,1:2) 1]'; end ndx = 1:npts; [ndx' inliersIndex dev']
ans = 1.0000 0 -0.0250 2.0000 1.0000 -0.0015 3.0000 0 0.0041 4.0000 1.0000 0.0017 5.0000 0 0.0133 6.0000 1.0000 0.0013 7.0000 0 -0.0260 8.0000 1.0000 -0.0007 9.0000 0 0.0088 10.0000 1.0000 0.0006 11.0000 1.0000 0.0032 12.0000 0 0.0145 13.0000 0 0.0079 14.0000 0 0.0133 15.0000 0 -0.0156 16.0000 1.0000 0.0013 17.0000 1.0000 0.0013 18.0000 1.0000 0.0014 19.0000 1.0000 0.0002 20.0000 0 0.0287 21.0000 0 0.0210 22.0000 0 0.0166 23.0000 1.0000 0.0009 24.0000 1.0000 0.0014 25.0000 1.0000 0.0020
% function d = computeDistance(disType, pts1h, pts2h, f) % pfp = (pts2h' * f)'; % pfp = pfp .* pts1h; % d = sum(pfp, 1) .^ 2; % % if strcmp(disType, 'sampson') % epl1 = f * pts1h; % epl2 = f' * pts2h; % d = d ./ (epl1(1,:).^2 + epl1(2,:).^2 + epl2(1,:).^2 + epl2(2,:).^2); % end k=5; pts1h = [mpts1(k,1:2) 1]'; pts2h = [mpts2(k,1:2) 1]'; pfp = (pts2h' * F)' pfp = pfp .* pts1h d = sum(pfp,1).^2 fprintf('Quadratic distance %g\n',sqrt(d)); disType = 'sampson'; if strcmp(disType, 'sampson') epl1 = F * pts1h; epl2 = F' * pts2h; d = d ./ (epl1(1,:).^2 + epl1(2,:).^2 + epl2(1,:).^2 + epl2(2,:).^2); fprintf('Sampson distance %g\n',d) end fprintf('Our Deviation %g\n',dev(k))
pfp = 0.0009 -0.0036 0.0419 pfp = 2.7505 -2.7791 0.0419 d = 1.7573e-04 Quadratic distance 0.0132562 Sampson distance 6.10084 Our Deviation 0.0132562
camera pose does not match results from extrinsics
[orientation,location] = cameraPose(F,cameraParams,mpts1,mpts2) guess = R1*R2' dt = T1-T2; dt = dt/norm(dt)
orientation = 0.9775 -0.1454 0.1530 0.1367 0.9884 0.0656 -0.1607 -0.0432 0.9861 location = 0.8245 0.2578 -0.5037 guess = 0.9742 -0.2236 -0.0320 0.2244 0.9741 0.0270 0.0251 -0.0335 0.9991 dt = -0.2287 0.2676 -0.9360