source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/third_party/missing-data/comp_transmot.m @ 37

Last change on this file since 37 was 37, checked in by (none), 14 years ago

Added original make3d

File size: 3.5 KB
Line 
1function [toterr,totafferr,totstable] = comp_transmot(fo,nframes,npoints,frot,ftrans,sigma,n, real)
2% I will compare my methods to see how they work when there is translation.
3%   The parameters to this function are just like compare_motions.  I also allow
4%   a translation to be added to the motions (I don't think this makes any difference.
5%   what's important is whether translation is known or not.  Whether there actually
6%   is any translation or not, and what it's magnitude is, shouldn't matter).
7%   ftrans indicates magnitude of translation (direction will be constant).  Reasonable
8%     ftrans is probably about .5.
9%
10% I will compare two possibilities.  One, in which there is no translation
11%   (this is like the old experiments). 
12%   Two, in which translation is added in to a motion that is otherwise the same,
13%   and the new method is used to estimate the rank 4 matrix with one
14%   vector constrained to be (1 1 1  ... 1).
15%
16% In the first case, I will run SHUM with five random starting points; I will run
17% my new method with and without iterative refinement, my old method with and
18% without refinement (if this is clearly inferior, I may eliminate it)
19% and I'll take ground truth with and without iterative refinement. 
20% In the second case, I'll just run the new method.
21
22r = 3;
23num_data = 12;
24coltrips = 1000;
25
26for j = 1:n
27  if ~ isempty(real)
28    INC = motion_incidence(fo,nframes,npoints);
29    Dtj = remove_translations(real, INC);
30    [M, pts] = approx_full_matrix(Dtj,3);
31    ERR = Dtj - M;
32    Mt = real - ERR;
33  end
34  if isempty(real) [M,INC,pts] = occluded_motion(fo,nframes,npoints,frot,0); end
35  if isempty(real) ERR = randn(size(M)).*sigma; end
36  [M, INC, ERR, pts] = rem_inc_els_pts(M, INC, ERR, pts, 4);
37%  occpercent = 1 - sum(sum(INC))/size(M,1)/size(M,2);
38  INCsize = min(size(INC));
39  if INCsize < 4
40    err = repeat(-1,num_data);
41    aff_err = repeat(-1,num_data);
42    stable = repeat(-1,num_data);
43  else
44    Mt = add_translations(M,ftrans);
45    Merr = M + ERR;
46    [shum_err, shum_aff_err, shum_stab] = compshum(Merr, pts, INC, r, 5);
47    [old_err, old_res, old_stable] = rankr(Merr,INC,3,coltrips,j);
48    [old_aff_err, old_shum_err, old_shum_aff_err, old_shum_stab] ...
49       = process_sol(old_err, old_res, Merr, pts, INC, r);
50    [rankr_err, rankr_res, rankr_stable] = rankrsfm_tpose(Merr,INC,0);
51    % 0 means no translations.
52    [rankr_aff_err, rankr_shum_err, rankr_shum_aff_err, rankr_shum_stab] ...
53       = process_sol(rankr_err, rankr_res, Merr, pts, INC, r);
54    [rankr_trans_err, rankr_trans_aff_err, trans_stable] = rankrsfm_aff_err(Mt,INC,ERR,pts);
55    ground_truth_aff_err = affine_error(M,pts,r);
56    ground_truth_err = sum(sum((M.*INC - Merr.*INC).^2));
57    [gt_shum_err, gt_shum_res, gt_shum_stab] = shum(Merr,INC,r,M,100);
58    if gt_shum_err ~= -2
59      gt_shum_aff_err = affine_error(gt_shum_res, pts, r);
60    else
61      gt_shum_aff_err = -2;
62    end
63
64    err=[shum_err,old_err,old_shum_err,rankr_err,rankr_shum_err,rankr_trans_err, ...
65         ground_truth_err,gt_shum_err];
66    afferr=[shum_aff_err,old_aff_err,old_shum_aff_err,rankr_aff_err,rankr_shum_aff_err,...
67               rankr_trans_aff_err,ground_truth_aff_err,gt_shum_aff_err];
68    stable = [shum_stab, old_stable, old_shum_stab, rankr_stable, rankr_shum_stab, ...
69               trans_stable, gt_shum_stab];
70  end
71  toterr = [toterr', err']';
72  totafferr = [totafferr', afferr']';
73  totstable = [totstable', stable']';
74  if j < 11 | j == 20 | j == 30 | rem(j,100) == 0
75    toterr
76    totafferr
77    totstable
78  end
79end
Note: See TracBrowser for help on using the repository browser.