Welcome to mirror list, hosted at ThFree Co, Russian Federation.

ChangeLog « libmv « extern - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: a4f25f83a1cb38f398dd3b18a83b4ec9a00f7f90 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
commit 473996468a4e67e7c860169181a4ff31ce9b8c80
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Fri Mar 1 17:44:54 2013 +0600

    Fixed incorrect order of arguments passing
    to EXPECT_EQ in keyframe selection tests.

commit d38ebb74693fdf5b8f0fecf62a3d8c9c53b0b84a
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Fri Mar 1 17:40:38 2013 +0600

    Modal (aka tripod) solver rework
    
    Several major things are done in this commit:
    
    - First of all, logic of modal solver was changed.
      We do not rely on only minimizer to take care of
      guessing rotation for frame, but we're using
      analytical rotation computation for point clouds
      to obtain initial rotation.
    
      Then this rotation is being refined using Ceres
      minimizer and now instead of minimizing average
      distance between points of point of two clouds,
      minimization of reprojection error of point
      cloud onto frame happens.
    
      This gives quite a bit of precision improvement.
    
    - Second bigger improvement here is using bundle
      adjustment for a result of first step when we're
      only estimating rotation between neighbor images
      and reprojecting markers.
    
      This averages error across the image sequence
      avoiding error accumulation. Also, this will
      tweak bundles themselves a bit for better match.
    
    - And last bigger improvement here is support of
      camera intrinsics refirenment.
    
    This allowed to significantly improve solution
    for real-life footage and results after such
    refining are much more usable than it were before.
    
    Thanks to Keir for the help and code review!

commit 5d6c2e7a27bdd1a1b23bf289d70a9b8f62514c9a
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Fri Mar 1 17:37:35 2013 +0600

    Increase verbosity level for reprojected markers info
    
    This information is useful, but in cases when you, say,
    working on a bundler it's annoying to scroll all the
    information up.

commit ac252bb1250b3028b9c94736b644e7ab4e7b14b8
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Fri Mar 1 17:36:19 2013 +0600

    Move radial distortion code to own templated function
    
    This shall not lead to any functional changes, just
    avoids radial distortion code duplicated in camera
    intrinsics and bundling code.
    
    For fancier bundle adjustment support of  different
    distortion models this is not actually enough and
    would need to make some bigger changes, but this
    changes makes code a bit easier to maintain already.

commit c253b794612dd529e1d3a9bd7a7c41c32c9a9abb
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Fri Mar 1 17:33:27 2013 +0600

    Use threaded cost function, jacobian and linear solver
    computation, so bundling is as fast as it could be with
    current parameter block structure.

commit 931fe37a10212b91b525d4f6eb753990a338b471
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Fri Mar 1 17:29:21 2013 +0600

    Fixed comment for euclidean bundling,
    which is now supports raidal bundling independently
    from other intrinsics.

commit 217d8e6edc3de1a853fb84275d2d2dd898e7529c
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Tue Feb 26 18:19:01 2013 +0600

    Allow K1,K2 refirement combination
    
    It is now possible to refine only radial distortion
    with new Ceres based bundler and this new combination
    is already used in Blender.

commit d8850addc944d400f7a9c358396c437d9e4acc70
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Tue Feb 26 18:17:09 2013 +0600

    Switch euclidean intersection code to use Ceres
    
    Would not expect any significant changes in solver
    behavior, but it could be more accurate in some cases.
    
    Switching projective intersection to ceres is marked
    as a TODO for now.

