Fix for BA possible move bundles behind the camera
[blender.git] / extern / libmv / ChangeLog
1 commit 03cbc88ce7f51aa26ba503acea2e984bcb78873c
2 Author: Sergey Sharybin <sergey.vfx@gmail.com>
3 Date:   Mon Apr 15 05:35:33 2013 +0600
4
5     Fix for bundle adjusting with motion restricted
6     
7     Was a bug introduced in previous commit, which
8     was trying to set parameterization for non-existing
9     camera->t parameter block.
10     
11     Replaced with subset parameterization.
12     
13     Also added basic synthetic unit test for modal solver.
14
15 commit c78a68f980e778d40ce836fa1d7471cb7264d4a0
16 Author: Sergey Sharybin <sergey.vfx@gmail.com>
17 Date:   Mon Apr 8 23:33:20 2013 +0600
18
19      Bundle adjustment improvements
20     
21     - Get rid of rotation matrix parameterization,
22       use angle-axis instead.
23     
24       Also Joined rotation and translation into
25       a single parameter block.
26     
27       This made minimization go significantly faster,
28       like 1.3x times in average.
29     
30     - Fix first camera when bundling. This is to
31       address orientation ambiguity.
32     
33       Reconstruction result could still vary in
34       size, but that's another issue to be addressed
35       later.
36     
37     Additional change:
38     
39     Split EuclideanBundleCommonIntrinsics into
40     smaller functions, so it's now a bit easier
41     to follow.
42
43 commit 28c7566629c2cf5b03a787c9509856e87472eb2f
44 Author: Sergey Sharybin <sergey.vfx@gmail.com>
45 Date:   Mon Apr 8 23:31:57 2013 +0600
46
47     Update Ceres to current HEAD
48     
49     Brings up some noticeable speed improvements. In particular
50     the automatic differentiation and bundle adjustment solvers.
51
52 commit efde9faa21e70b031d3cbcb2dcdcd38e597bf56e
53 Author: Sergey Sharybin <sergey.vfx@gmail.com>
54 Date:   Mon Apr 8 02:21:26 2013 +0600
55
56     Corrected path to gflags
57     
58     Currently tools/track.cc is not used, but let's
59     keep things a bit more up-to-date :)
60
61 commit f8b5ea196fb00ab07d577e9738a60cdd1de16509
62 Author: Sergey Sharybin <sergey.vfx@gmail.com>
63 Date:   Mon Apr 8 02:17:16 2013 +0600
64
65     Re-enable tests for multiview and image
66     
67     For as long code is in repo and used by some tools
68     better to have it covered by tests.
69     
70     Some of them are failing tho, but that's completely
71     different story to be addressed later.
72
73 commit d2a7ee60a5845738f76b88bfc373eefc2cc8501a
74 Author: Sergey Sharybin <sergey.vfx@gmail.com>
75 Date:   Mon Apr 8 02:10:07 2013 +0600
76
77     Do not modify cache's CMAKE_CXX_FLAGS_RELEASE when configuring Ceres
78     
79     Otherwise you'll have infinite appending of Ceres-specific flags
80     on every saving of any CmakeLists.txt.
81
82 commit 45edb507bf46194dd55b7fc46a7d90ee3853834d
83 Author: Sergey Sharybin <sergey.vfx@gmail.com>
84 Date:   Sun Apr 7 21:53:23 2013 +0600
85
86     Fixed compilation with BUILD_TOOLS enabled
87     
88     This commit mainly reverts parts of following commits:
89         0eebc21db831211738acc938566bbc29d68d45db
90         d8109b7a4fede1660e0dbd73735f1a9e3fd79eec
91         e59595806c045916ab4ef15ef7047c1a728b2da9
92         2d6cd58ee1cd7c5073980f358c71b2898ad16b4c
93     
94     They declared  lots of stuff deprecated, but in
95     fact it's not deprecated just a bit different
96     usage pipeline. Anyway, deprecation shall not
97     happen spontaneously as a part of other changes.
98     And for sure shall not break anything.
99
100 commit 7a9c83d3ccaa2f0015f88b9156d7662c46244b4a
101 Author: Sergey Sharybin <sergey.vfx@gmail.com>
102 Date:   Sat Apr 6 20:49:05 2013 +0600
103
104     Revert "Change libmv's bilinear sampling to assume the same"
105     
106     Revert changes to bilinear sampler which were originally
107     aimed to match blender's pixel center (where integer coord
108     is a left-bottom corner, x.5 coords are centers.
109     
110     The reason of revert is changing this assumption in only
111     sampler didn't work well and lead to wrong results of
112     BlurredImageAndDerivativesChannels for example.
113     
114     Discovered when was doing unit-tests for brute region tracker.
115     
116     This reverts commit daa354c0735b954b0cd7725626e9a3d67416d46b.
117
118 commit 15f3bb00340933ce753a1a55e9cde9383352e259
119 Author: Sergey Sharybin <sergey.vfx@gmail.com>
120 Date:   Sat Apr 6 18:37:37 2013 +0600
121
122     Added basic test for brute region tracker
123     
124     It is failing at this moment and this is caused because
125     of how SampleLinear works - seems it's assumption about
126     pixel center is not correct for internal sampling.
127
128 commit 1146602972c07e99a9e4ab37d35ac83aec490e60
129 Author: Sergey Sharybin <sergey.vfx@gmail.com>
130 Date:   Sat Apr 6 16:54:08 2013 +0600
131
132     Tweak to KLT region tracker test
133     
134     KLT is usually used to track relatively small
135     motions, and in this case motion almost equals
136     to half window size. This confuses math and
137     leads to not so much expected result.
138     
139     Further, not actually sure this is nice idea
140     to use KLT in such synthetic case.
141
142 commit 1e22cbcac480863b6b5abc5c85f23dc70748933a
143 Author: Sergey Sharybin <sergey.vfx@gmail.com>
144 Date:   Sat Apr 6 16:40:59 2013 +0600
145
146     Pyramid tracker unit test fix
147     
148     Issue was caused by trackers modifying guessed
149     point location even in case of failure. So made
150     id so both level 0 and level 3 of pyramid are
151     starting from the same initial guessed location.
152     
153     Modifying locations in case tracker returns false
154     is not actually a bug - someone could still want
155     to use that location. False in this case  means
156     more like "returned location is not so much
157     accurate".
158
159 commit 3ad5e0efa071f202ee7c2034d70dd97aa62b13aa
160 Author: Sergey Sharybin <sergey.vfx@gmail.com>
161 Date:   Sat Apr 6 00:38:40 2013 +0600
162
163     Intersect unit test fix
164     
165     EuclideanIntersect is not aware of camera calibration
166     matrix yet and always assumes it to be an identity.
167     
168     So using non-identity matrix to construct sample case
169     leads to wrong projection results.
170     
171     For now made it so test case uses identity matrix for
172     calibration.
173     
174     Also fixed variable shadowing which lead to wrong
175     markers positions (were either zero or undefined).
176
177 commit 3a153c2b65f38653a36c36975018f68d42d60670
178 Author: Sergey Sharybin <sergey.vfx@gmail.com>
179 Date:   Sat Apr 6 00:12:12 2013 +0600
180
181     Camera intrinsics unit tests fixes
182     
183     - Existing test ApplyIsInvertibleSimple was not
184       doing right thing - distortion model used there
185       was ininvertible.
186     
187       Tweaked parameters in a way model is invertible now.
188     
189     - Added some own tests which tests;
190     
191       * Principal point always maps from pixel space to
192         zero normalized position.
193     
194       * Some basic tests to check whether individual
195         apply/invert works correct.
196
197 commit e3b2bccba6145290738a6677c14f7369ec7a38cd
198 Author: Sergey Sharybin <sergey.vfx@gmail.com>
199 Date:   Thu Apr 4 02:59:58 2013 +0600
200
201     Suppress strict compiler warnings in glags/glog libraries
202
203 commit 5fca459adcf0a3419fa9cd8d983dc2c952d02647
204 Author: Sergey Sharybin <sergey.vfx@gmail.com>
205 Date:   Thu Apr 4 01:20:18 2013 +0600
206
207     Lint cleanup, mostly white space and line width.
208     
209     Also moved own includes to the top of files.
210     
211     Should be no functional changes :)
212
213 commit 9a9dd458a622928b91dbd3c79900577923283838
214 Author: Sergey Sharybin <sergey.vfx@gmail.com>
215 Date:   Fri Mar 29 00:20:29 2013 +0600
216
217     Fix for TransformTracks in uncalibrated pipeline
218     
219     Transformation matrix was completely ignored by
220     TransformTracks() and final marker coordinate
221     exactly matched it's source coordinates.
222     
223     Seems to be just a typo in vector usage: need to
224     use "b" (which is transformed one) instead of "a"
225     when converting projective coordinate to 2D space.
226
227 commit d35766cc9901609e32f4d80faba715695bea3c40
228 Author: Sergey Sharybin <sergey.vfx@gmail.com>
229 Date:   Fri Mar 29 00:19:11 2013 +0600
230
231     Revert part of e2eb58c4230f94ef0c72fb4005e5434088d52e80
232     
233     That commit included one change which shall have been
234     go as separate commit with more detailed description.
235
236 commit e8d71b4e96fd78eb60773b6557d66da672e65753
237 Author: Sergey Sharybin <sergey.vfx@gmail.com>
238 Date:   Wed Mar 27 20:37:05 2013 +0600
239
240     Silenced more warnings
241     
242     - Added includes of own header to fast implementation files.
243     
244     - Camera intrinsics wouldn't complain about unknown pragma when
245       building without OpenMP support.
246     
247     TODO: Make it a CMake option to build libmv with OpenMP support.
248           Currently multi-threaded intrinsics only available when
249           using custom CMake rules for bundled libmv version
250           (as it's done in Blender).
251
252 commit ad442812654f270dc088394410fda1b81b8dc450
253 Author: Sergey Sharybin <sergey.vfx@gmail.com>
254 Date:   Wed Mar 27 20:18:51 2013 +0600
255
256     Multithreaded camera intrinsics
257     
258     Implemented multithreaded buffer (un)distortion
259     for camera intrinsics using OpenMP.
260     
261     By default, (un)distortion is single-threaded,
262     but it is possible to as CameraIntrinsics to
263     use more threads by calling SetThreads method.
264
265 commit c88b4881096174a16a9f9e6fc2c9dcad3e255b25
266 Author: Sergey Sharybin <sergey.vfx@gmail.com>
267 Date:   Wed Mar 27 18:45:09 2013 +0600
268
269     Movie functions implementation from panography header
270     into own CC implementation file.
271     
272     Before this all panography functions were declared as
273     static, which is not so much useful from re-useability
274     point of view.
275
276 commit 2d2faf9104bc035722cff6775e1b8e7c93143aba
277 Author: Sergey Sharybin <sergey.vfx@gmail.com>
278 Date:   Wed Mar 27 18:37:36 2013 +0600
279
280     Build shared Ceres library only if BUILD_SHARED_LIBS is enabled
281
282 commit daa3ddd3260ccaf2bf9c72eadb89213d91e549ec
283 Author: Sergey Sharybin <sergey.vfx@gmail.com>
284 Date:   Wed Mar 27 18:21:52 2013 +0600
285
286     Update Ceres to upstream version 1.5.0
287
288 commit cf5dc678878345ea3f221ce50cb2b9e539c2ab38
289 Author: Sergey Sharybin <sergey.vfx@gmail.com>
290 Date:   Wed Mar 27 15:06:24 2013 +0600
291
292     Code cleanup: removed more deprecated FFmpeg API usage
293     
294     This time in qt-tracker application.
295
296 commit e2eb58c4230f94ef0c72fb4005e5434088d52e80
297 Author: Sergey Sharybin <sergey.vfx@gmail.com>
298 Date:   Tue Mar 26 17:19:51 2013 +0600
299
300     Code cleanup: silent unused variables warnings
301
302 commit af89bb24667e39b7e655173ea807fdcfbeef4422
303 Author: Sergey Sharybin <sergey.vfx@gmail.com>
304 Date:   Tue Mar 26 16:54:14 2013 +0600
305
306     Code cleanup: no need to declare empty body for ProgressUpdateCallback:invoke
307     
308     Make force this method to be overridden by derivative classes.
309     Also removed currently unneeded callbacks.cc.
310
311 commit 0441d4ee06fad0219256a5704f931eec916a3868
312 Author: Sergey Sharybin <sergey.vfx@gmail.com>
313 Date:   Tue Mar 26 16:37:27 2013 +0600
314
315     Code cleanup: silent type narrowing in qt-tracker
316
317 commit cd4b61c976448d0fdedefb3ed4b21d70e078f94b
318 Author: Sergey Sharybin <sergey.vfx@gmail.com>
319 Date:   Tue Mar 26 16:26:39 2013 +0600
320
321     Changes to unit testing
322     
323     - Move ceres test binaries to ${LIBMV_TESTS_OUTPUT_DIR}/ceres,
324       so they don't mess with libmv's application binaries and
325       tests.
326     
327     - Removed ceres_ prefix from ceres unit tests, only use this
328       prefix for targets (targets need to be unique name).
329     
330     - Added unit tests data for ceres, otherwise system_test fails.
331     
332     - Restored "test" makefile target.
333
334 commit cf704ada08acc8b26167e7bfb3e1e88fd278de23
335 Author: Sergey Sharybin <sergey.vfx@gmail.com>
336 Date:   Tue Mar 26 15:01:15 2013 +0600
337
338     Code cleanup: use rw-rw-r-- mode for source files
339
340 commit 64b31e3e43acb52aaf6f591b9d1c2449bf6ef3bd
341 Author: Sergey Sharybin <sergey.vfx@gmail.com>
342 Date:   Tue Mar 26 14:57:46 2013 +0600
343
344     Code cleanup: don't use deprecated FFmpeg API functions
345
346 commit 2a3676499548ad5dba5a5c5eadf3bb71e640b612
347 Author: Sergey Sharybin <sergey.vfx@gmail.com>
348 Date:   Tue Mar 5 17:40:52 2013 +0600
349
350     Switch from DENSE_NORMAL_CHOLESKY to DENSE_QR
351     
352     DENSE_QR is better behaved numerically and after recent
353     changes from Sameer there's no big difference in speed.
354
355 commit bcb920df02133da5b7e55fbc74edb9222004eecc
356 Author: Sergey Sharybin <sergey.vfx@gmail.com>
357 Date:   Tue Mar 5 17:15:43 2013 +0600
358
359     Update Ceres to 1.5RC3
360     
361     It brings optimization of DENSE_QR and DENSE_SCHUR solvers.
362
363 commit 473996468a4e67e7c860169181a4ff31ce9b8c80
364 Author: Sergey Sharybin <sergey.vfx@gmail.com>
365 Date:   Fri Mar 1 17:44:54 2013 +0600
366
367     Fixed incorrect order of arguments passing
368     to EXPECT_EQ in keyframe selection tests.
369
370 commit d38ebb74693fdf5b8f0fecf62a3d8c9c53b0b84a
371 Author: Sergey Sharybin <sergey.vfx@gmail.com>
372 Date:   Fri Mar 1 17:40:38 2013 +0600
373
374     Modal (aka tripod) solver rework
375     
376     Several major things are done in this commit:
377     
378     - First of all, logic of modal solver was changed.
379       We do not rely on only minimizer to take care of
380       guessing rotation for frame, but we're using
381       analytical rotation computation for point clouds
382       to obtain initial rotation.
383     
384       Then this rotation is being refined using Ceres
385       minimizer and now instead of minimizing average
386       distance between points of point of two clouds,
387       minimization of reprojection error of point
388       cloud onto frame happens.
389     
390       This gives quite a bit of precision improvement.
391     
392     - Second bigger improvement here is using bundle
393       adjustment for a result of first step when we're
394       only estimating rotation between neighbor images
395       and reprojecting markers.
396     
397       This averages error across the image sequence
398       avoiding error accumulation. Also, this will
399       tweak bundles themselves a bit for better match.
400     
401     - And last bigger improvement here is support of
402       camera intrinsics refirenment.
403     
404     This allowed to significantly improve solution
405     for real-life footage and results after such
406     refining are much more usable than it were before.
407     
408     Thanks to Keir for the help and code review!
409
410 commit 5d6c2e7a27bdd1a1b23bf289d70a9b8f62514c9a
411 Author: Sergey Sharybin <sergey.vfx@gmail.com>
412 Date:   Fri Mar 1 17:37:35 2013 +0600
413
414     Increase verbosity level for reprojected markers info
415     
416     This information is useful, but in cases when you, say,
417     working on a bundler it's annoying to scroll all the
418     information up.
419
420 commit ac252bb1250b3028b9c94736b644e7ab4e7b14b8
421 Author: Sergey Sharybin <sergey.vfx@gmail.com>
422 Date:   Fri Mar 1 17:36:19 2013 +0600
423
424     Move radial distortion code to own templated function
425     
426     This shall not lead to any functional changes, just
427     avoids radial distortion code duplicated in camera
428     intrinsics and bundling code.
429     
430     For fancier bundle adjustment support of  different
431     distortion models this is not actually enough and
432     would need to make some bigger changes, but this
433     changes makes code a bit easier to maintain already.
434
435 commit c253b794612dd529e1d3a9bd7a7c41c32c9a9abb
436 Author: Sergey Sharybin <sergey.vfx@gmail.com>
437 Date:   Fri Mar 1 17:33:27 2013 +0600
438
439     Use threaded cost function, jacobian and linear solver
440     computation, so bundling is as fast as it could be with
441     current parameter block structure.
442
443 commit 931fe37a10212b91b525d4f6eb753990a338b471
444 Author: Sergey Sharybin <sergey.vfx@gmail.com>
445 Date:   Fri Mar 1 17:29:21 2013 +0600
446
447     Fixed comment for euclidean bundling,
448     which is now supports raidal bundling independently
449     from other intrinsics.
450
451 commit 217d8e6edc3de1a853fb84275d2d2dd898e7529c
452 Author: Sergey Sharybin <sergey.vfx@gmail.com>
453 Date:   Tue Feb 26 18:19:01 2013 +0600
454
455     Allow K1,K2 refirement combination
456     
457     It is now possible to refine only radial distortion
458     with new Ceres based bundler and this new combination
459     is already used in Blender.
460
461 commit d8850addc944d400f7a9c358396c437d9e4acc70
462 Author: Sergey Sharybin <sergey.vfx@gmail.com>
463 Date:   Tue Feb 26 18:17:09 2013 +0600
464
465     Switch euclidean intersection code to use Ceres
466     
467     Would not expect any significant changes in solver
468     behavior, but it could be more accurate in some cases.
469     
470     Switching projective intersection to ceres is marked
471     as a TODO for now.
472
473 commit 6990b7946ec96b3cb2dcfc8a1beaaba9538b0802
474 Author: Keir Mierle <mierle@gmail.com>
475 Date:   Mon Feb 25 20:00:48 2013 +0000
476
477     Switch motion tracker bundle adjustment to Ceres.
478     
479     Patch originally written by me, then finished by Sergey. Big
480     thanks to Sergey for troopering through and fixing the many issues
481     with my original (not compilable) patch.
482     
483     The Ceres implementation uses 2 parameter blocks for each camera
484     (1 for rotation and 1 for translation), 1 parameter block for
485     common intrinsics (focal length etc) and 1 parameter block for
486     each track (e.g. bundle or 3D point).
487     
488     We turn on some fancy optimizer options to get better performance,
489     in particular:
490     
491       options.preconditioner_type = ceres::SCHUR_JACOBI;
492       options.linear_solver_type = ceres::ITERATIVE_SCHUR;
493       options.use_inner_iterations = true;
494       options.use_nonmonotonic_steps = true;
495       options.max_num_iterations = 100;
496     
497     Special thanks to Sameer Agarwal of Ceres fame for splitting out
498     the SCHUR_JACOBI preconditioner so that it didn't depend on
499     CHOLMOD.  Previously we could not use that preconditioner in
500     Blender because CHOLMOD is too large of a dependency for Blender.
501     
502     BundleIntrinsicsLogMessage:
503     - Moved bunch of if(foo) LG << "bar" into this function, to make
504       EuclideanBundleCommonIntrinsics a little bit easier to follow.
505     
506     EuclideanBundle:
507     - Fix RMSE logging.
508
509 commit 1696342954614b54133780d74d6ee0fbcbe224f0
510 Author: Sergey Sharybin <sergey.vfx@gmail.com>
511 Date:   Tue Feb 26 18:10:33 2013 +0600
512
513     Upgrade ceres to latest upstream version
514     
515     This is needed because of some features of new Ceres
516     for further development.
517
518 commit 575336f794841ada90aacd783285014081b8318c
519 Author: Sergey Sharybin <sergey.vfx@gmail.com>
520 Date:   Mon Jan 7 15:58:40 2013 +0600
521
522     Fixed for keyframe selection
523     
524     - Calculate residuals for GRIC in pixel space rather than
525       in normalized space.
526     
527       This seems to be how it's intended to be used.
528     
529       Algebraic H and F will still use normalized coordinates which
530       are more stable, after this matrices are converted to pixel
531       space and Ceres refinement happens in pixel space.
532     
533     - Standard deviation calculation was wrong in GRIC. It shouldn't
534       be deviation of residuals, but as per Torr it should be deviation
535       of measurement error, which is constant (in our case 0.1)
536     
537       Not sure if using squared cost function is correct for GRIC,
538       but cost function is indeed squared and in most papers cost
539       function is used for GRIC. After some further tests we could
540       switch GRIC residuals to non-squared distance.
541     
542     - Bring back rho part of GRIC, in unit tests it doesn't make
543       sense whether it's enabled or not, lets see how it'll behave
544       in real-life footage.
545     
546     - Added one more unit test based on elevator scene and manual
547       keyframe selection.
548
549 commit 24117f3c3fc5531beb6497d79bb6f1780a998081
550 Author: Sergey Sharybin <sergey.vfx@gmail.com>
551 Date:   Sun Jan 6 19:07:06 2013 +0600
552
553     Added test for keyframe selection based on manual selection
554     
555     Additional changes:
556     
557     - Reduce minimal correspondence to match real-world manually
558       tracked footage
559     
560     - Returned back squares to SymmetricEpipolarDistance and
561       SymmetricGeometricDistance -- this is actually a cost
562       functions, not distances and they shall be squared.
563
564 commit 770eb0293b881c4c419c587a6cdb062c47ab6e44
565 Author: Sergey Sharybin <sergey.vfx@gmail.com>
566 Date:   Fri Dec 21 00:43:30 2012 +0600
567
568     Improvements for keyframe selection
569     
570     - Changed main keyframe selection cycle, so in cases there're no
571       more next keyframes for current keyframe could be found in the
572       image sequence, current keyframe would be moved forward and
573       search continues.
574     
575       This helps in cases when there's poor motion in the beginning
576       of the sequence, then markers becomes occluded. There could be
577       good keyframes in the middle of the shot still.
578     
579     - Extended keyframe_selection_test with real world cases.
580     
581     - Moved correspondences constraint to the top, so no H/F estimation
582       happens if there's bad correspondence. Makes algorithm go a bit
583       faster.
584     
585     Strangely, but using non-squared distances makes neighbor frames
586     test fail, using squared distances makes this tests pass.
587     
588     However, using non-squared distances seems to be working better
589     in real tests i've been doing. So this requires more investigation/
590
591 commit 7415c62fbda36c5bd1c291bc94d535a66da896d0
592 Author: Sergey Sharybin <sergey.vfx@gmail.com>
593 Date:   Thu Dec 20 18:46:09 2012 +0600
594
595     Cosmetic change to correspondences reports in keyframe selection
596
597 commit ceaf80c987ec0338e7e83965bc808411453eb755
598 Author: Sergey Sharybin <sergey.vfx@gmail.com>
599 Date:   Thu Dec 20 18:08:03 2012 +0600
600
601     Various fixes:
602     
603     - That was a typo in symmetric geometric cost functor, which
604       computed inverse distance in a wrong way.
605     
606     - Fixed compilation of unit tests
607     
608     - Added simple test for keyframe selection. Currently only
609       covers case that neighbor frames with only translation
610       (homography should be better than fundamental) are not
611       considered a keyframes.
612     
613       Still need to be investigated why it only works if tracks
614       are in pixel space and why doesn't work in normalized space.
615
616 commit cfabdfe48df2add3d1f30cf4370efd0b31990ab0
617 Author: Sergey Sharybin <sergey.vfx@gmail.com>
618 Date:   Thu Dec 20 05:46:53 2012 +0600
619
620     Assorted fixes for keyframe selection:
621     
622     - Biggest error was in cost functors used for F and H refirement,
623       they were just wrong.
624     
625     - Use natural logarithms, since it's actually makes sense from
626       math papers point of view and error is somewhere else.
627     
628     - Disabled rho for GRIC, for now use non-clamped error for tests.
629     
630     - Made SymmetricEpipolarDistance returning non-squared distance
631       Keyframe selection is currently the only used of this function
632       and it seems using non-squared distance makes much more sense.
633     
634       Also would think to append suffix "Squared" to functions which
635       returns squared distances.
636     
637     - Removed templated version of SymmetricEpipolarDistance, since
638       it's not needed actually.
639     
640     This is actually even worse working than previous implementation,
641     but commit it needed for further review.
642
643 commit 35d8c57626ad74818f155e6e5960c663ea84e032
644 Author: Sergey Sharybin <sergey.vfx@gmail.com>
645 Date:   Thu Dec 20 03:00:40 2012 +0600
646
647     Euclidean resection cost function didn't use correct constructor
648     
649     It was storing a reference to initial rotation passed by value,
650     leading to pointer being pointing to a stack variable, leading to
651     wrong memory access in residuals computing.
652     
653     Apparently was visible in optimized builds only with inline
654     substitution allowed.
655
656 commit 0798d3162bb49cee7e1c423ceccbca1326ad5650
657 Author: Sergey Sharybin <sergey.vfx@gmail.com>
658 Date:   Thu Dec 20 02:50:52 2012 +0600
659
660     Automatic keyframe selection based on Pollefeys's criteria
661     
662     This commit implements automatic keyframe selection algorithm
663     based on Pollefeys's criteria (F-GRIC is smaller than H-GRIC
664     and correspondence ratio is more then 90%).
665     
666     It is implemented as a part of simple pipeline and returns
667     vector of keyframe images for a given Tracks structure.
668     
669     For simple pipeline reconstruction two best keyframes are
670     expected to be selected from all detected candidates.
671     Criteria for this selection could be reprojection error of
672     solution from two candidate keyfames.
673     
674     Unfortunately, it's not fully workable yet, hopefully would
675     be fixed soon.
676
677 commit e943985552f0598ae122252876f305d72c25c2f9
678 Author: Sergey Sharybin <sergey.vfx@gmail.com>
679 Date:   Thu Dec 6 17:47:11 2012 +0600
680
681     Camera Tracking: allow fallback to reprojection resection
682     by user demand
683     
684     This fixes some "regressions" introduced in previous commit
685     which lead to much worse solution in some cases. Now it's
686     possible to bring old behavior back.
687     
688     Perhaps it's more like temporal solution for time being smarter
689     solution is found. But finding such a solution isn't so fast,
690     so let's bring manual control over reprojection usage.
691     
692     But anyway, imo it's now nice to have a structure which could
693     be used to pass different settings to the solver.