1 | %fill_mm_bundle Proj. reconstruction from MM [with bundle adjustment]. |
---|
2 | % |
---|
3 | % Call fill_mm [and bundle adjustment]. |
---|
4 | % |
---|
5 | % [ P,X, u1,u2, info ] = fill_mm_bundle(M [,opt]) |
---|
6 | % |
---|
7 | % Parameters: |
---|
8 | % M .. measurement matrix (MM) with homogeneous image points with NaNs |
---|
9 | % standing for the unknown elements in all three coordinates |
---|
10 | % imsize .. double(2,m), image sizes: imsize(:,i) is size of image i |
---|
11 | % m .. No. of cameras |
---|
12 | % opt .. options with default values in (): |
---|
13 | % .no_BA(0) .. whether refine using bundle adjustment |
---|
14 | % .verbose(1) .. whether display info |
---|
15 | % .verbose_short .. see opt in bundle_PX_proj |
---|
16 | % ... other options see in fill_mm |
---|
17 | % |
---|
18 | % Return parameters: |
---|
19 | % info.R_lin .. linear estimation of filled M |
---|
20 | % ... other parameters see in fill_mm |
---|
21 | |
---|
22 | function [ P,X, u1,u2, info ] = fill_mm_bundle(M, imsize, opt) |
---|
23 | |
---|
24 | if nargin < 3, opt = []; end |
---|
25 | if ~isfield(opt, 'no_BA') |
---|
26 | opt.no_BA = 0; end |
---|
27 | if ~isfield(opt, 'verbose'), |
---|
28 | opt.verbose = 1; end |
---|
29 | |
---|
30 | [P,X, u1,u2, info] = fill_mm(M, opt); |
---|
31 | |
---|
32 | info.R_lin = P*X; |
---|
33 | |
---|
34 | if ~opt.no_BA & length(u1) < size(M,1)/3 & length(u2) < size(M,2) |
---|
35 | if opt.verbose, fprintf(1, 'Bundle adjustment...\n'); tic; end |
---|
36 | |
---|
37 | [m,n] = size(M); m = m/3; r1 = setdiff(1:m,u1); r2 = setdiff(1:n,u2); |
---|
38 | [P,X] = bundle_PX_proj(P,X, normalize_cut(M(k2i(r1),r2)), imsize, opt); |
---|
39 | % old bundler: |
---|
40 | %[P,X] = qPXbundle_cmp(P,X, normalize_cut(M(k2i(r1),r2))); |
---|
41 | |
---|
42 | if opt.verbose, disp(['(' num2str(toc) ' sec)']); end |
---|
43 | info.err.BA = dist(M(k2i(r1),r2), P*X, info.opt.metric); |
---|
44 | if opt.verbose, fprintf('Error (after BA): %f\n', info.err.BA); |
---|
45 | else, fprintf(' %f\n', info.err.BA); end |
---|
46 | else, if ~opt.verbose, fprintf('\n'); end; end |
---|