commit 6990b7946ec96b3cb2dcfc8a1beaaba9538b0802
Author: Keir Mierle <mierle@gmail.com>
Date:   Mon Feb 25 20:00:48 2013 +0000

    Switch motion tracker bundle adjustment to Ceres.
    
    Patch originally written by me, then finished by Sergey. Big
    thanks to Sergey for troopering through and fixing the many issues
    with my original (not compilable) patch.
    
    The Ceres implementation uses 2 parameter blocks for each camera
    (1 for rotation and 1 for translation), 1 parameter block for
    common intrinsics (focal length etc) and 1 parameter block for
    each track (e.g. bundle or 3D point).
    
    We turn on some fancy optimizer options to get better performance,
    in particular:
    
      options.preconditioner_type = ceres::SCHUR_JACOBI;
      options.linear_solver_type = ceres::ITERATIVE_SCHUR;
      options.use_inner_iterations = true;
      options.use_nonmonotonic_steps = true;
      options.max_num_iterations = 100;
    
    Special thanks to Sameer Agarwal of Ceres fame for splitting out
    the SCHUR_JACOBI preconditioner so that it didn't depend on
    CHOLMOD.  Previously we could not use that preconditioner in
    Blender because CHOLMOD is too large of a dependency for Blender.
    
    BundleIntrinsicsLogMessage:
    - Moved bunch of if(foo) LG << "bar" into this function, to make
      EuclideanBundleCommonIntrinsics a little bit easier to follow.
    
    EuclideanBundle:
    - Fix RMSE logging.

commit 1696342954614b54133780d74d6ee0fbcbe224f0
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Tue Feb 26 18:10:33 2013 +0600

    Upgrade ceres to latest upstream version
    
    This is needed because of some features of new Ceres
    for further development.

commit 575336f794841ada90aacd783285014081b8318c
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Mon Jan 7 15:58:40 2013 +0600

    Fixed for keyframe selection
    
    - Calculate residuals for GRIC in pixel space rather than
      in normalized space.
    
      This seems to be how it's intended to be used.
    
      Algebraic H and F will still use normalized coordinates which
      are more stable, after this matrices are converted to pixel
      space and Ceres refinement happens in pixel space.
    
    - Standard deviation calculation was wrong in GRIC. It shouldn't
      be deviation of residuals, but as per Torr it should be deviation
      of measurement error, which is constant (in our case 0.1)
    
      Not sure if using squared cost function is correct for GRIC,
      but cost function is indeed squared and in most papers cost
      function is used for GRIC. After some further tests we could
      switch GRIC residuals to non-squared distance.
    
    - Bring back rho part of GRIC, in unit tests it doesn't make
      sense whether it's enabled or not, lets see how it'll behave
      in real-life footage.
    
    - Added one more unit test based on elevator scene and manual
      keyframe selection.

commit 24117f3c3fc5531beb6497d79bb6f1780a998081
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Sun Jan 6 19:07:06 2013 +0600

    Added test for keyframe selection based on manual selection
    
    Additional changes:
    
    - Reduce minimal correspondence to match real-world manually
      tracked footage
    
    - Returned back squares to SymmetricEpipolarDistance and
      SymmetricGeometricDistance -- this is actually a cost
      functions, not distances and they shall be squared.

commit 770eb0293b881c4c419c587a6cdb062c47ab6e44
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Fri Dec 21 00:43:30 2012 +0600

    Improvements for keyframe selection
    
    - Changed main keyframe selection cycle, so in cases there're no
      more next keyframes for current keyframe could be found in the
      image sequence, current keyframe would be moved forward and
      search continues.
    
      This helps in cases when there's poor motion in the beginning
      of the sequence, then markers becomes occluded. There could be
      good keyframes in the middle of the shot still.
    
    - Extended keyframe_selection_test with real world cases.
    
    - Moved correspondences constraint to the top, so no H/F estimation
      happens if there's bad correspondence. Makes algorithm go a bit
      faster.
    
    Strangely, but using non-squared distances makes neighbor frames
    test fail, using squared distances makes this tests pass.
    
    However, using non-squared distances seems to be working better
    in real tests i've been doing. So this requires more investigation/

commit 7415c62fbda36c5bd1c291bc94d535a66da896d0
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Thu Dec 20 18:46:09 2012 +0600

    Cosmetic change to correspondences reports in keyframe selection

commit ceaf80c987ec0338e7e83965bc808411453eb755
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Thu Dec 20 18:08:03 2012 +0600

    Various fixes:
    
    - That was a typo in symmetric geometric cost functor, which
      computed inverse distance in a wrong way.
    
    - Fixed compilation of unit tests
    
    - Added simple test for keyframe selection. Currently only
      covers case that neighbor frames with only translation
      (homography should be better than fundamental) are not
      considered a keyframes.
    
      Still need to be investigated why it only works if tracks
      are in pixel space and why doesn't work in normalized space.

commit cfabdfe48df2add3d1f30cf4370efd0b31990ab0
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Thu Dec 20 05:46:53 2012 +0600

    Assorted fixes for keyframe selection:
    
    - Biggest error was in cost functors used for F and H refirement,
      they were just wrong.
    
    - Use natural logarithms, since it's actually makes sense from
      math papers point of view and error is somewhere else.
    
    - Disabled rho for GRIC, for now use non-clamped error for tests.
    
    - Made SymmetricEpipolarDistance returning non-squared distance
      Keyframe selection is currently the only used of this function
      and it seems using non-squared distance makes much more sense.
    
      Also would think to append suffix "Squared" to functions which
      returns squared distances.
    
    - Removed templated version of SymmetricEpipolarDistance, since
      it's not needed actually.
    
    This is actually even worse working than previous implementation,
    but commit it needed for further review.

commit 35d8c57626ad74818f155e6e5960c663ea84e032
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Thu Dec 20 03:00:40 2012 +0600

    Euclidean resection cost function didn't use correct constructor
    
    It was storing a reference to initial rotation passed by value,
    leading to pointer being pointing to a stack variable, leading to
    wrong memory access in residuals computing.
    
    Apparently was visible in optimized builds only with inline
    substitution allowed.

commit 0798d3162bb49cee7e1c423ceccbca1326ad5650
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Thu Dec 20 02:50:52 2012 +0600

    Automatic keyframe selection based on Pollefeys's criteria
    
    This commit implements automatic keyframe selection algorithm
    based on Pollefeys's criteria (F-GRIC is smaller than H-GRIC
    and correspondence ratio is more then 90%).
    
    It is implemented as a part of simple pipeline and returns
    vector of keyframe images for a given Tracks structure.
    
    For simple pipeline reconstruction two best keyframes are
    expected to be selected from all detected candidates.
    Criteria for this selection could be reprojection error of
    solution from two candidate keyfames.
    
    Unfortunately, it's not fully workable yet, hopefully would
    be fixed soon.

commit e943985552f0598ae122252876f305d72c25c2f9
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Thu Dec 6 17:47:11 2012 +0600

    Camera Tracking: allow fallback to reprojection resection
    by user demand
    
    This fixes some "regressions" introduced in previous commit
    which lead to much worse solution in some cases. Now it's
    possible to bring old behavior back.
    
    Perhaps it's more like temporal solution for time being smarter
    solution is found. But finding such a solution isn't so fast,
    so let's bring manual control over reprojection usage.
    
    But anyway, imo it's now nice to have a structure which could
    be used to pass different settings to the solver.

commit 5a23d01dd531d1e0798298d17ba42a3397effb82
Author: Keir Mierle <mierle@gmail.com>
Date:   Thu Sep 20 18:55:44 2012 +0000

    Make Euclidean resection "always" succeed.
    
    The Euclidean resection code had a magical constant, 1e-3, used to
    compare the results of solving an equation. This failure detection
    was well-intended, trying to prevent poor solutions from getting
    made without notifying the caller. Unfortunately in practice, this
    threshold is too conservative. Furthermore, it is not clear the
    threshold should exist at all; the purpose of the Euclidean
    resection is to come up with the best solution it can; other
    methods (e.g. reprojection error) should be used to compare
    whether the method succeeded.
    
    This commit changes the Euclidean EPnP code to always succeed,
    causing the previous fallback to projective resection to never
    run. In most cases, this will result in better reconstructions.
    
    This should, in most cases, fix the dreaded "flipping" problem.

commit 57dad861d2a7f9d058c6d8edde1a2d51d7225a51
Author: Keir Mierle <mierle@gmail.com>
Date:   Thu Sep 20 02:27:34 2012 +0000

    Fix variable naming in the planar tracker.

commit e9392fd3b46f5668662935696e7d9afac3390ca4
Author: Keir Mierle <mierle@gmail.com>
Date:   Thu Sep 20 02:10:33 2012 +0000

    Add smarter tolerance checking in the planar tracker.
    
    The planar tracker uses Ceres for the refinement stage. During
    refinement, Ceres iteratively updates the parameters with the
    latest best guess. If the change in the parameters falls below a
    threshold, Ceres will abort successfully ("converged").
    
    For the case of pure translation tracking, the parameters are
    exactly the two pixel shifts (dx, dy), and measuring the change in
    these parameters gives a meaningful termination criterion.
    However, for all the other parameterizations like affine, where
    the parameterization involves affine parameters that have no
    physical interpretation, Ceres is left with no way to terminate
    the solver early. With the existing code, often many iterations
    are run long after Ceres has found a solution sufficiently
    accurate for all tracking needs. No one needs tracking with
    a quadrillionth of a pixel accuracy; that time is wasted.
    
    This patch extends the existing iteration callback that is passed
    in to Ceres to check if the pattern has fallen out of the search
    window, to also check if the optimizer has made a tiny step. In
    particular, if the maximum shift of any patch corner between two
    successful optimizer steps is less than a threshold (currently
    0.005 pixels), the track is declared successful and tracking
    is terminated.
    
    This leads to dramatic speed increases in some cases, with little
    to no loss in track quality. This is especially apparent when
    tracking patches with affine or perspective motion models. For
    example, on some tracking cases I tried, the iterations Ceres took
    went from 50 to 3.

commit 36729c19bf90cb767e9adb96ba7dd48a5ace2be1
Author: Keir Mierle <mierle@gmail.com>
Date:   Wed Sep 19 22:25:02 2012 +0000

    Detect too-small planar tracking patches.
    
    The planar tracker did not detect very skinny patches which have
    effectively zero area and are untrackable. This adds detection and
    rejection of patterns with zero area. This fixes a crash found by
    during Mango production.

commit 5cf2bae255a5a0f2e36ea0516670782cb88b589d
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Thu Dec 6 17:33:53 2012 +0600

    Real fix for previous commit from Keir. He's comment;
    
    Cleanup for when trackers fall out of the search window.
    
    Sergey originally left a TODO() here, but his fix is the correct
    one. I removed the TODO and fixed some comment issues.

commit a11533918720e5b43dc1e95895db0eb36c8c06aa
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Thu Dec 6 17:31:16 2012 +0600

    Fix crash when tracking in planar motion model (and maybe some other)
    
    It was an Abort() caused by check for solver result not equal to USER_ABORT.
    
    In some cases solver returns USER_ABORT due to BoundaryCheckingCallback
    detects coordinates does not belong to image.
    
    Somehow this callback wasn't called in previous version of Ceres and
    in the same case marker was jumping. Now when the callback is called
    it seems we could simply return failure of tracking without aborting
    Blender.
    
    Probably this is in fact some issue somewhere else, would double
    check with Keir about this.

commit 4be2306bcc664b259aaf7068b9f32ab60124a509
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Thu Dec 6 17:29:39 2012 +0600

    Resolved some compilation warnings (missed prototypes)
    
    In some cases it was missed include of header file, in some other
    cases symbol could be static.

commit bef729ba5c12683d13584d2a728b8b6506b7ca90
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Thu Dec 6 17:27:17 2012 +0600

    Code cleanup: silence some -Wnarrowing warnings from C++11

commit add1415d896818367087c784a3013dd8f1bb2095
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Thu Dec 6 17:25:18 2012 +0600

    Changes to SamplePlanarPatch to support mask input and
    added output for pattern center.

commit daa354c0735b954b0cd7725626e9a3d67416d46b
Author: Keir Mierle <mierle@gmail.com>
Date:   Sat Jun 9 19:22:39 2012 +0000

    Change libmv's bilinear sampling to assume the same
    pixel conventions as Blender. This fixes the preview
    widget in Blender, and should make tracking slightly
    more accurate.

commit 99b6222873fbfbe248316316956720376a58f438
Author: Keir Mierle <mierle@gmail.com>
Date:   Sat Jun 9 18:58:51 2012 +0000

    Add new warp regularization scheme for planar tracking.
    
    This adds a new term to the tracking cost function that
    restricts how much the optimizer can warp the patch (as
    opposed to merely adjusting the translation). This should
    reduce the "jumpiness" that is sometimes seen when doing
    non-"Loc" tracks.
    
    It is disabled in this commit; a subsequent commit will add
    controls to the tracking dialog for this.

commit a1c5a70badd11cba0470700bad2eac2b2bd30c86
Author: Keir Mierle <mierle@gmail.com>
Date:   Sat Jun 9 06:55:21 2012 +0000

    Planar tracker polish.
    
    - Fixes the correlation checking code that was broken in the
      previous commit. The bug was a transpose error.
    - Fixes a memory leak of the warp functor, found by Sameer.
    - Various cleanups done at Sameer's suggestion.
    
    Thanks to Sameer Agarwal for a code review.

commit 2cb784caa854a77cdd43620ab133f26b87ed0d83
Author: Keir Mierle <mierle@gmail.com>
Date:   Fri Jun 8 17:42:17 2012 +0000

    Make planar tracking much faster.
    
    - This makes planar tracking around 2-3x or more faster than
      before, by rearranging how the sampling is done.
      Previously, the source patch was sampled repeatedly on
      every optimizer iteration; this was done for
      implementation speed, but was wasteful in computation.
    
    - This also contains some additions to Ceres to help
      deailing with mixed numeric / automatic differentation. In
      particular, there is now a "Chain::Rule" operator that
      facilitates calling a function that takes Jet arguments,
      yet does numeric derivatives internally. This is used to
      mix the numeric differentation of the images with the warp
      parameters, passed as jets by Ceres to the warp functor.
    
      There is also a new "JetOps" object for doing operations
      on types which may or may not be jets, such as scaling
      the derivative part only, or extracting the scalar part
      of a jet.
    
      This patche is aimed at Ceres upstream.
    
    - A new function for sampling a patch is now part of the
      track_region.h API; this will get used to make the preview
      widget properly show what is getting tracked. Currently
      the preview widget does not handle perspective tracks.
    
    Known issues:
    
      This patch introduces a bug such that the "Minimum
      Correlation" flag does not work; if it is enabled, tracking
      aborts immediately. The workaround for now is to disable the
      correlation checking, and examine your tracks carefully. A
      fix will get added shortly.

commit 81d028f13738ebe2304287dfce90e91bc782e2cf
Author: Keir Mierle <mierle@gmail.com>
Date:   Fri May 18 20:04:43 2012 +0000

    Remove an unnecessary template<> line in libmv. Convert debug logs to LG.

commit 238aaba241ef99995d254aadc974db719da04b96
Author: Keir Mierle <mierle@gmail.com>
Date:   Fri May 18 12:05:10 2012 +0000

    Support normalization in the tracking prepass
    
    The last tracker commit added normalized tracking. This makes
    tracking patches undergoing uniform illumination change easier.
    However, the prepass which computes a quick translation-only
    estimate of the warp did not take this into account. This commit
    fixes that.
    
    This works reasonably well but in some examples the brute
    initialization fails. I suspect this is due to the warped template
    estimate in the current  frame being too different from the
    original, so there are multiple peaks in the normalized-SAD
    correlation function.
    
    The solution is to use the previous frame for the brute
    initialization and the keyframe for refinement, but that requires
    architecture changes.

commit 981ca4f6a679cd9ac3d086eae3cd946ce72ca8a5
Author: Keir Mierle <mierle@gmail.com>
Date:   Fri May 18 02:12:47 2012 +0000

    Add light-normalized tracking to the planar tracker
    
    This commit adds the ability to normalize patterns by their
    average value while tracking, to make them invariant to global
    illumination changes.
    
    To see this in action, check out the "Lobby" scene from Hollywood
    VFX. If you track the markers that are shadowed by the actress,
    previously they would not track. With the scale adaption on, the
    tracker would shrink the area to compensate for the changed
    illumination, losing the track. With "Normalize" turned on, the
    patch is correctly tracked and scale is maintained.
    
    A remaining problem is that only the Ceres cost function is
    updated to handle the normalization. The brute translation search
    does not take this into account. Perhaps "Prepass" (see below)
    should get disabled if normalization is enabled until I fix the
    prepass to normalize as well.
    
    There are a few other changes:
    
    - Bail out of the sampling loop early if the mask is zero; this
      saves expensive samples of the image derivatives.
    
    - Fix a bug where the mask was ignored when sampling in the cost
      functor.

commit e9384b15fb2a6a5b81346d5758fa136f0911e945
Author: Keir Mierle <mierle@gmail.com>
Date:   Thu May 17 23:53:32 2012 +0000

    Implement support for affine tracking in the planar tracker; cleanups.

commit 021d41eed8b4ce6a4e37786ccd357ed5dc83a13f
Author: Keir Mierle <mierle@gmail.com>
Date:   Thu May 17 21:26:06 2012 +0000

    For the planar tracker, initialize the warp from the four correspondences
    after brute force translation search.

commit 003d1bf6145cfd30938b35f6e10d43708dbf916c
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Thu Dec 6 16:56:01 2012 +0600

    Correction to region tracker options initialization.
    
    Based on patch from Keir to Blender:
    https://svn.blender.org/svnroot/bf-blender/branches/soc-2011-tomato@46743

commit 6af47b218cfdf5219f0ebb3cb95459817cf9abf2
Author: Keir Mierle <mierle@gmail.com>
Date:   Thu May 17 02:31:52 2012 +0000

    Add new planar tracker features and use the new planar API
    
    This commit removes the use of the legacy RegionTracker API from
    Blender, and replaces it with the new TrackRegion API. This also
    adds several features to the planar tracker in libmv:
    
    - Do a brute-force initialization of tracking similar to "Hybrid"
      mode in the stable release, but using all floats. This is slower
      but more accurate. It is still necessary to evaluate if the
      performance loss is worth it. In particular, this change is
      necessary to support high bit depth imagery.
    
    - Add support for masks over the search window. This is a step
      towards supporting user-defined tracker masks. The tracker masks
      will make it easy for users to make a mask for e.g. a ball.
    
    - Add Pearson product moment correlation coefficient checking (aka
      "Correlation" in the UI. This causes tracking failure if the
      tracked patch is not linearly related to the template.
    
    - Add support for warping a few points in addition to the supplied
      points. This is useful because the tracking code deliberately
      does not expose the underlying warp representation. Instead,
      warps are specified in an aparametric way via the correspondences.
    
    - Remove the "num_samples_xy" concept and replace it with
      automatic determination of the number of samples. This makes the
      API easier for users.
    
    - Fix various bugs in the parameterizations.
    
    There remains a bug with subpixel precision tracking when in
    "keyframe" mode; this will get fixed shortly.

commit 16a46db104468cec80bd31ca9d5f8bffbe3e003e
Author: Keir Mierle <mierle@gmail.com>
Date:   Mon May 14 12:15:38 2012 +0000

    "Efficient Second-order Minimization" for the planar tracker
    
    This implements the "Efficient Second-order Minimization"
    scheme, as supported by the existing translation tracker.
    This increases the amount of per-iteration work, but
    decreases the number of iterations required to converge and
    also increases the size of the basin of attraction for the
    optimization.

commit 23243b1b1f3e1ab3ef862b47bca06ee876ac2cf4
Author: Keir Mierle <mierle@gmail.com>
Date:   Sun May 13 23:08:56 2012 +0000

    Add a planar tracking implementation to libmv
    
    This adds a new planar tracking implementation to libmv. The
    tracker is based on Ceres[1], the new nonlinear minimizer that
    myself and Sameer released from Google as open source. Since
    the motion model is more involved, the interface is
    different than the RegionTracker interface used previously
    in Blender.
    
    The ESM tracker, also known as the KLT tracker in the UI, is
    temporarily changed to use the new Ceres-based planar
    tracker in translation-only mode. Currently it is a bit
    slower than ESM and also doesn't have all the bells and
    whistles implemented. Those will come soon. Longer term,
    both trackers will remain since Ceres is unlikely to be as
    fast as ESM for pure translation solving, due to its
    generality.
    
    The next step is to implement a new tracking UI. The current
    UI assumes a translational motion model; the new one must
    support arbitrary perspective transforms of the pattern
    regions.
    
    [1] http://code.google.com/p/ceres-solver

commit 52be92b53eb4decb1a316690b162196f227cc441
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Thu Dec 6 16:06:08 2012 +0600

    Initial Ceres integration
    
    Currently only put sources to src/third_party/ceres and made sure they're
    not giving compilation issues.
    
    Used Ceres upstream version 1.3.0.
    
    Needed to make some modifications to it's CMakeLists.txt also to glog and
    fglags. They're described in README.libmv of this libraries.
    
    Basically:
    
    - Added -fPIC to glog/gflags, so shared ceres library could be linked
      statically against this libraries.
    
    - Tweaked Ceres's build rules to use needed libraries from libmv's
      third_party folder.

commit b13f9d13122e091cb85855c2094386ccdef6e5a4
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Wed Dec 5 19:05:34 2012 +0600

    Update Eigen to version 3.1.2
    
    Mainly because of lots of warnings generating by gcc-4.7 which are
    resolved in newer eigen version.

commit 1f0dd94e8e37d3fe2df89282ec16a6a685fdde0b
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Fri May 25 16:36:44 2012 +0600

    - Added avutil to qt-tracker linking when building with FFmpeg support.
      On some platforms it seems to be required
    - Synchronized QT Creator project for qt-tracker with changes in sources,
      so no it might be compiled from QT Creator.

commit b813dbe3f46bbbc7e73ac791d4665622e4fc7ba5
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Wed May 9 19:01:10 2012 +0600

    Modal solver: Detect rigid transformation between initial frame and current
    instead of detecting it between two neighbour frames.
    
    This prevents accumulation of error and seems to be working better in footages i've tested.

commit 9254621c76daaf239ec1f535e197ca792eea97b6
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Wed May 9 18:57:00 2012 +0600

    Backport changes made by Keir in Blender:
    
    - Enhance logging in libmv's trackers.
    - Cleanups in brute_region_tracker.cc.

commit d9c56b9d3c63f886d83129ca0ebed1e76d9c93d7
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Fri Apr 27 16:20:41 2012 +0600

    Fixes for MinGW64 support by Caleb Joseph with slight modifications by Antony Riakiotakis
    
    - Functions snprintf and sincos shouldn't be redefined for MinGW64
    - Type  pid_t shouldn't be re-defined for MinGW64

commit e1902b6938676011607ac99986b8b140bdbf090e
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Fri Apr 27 16:04:19 2012 +0600

    Fixes for Qt calibration tool
    
    - Passing directory with images via command line argument now isn't
      required -- it there's no such directory specified  standard open
      dialog might be used for this (before application used to abort
      due to accessing to non-existing list element).
    - Conversion of source images to grayscale now happens correct.
      It was needed to build grayscale palette for 8bit indexed buffer.

commit 05f1a0a78ad8ff6646d1e8da97e6f7575b891536
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Sat Apr 14 17:21:29 2012 +0600

    Make QtTracker compilable again porting it to recent API change and code cleanup:
    
    - It was using SAD tracker with own API, now it's using standard RegionTracker API
      which should make it easier to switch between different trackers.
    - Restored LaplaceFilter from old SAD module which convolves images with the
      discrete laplacian operator.

commit a44312a7beb2963b8e3bf8015c516d2eff40cc3d
Author: Sergey Sharybin <sergey.vfx@gmail.com>
Date:   Thu Apr 12 13:56:02 2012 +0600

    Added solver for modal camera motion, currently supports only tripod solving
    
    This solver is intended to deal with such camera motions as tripod and panning,
    where it's impossible to reconstruct exact position of markers in 3d view.
    
    It projects markers onto sphere and uses rigid registration of rotation to
    find rotation angles which makes bundles from previous and current frame be
    as closest as it's possible.