29a06fa7985f05a5bfaa39bebb5125349e8e452a
[blender.git] / extern / libmv / ChangeLog
1 commit d14a372dfe09c7339f267c4904a541fbe2efec43
2 Author: Sergey Sharybin <sergey.vfx@gmail.com>
3 Date:   Fri Mar 21 16:02:41 2014 +0600
4
5     Attempt to fix compilation error with msvc2013
6
7 commit 933531580b4dc4b65601d785cedc16506d615d7b
8 Author: Sergey Sharybin <sergey.vfx@gmail.com>
9 Date:   Thu Mar 20 23:07:34 2014 +0600
10
11     Compilation fixes for MinGW
12     
13     Many thanks to Antony Riakiotakis for the patch!
14
15 commit f1aefcbf58fe04ea2967434f39f703bb486777c8
16 Author: Sergey Sharybin <sergey.vfx@gmail.com>
17 Date:   Thu Feb 27 16:21:19 2014 +0600
18
19     Implement separate BA step for tracks which have constant zero weight
20     
21     This is needed to minimize their reprojection error over the footage.
22     Without this extra step positions of such tracks were calculated by
23     algebraic intersection code only, which doesn't give best precision.
24
25 commit bcf7f9470b2ea33cf89a31a72037ec03be631637
26 Author: Sergey Sharybin <sergey.vfx@gmail.com>
27 Date:   Thu Feb 27 14:16:42 2014 +0600
28
29     Avoid zero-sized problem when doing euclidean intersection
30     
31     Zero-sized problem might occur when intersecting track with
32     constant zero weight. For such tracks we'll just use result
33     of algebraic intersection.
34     
35     TODO: We probably need to have a separate BA step to adjust
36     positions of tracks with constant zero weight.
37
38 commit f884bb20a93189b8210639f3de939c64177d66b3
39 Author: Sergey Sharybin <sergey.vfx@gmail.com>
40 Date:   Wed Feb 26 18:00:40 2014 +0600
41
42     Ignore zero weighted markers in keyframe selection
43     
44     It doesn't make sense to use zero-weighted tracks as a correspondences
45     in keyframe selection.
46     
47     Such tracks are not guaranteed to be tracked accurately because their
48     purpose is to add reference points in 3D space without affecting the
49     solution.
50
51 commit 74db5175cdbcabe673b82eef59c88fb7f342c43f
52 Author: Sergey Sharybin <sergey.vfx@gmail.com>
53 Date:   Wed Feb 26 13:23:02 2014 +0600
54
55     Tweaks to make bundling into Blender warning-less
56     
57     Mainly issue i caused by conflicts in include directories,
58     so glog used to include config.h from gflags. It might be
59     fixed by splitting gflags/glog from Libmv in Blender build
60     system but that's not something fun to work on. Fixed by
61     making include directories  bit more explicit.
62     
63     Also solved no-previous-prototype warnings.
64
65 commit bc4bc66af0115069562b79e837ccf4fd95c8f97e
66 Author: Sergey Sharybin <sergey.vfx@gmail.com>
67 Date:   Fri Feb 21 14:55:13 2014 +0600
68
69     Raise epsilon used for model solver test
70     
71     It was too much small leading to false failure triggering
72     caused simply by precision issues.
73
74 commit bf750590a6af4af3622c01fd1004c44da60484a7
75 Author: Sergey Sharybin <sergey.vfx@gmail.com>
76 Date:   Tue Feb 18 23:35:52 2014 +0600
77
78     Made it possible to link against Ceres installed on the system
79     
80     Main purpose of this is to get away from bundled Ceres library
81     which is not so trivial to re-bundle and takes some to do this
82     (not talking about CMake options conflicts and pollution).
83     
84     Enabled by setting WITH_SYSTEM_CERES=ON. Default paths to search
85     Ceres library:
86     
87     - /usr/local
88     - /sw
89     - /opt/local
90     - /opt/csw
91     - /opt/lib/ceres
92     
93     You might also specify Ceres root directory using CERES_ROOT_DIR
94     variable (both CMake and environment variables are supported).
95     
96     If your Ceres is build statically, you're to control all additional
97     libraries needed to link against using CMAKE_EXE_LINKER_FLAGS.
98
99 commit c9156fbf80c86853806844b754b1e48f45c5ec11
100 Author: Sergey Sharybin <sergey.vfx@gmail.com>
101 Date:   Tue Feb 18 19:38:22 2014 +0600
102
103     Remove .orig file which was added by accident
104
105 commit 62597e3cf0f266a2fefec415c89759e502793e06
106 Author: Sergey Sharybin <sergey.vfx@gmail.com>
107 Date:   Thu Jan 2 16:02:08 2014 +0600
108
109     Upgrade glog to latest svn r139
110     
111     The intention of this upgrade is to get rid of custom patches
112     we've been having to support compilation on different platforms
113     and compilers.
114
115 commit 2452d5d42b390c7ab853e6fe60e58bdd7a01a004
116 Author: Sergey Sharybin <sergey.vfx@gmail.com>
117 Date:   Tue Feb 18 18:46:08 2014 +0600
118
119     Tweak Ceres CMake to detect uninstall target properly on Windows
120
121 commit 98a281d58ce2301f3dd239a97a448e53f48d0258
122 Author: Sergey Sharybin <sergey.vfx@gmail.com>
123 Date:   Fri Feb 14 00:36:44 2014 +0600
124
125     Fix order of third party libs compilation and options used by them
126     
127     WITH_FAST_DETECTOR was defined too late and third_party folder
128     didn't see this option.
129
130 commit 4962bccd643ec0f2aed3035170d5f20e8f6efc85
131 Author: Sergey Sharybin <sergey.vfx@gmail.com>
132 Date:   Thu Feb 13 23:55:03 2014 +0600
133
134     Disable Ceres unit tests and examples by default
135     
136     Actually we're to switch to external Ceres rather than
137     bundled one, would make life much easier actually.
138
139 commit b1381540305d69c702eb2f051bd543fb5c1c3e2c
140 Author: Sergey Sharybin <sergey.vfx@gmail.com>
141 Date:   Thu Feb 6 18:01:58 2014 +0600
142
143     Made FAST detector optional
144     
145     This way it's possible to bundle Libmv sources subset
146     to applications which doesn't need FAST detector.
147     
148     Mainly this is done for Blender integration.
149
150 commit da4607f010bca0b3532cd4444afbb10bc774fc32
151 Author: Sergey Sharybin <sergey.vfx@gmail.com>
152 Date:   Tue Jan 28 18:32:39 2014 +0600
153
154     Implemented scoped_array and use it in detector
155     
156     scoped_array is pretty much the same as scoped_ptr
157     with the only difference that it'll free memory using
158     delete[] operator.
159     
160     It also gives some additional API functions to access
161     array elements.
162     
163     Currently it only used to manage images denoted as byte
164     arrays in detector.
165     
166     Reviewers: keir
167     
168     Reviewed By: keir
169     
170     Differential Revision: https://developer.blender.org/D266
171
172 commit cd7eb3eff2e69ce5e08570ead83ae6d35ee48857
173 Author: Sergey Sharybin <sergey.vfx@gmail.com>
174 Date:   Tue Jan 28 17:23:47 2014 +0600
175
176     Improvements to weighted tracks behavior
177     
178     First thing changed by this commit is making it so
179     Euclidean intersection takes track weight into account
180     when solving minimization problem. This behaves the
181     same exact way as it is for BA step.
182     
183     Second thing is related on how average reprojection error
184     is being calculated. It didn't take track weight into
185     account which could confuse users. Now average reprojection
186     error will give the same result as intersection/BA uses
187     during minimization which gives much more predictable
188     behavior.
189     
190     Reviewers: keir
191     
192     Reviewed By: keir
193     
194     CC: sebastian_k
195     
196     Differential Revision: https://developer.blender.org/D265
197
198 commit 6559b36dc14369175bfa0830323146acd3426483
199 Author: Sergey Sharybin <sergey.vfx@gmail.com>
200 Date:   Tue Jan 28 16:39:14 2014 +0600
201
202     Fixes for keyframe selection
203     
204     Using tracks with constant zero weight used to crash
205     keyframe selection since it was trying to use missing
206     parameter blocks for Jacobian evaluation,
207     
208     Also fixed possible issues with wrong camera block being
209     marked as variable. This could technically happen when
210     having zero weighted tracks. Made it so all camera blocks
211     are marked as variable for now.
212
213 commit 557d531b061aa69d114e89cbb325c5175389afec
214 Author: Sergey Sharybin <sergey.vfx@gmail.com>
215 Date:   Tue Jan 28 16:10:33 2014 +0600
216
217     Style cleanup: wrong indentation of wrapped line
218
219 commit ca15262cf07a873268173965ee1fb84f9729b744
220 Author: Sergey Sharybin <sergey.vfx@gmail.com>
221 Date:   Tue Jan 28 15:21:36 2014 +0600
222
223     Rework detector API and implement Harris detector
224     
225     Switch the detector API to a single function which accepts
226     a float image and detector options. This makes usage of
227     feature detection more unified across different algorithms.
228     
229     Options structure is pretty much straightforward and contains
230     detector to be used and all the detector-specific settings.
231     
232     Also implemented Harris feature detection algorithm which
233     is not as fast as FAST one but is expected to detect more
234     robust feature points.
235     
236     Reviewers: keir
237     
238     Reviewed By: keir
239     
240     Differential Revision: https://developer.blender.org/D258
241
242 commit 6458915f64fceba108c5279b7320ca8c76e8a742
243 Author: Sergey Sharybin <sergey.vfx@gmail.com>
244 Date:   Fri Jan 24 19:14:18 2014 +0600
245
246     Add arcanist configuration file
247
248 commit 0a69fadadc5aacbd339f839ac5bd12c3571278b1
249 Author: Sergey Sharybin <sergey.vfx@gmail.com>
250 Date:   Thu Jan 9 15:50:11 2014 +0600
251
252     Fix compilation error on NetBSD
253     
254     - NetBSD doesn't provide sincos(3) in libm, so don't try to use it
255     - Use posix_memalign on NetBSD
256     
257     Original patch is by Jeorg Sonnenberger to Blender patch tracker, thanks!
258
259 commit b0df3e291e6c85f791658be04334efafc41989f5
260 Author: Sergey Sharybin <sergey.vfx@gmail.com>
261 Date:   Thu Jan 2 15:12:18 2014 +0600
262
263     Fix build configuration warnings
264     
265     Those warnings were mainly caused by installation
266     configuration of Ceres. Made some tweaks to make
267     CMake happy for now.
268     
269     But for sure bigger cleanup here is needed.
270
271 commit b68de6acd20f3ffab92e0cd450198a700cd109ab
272 Author: Sergey Sharybin <sergey.vfx@gmail.com>
273 Date:   Thu Jan 2 15:04:05 2014 +0600
274
275     Code and style cleanup
276     
277     Mainly fixed some style warnings reported by cpplint.
278     
279     Also changed how camera (un)distortion happens internally
280     by replacing number of channels as a template argument
281     with number as channels passing as function argument.
282     Makes code easier to follow by eliminating loads checks
283     how much channels are used and which argument to pass to
284     the template.
285
286 commit b9e467e7c077b58199c4110f6967b7c18d1e7bf7
287 Author: Sergey Sharybin <sergey.vfx@gmail.com>
288 Date:   Tue Dec 31 20:34:39 2013 +0600
289
290     Update Ceres to the latest upstream
291     
292     This brings up much easier termination type usage,
293     which for us means we might use:
294     
295       ceres::Summary::IsSolutionUsable()
296     
297     instead of doing manual funky enum values check.
298
299 commit 3aeb2367e50b52ca2b9d59d4f0f0b4bbfd6a05e8
300 Author: Sergey Sharybin <sergey.vfx@gmail.com>
301 Date:   Tue Dec 31 20:43:24 2013 +0600
302
303     Update gtest to latest version 1.7.0
304     
305     Also reshuffled CMakeLists in order to avoid
306     conflicts happening between gflags bundled to
307     Ceres and third_party.
308
309 commit 30aaa9cd0b4a4eb0948a17824e7e7622d8ebcb41
310 Author: Sergey Sharybin <sergey.vfx@gmail.com>
311 Date:   Tue Dec 31 20:10:06 2013 +0600
312
313     Changes for VC2013
314     
315     Solves compilation error when using msvc2013
316     
317     Original patch is by Alexandr Kuznetsov to blender.git
318
319 commit b204c0d25065a2b149de256929ff37d8f00f45bb
320 Author: Keir Mierle <mierle@gmail.com>
321 Date:   Tue Dec 31 20:05:58 2013 +0600
322
323     Eagerly attempt to refine a track before doing a brute search
324     
325     Before the refinement phase of tracking, a brute force SAD search
326     is run across the search area. This works well but is slow;
327     especially if the guess for the track's location is accurate.
328     
329     This patch runs a refinement phase before running a brute force
330     search, hoping that the guessed position (in x2, y2) is close to
331     the best answer. If it is, then no brute search is done. If it is
332     not, then a normal brute force search followed by refinement is
333     done.
334     
335     In some cases this may produce worse tracks than before; the
336     regressions will need investigation. The predictive motion model
337     (to be implemented) will reduce the probability of that happening.
338
339 commit 5361513f0328ff94b53125d29129561bb03132e8
340 Author: Keir Mierle <mierle@gmail.com>
341 Date:   Tue Dec 31 20:04:46 2013 +0600
342
343     Fix bug where libmv tracking incorrectly succeeds on failure
344     
345     Before this patch, if Ceres returned USER_SUCCESS indicating that
346     Ceres was only changing the tracked quad slightly between
347     iterations (indicating convergence), no final correlation check
348     was done. This leads to incorrectly returning that the tracking
349     was successful, when it actually failed.
350
351 commit ba9e63eed09e33a48bbcb081058f45ac16f8738e
352 Author: Sergey Sharybin <sergey.vfx@gmail.com>
353 Date:   Tue Dec 31 20:00:46 2013 +0600
354
355     Implementation of weighted tracks
356     
357     Added a weight field to Track structure which means
358     how much affect this track will have on the final
359     reconstruction.
360     
361     Currently it affects on BA step only which in most
362     cases will work just fine. However, it worth looking
363     into weight support for intersection/resection.
364
365 commit 4600df8b685ca8c4daa22d6c3b0125fd42c3bc67
366 Author: Sergey Sharybin <sergey.vfx@gmail.com>
367 Date:   Tue Dec 31 19:30:14 2013 +0600
368
369     Code cleanup: move function prototype to header file
370
371 commit 0ce5b6efde774b3f042acf9e42c95674548f1c01
372 Author: Sergey Sharybin <sergey.vfx@gmail.com>
373 Date:   Tue Dec 31 19:26:48 2013 +0600
374
375     Get rid of Allow Fallback option for euclidean resection
376     
377     It was rather confusing from the user usage point of view
378     and didn't get so much improvement after new bundle adjuster
379     was added.
380     
381     In the future we might want to switch resection to PPnP algorithm,
382     which could also might be a nice alternative to fallback option.
383
384 commit 5d063426f4809000c27f38ed798e4224bbd09a6d
385 Author: Sergey Sharybin <sergey.vfx@gmail.com>
386 Date:   Tue Dec 31 19:24:05 2013 +0600
387
388     Use explicit declaration of int types sign
389     
390     Mainly needs to make blender happy with this custom
391     header which used to run into conflict with other int
392     types headers.
393     
394     Wouldn't harm being more explicit here anyway.
395
396 commit c5be59dee94f94de369006c544080282cfb245cc
397 Author: Sergey Sharybin <sergey.vfx@gmail.com>
398 Date:   Tue Dec 31 14:50:00 2013 +0600
399
400     Implement refinement of estimated homography/fundamental matrices
401     
402     It was only possible to perform algebraic estimation, which didn't
403     give so much accurate results.
404     
405     Implemented a way to perform algebraic estimation followed with
406     refinement step using Ceres minimizer.
407     
408     The code was actually mostly already there since keyframe selection
409     patch. Made such estimation a generic function in multiview/ and
410     hanged API for estimation in order to pass all additional options via
411     an options structure (the same way as it's done fr Ceres).
412     
413     Most of the options are straight-forward to understand,but some
414     deserves more description here:
415     
416     * expected_average_symmetric_distance is used as an early output check
417       and as soon as average symmetric error goes below this threshold
418       refining finishes.
419     
420       This distance is measured in the same units as input points are.
421     
422       It is arguable whether we need callback for this or not, but seems
423       Ceres doesn't have some kind of absolute threshold for function value
424       and function_tolerance behaves different from logic behind expected
425       symmetric error.
426     
427     * There' an option to normalize correspondences before estimating the
428       homography in order to increase estimation stability. See
429     
430         R. Hartley and A. Zisserman. Multiple View Geometry in Computer
431         Vision. Cambridge University Press, second edition, 2003.
432     
433         https://www.cs.ubc.ca/grads/resources/thesis/May09/Dubrofsky_Elan.pdf
434
435 commit 1cdad972c4a9005e78891524cbd6d65600ca7e99
436 Author: Sergey Sharybin <sergey.vfx@gmail.com>
437 Date:   Wed Sep 25 16:12:29 2013 +0600
438
439     Code cleanup: Minor function capitalization fix
440     
441     Original patch by Joseph Mansfield to the Blender repository.
442
443 commit 434316d084e8a41fd452f03610d7244d664948dc
444 Author: Sergey Sharybin <sergey.vfx@gmail.com>
445 Date:   Wed Sep 25 16:07:43 2013 +0600
446
447     Code cleanup: spelling correction
448     
449     Original patch by Joseph Mansfield to the Blender repository.
450
451 commit 5cfe8465ac70407c0959c53bcd5206657a1322a2
452 Author: Sergey Sharybin <sergey.vfx@gmail.com>
453 Date:   Wed Sep 25 16:02:48 2013 +0600
454
455     Fix for uninitialized covariance matrix
456     
457     Lead to unpredictable tracking termination criteria.
458
459 commit fd86b77d413489649a989f075b061714ed9a72fc
460 Author: Sergey Sharybin <sergey.vfx@gmail.com>
461 Date:   Wed Sep 25 16:01:19 2013 +0600
462
463     Add Procrustes PNP ("PPnP") resection algorithm to libmv
464     
465     This adds a new Euclidean resection method, used to create the
466     initial reconstruction in the motion tracker, to libmv. The method
467     is based on the Procrustes PNP algorithm (aka "PPnP"). Currently
468     the algorithm is not connected with the motion tracker, but it
469     will be eventually since it supports initialization.
470     
471     Having an initial guess when doing resection is important for
472     ambiguous cases where potentially the user could offer extra
473     guidance to the solver, in the form of "this point is in front of
474     that point".
475     
476     Original patch by Keir Mierle made to Blender repository.
477
478 commit 0d98e9bbde5d57f6cd9515ce8ff2786d322f29ea
479 Author: Sergey Sharybin <sergey.vfx@gmail.com>
480 Date:   Tue Jun 18 19:24:07 2013 +0600
481
482     Compilation error when using clang
483     
484     Where couple of issues:
485     
486     - Overloaded assignment operator usage ambiguity
487       around some of the Eigen matrix assignment.
488     
489     - Using -O4 flag here on linux ended up in lots
490       of cryptic linker issues, even when using recently
491       release clang 3.3.
492     
493       Disabled forcing optimization flag for now.
494       We could end up with something smarter in the
495       future, but for now i'm not as much fan of
496       forcing compiler's flag.
497
498 commit 2b90b3915671cb629f7aabed30a88f28450294f8
499 Author: Sergey Sharybin <sergey.vfx@gmail.com>
500 Date:   Sat Jun 1 16:20:35 2013 +0600
501
502     Pass vectors by a reference
503     
504     Saves couple of time which used to waste on copying objects,
505     also solves win32 compilation errors caused by alignment.
506
507 commit 994c02d0ec55e9ae14a93a3ada6e5d4939247fc3
508 Author: Sergey Sharybin <sergey.vfx@gmail.com>
509 Date:   Thu May 30 18:00:03 2013 +0600
510
511     Code cleanup
512     
513     - Made some arguments passing to detector const.
514     - Remove unneeded include from track_region header.
515
516 commit 7d0c5325a38e61929f44206761b8aa3565631af5
517 Author: Sergey Sharybin <sergey.vfx@gmail.com>
518 Date:   Mon May 13 04:44:14 2013 +0600
519
520     Pass ApplyRadialDistortionCameraIntrinsics input arguments by reference
521     
522     This shall save some CPU time on calling copy constructor and give
523     some boost of bundle adjuster (where jet could take some time to
524     be passed by value).
525
526 commit eb2e567df4567a54887d602aa95d6744aa154d8b
527 Author: Sergey Sharybin <sergey.vfx@gmail.com>
528 Date:   Mon May 13 04:22:05 2013 +0600
529
530     Minor code style cleanup.
531
532 commit ad3dbaaef10ea721230694311a359df152c7a44a
533 Author: Sergey Sharybin <sergey.vfx@gmail.com>
534 Date:   Sun May 12 22:34:54 2013 +0600
535
536     Cleanup in simple pipeline's bundler
537     
538     - Better match Google's code style conventions.
539     - Move evaluation part into own function, makes
540       bundling itself easier to follow.
541     - Made evaluation an optional parameter.
542     - Removed note about unsupported camera intrinsics
543       refining flags. Technically, all combinations
544       are possible.
545
546 commit 4432eb80f27e929f8750229aaada625d4f3ac5ee
547 Author: Sergey Sharybin <sergey.vfx@gmail.com>
548 Date:   Sun May 12 22:19:31 2013 +0600
549
550     Remove check for zero focal length in BA cost functor
551     
552     This check is actually redundant, because empty intrinsics
553     will have focal length of 1.0, which means original comment
554     about BundleIntrinsics was not truth.
555     
556     It is possible that external user will send focal length of
557     zero to be refined, but blender prevents this from happening.
558
559 commit 34a91c9b8acb0dba3382866fbd29bb9884edb98a
560 Author: Sergey Sharybin <sergey.vfx@gmail.com>
561 Date:   Sat May 11 20:33:54 2013 +0600
562
563     Fix compilation error with msvc2012
564     
565     Using change from glog's upstream for this.
566
567 commit 87be4f030d025e4b29d9243d12bc458b2bb6762a
568 Author: Sergey Sharybin <sergey.vfx@gmail.com>
569 Date:   Sat May 11 19:50:57 2013 +0600
570
571     Style cleanup, mainly pointed by Sameer in Ceres's codereview
572
573 commit 7fa9c0b83d5e0fbd331add2952045076c2028d1b
574 Author: Sergey Sharybin <sergey.vfx@gmail.com>
575 Date:   Fri May 10 18:30:40 2013 +0600
576
577     Keyframe selection improvements
578     
579     Added additional criteria, which ignores
580     keyframe pair if success intersection factor
581     is lower than current candidate pair factor.
582     
583     This solves issue with keyframe pair at which
584     most of the tracks are intersecting behind the
585     camera is accepted (because variance in this
586     case is really small),
587     
588     Also tweaked generalized inverse function,
589     which now doesn't scale epsilon by maximal
590     matrix element. This gave issues at really bad
591     candidates with unstable covariance. In this
592     case almost all eigen values getting zeroed
593     on inverse leading to small expected error.
594
595 commit 0477ef1aa8fc92848f03c45e32539210be583b80
596 Author: Sergey Sharybin <sergey.vfx@gmail.com>
597 Date:   Fri May 10 17:59:40 2013 +0600
598
599     Keyframe selection code cleanup
600     
601     - Updated comments in code.
602     - Removed currently unused functions.
603       Actually, they'd better be moved to some generic
604       logging module, but we don't have it now so was
605       lazy to create one now. Could happen later using
606       code from git history
607     - Renamed function to match better to what's going
608       on in it.
609
610 commit fee2d7cc6003942f628c9a24b74008fd491b85b9
611 Author: Sergey Sharybin <sergey.vfx@gmail.com>
612 Date:   Fri May 10 17:44:49 2013 +0600
613
614     Optimization for reconstruction variance
615     
616     Achieved by replacing SVD-based pseudo-inverse with
617     an eigen solver pseudo inverse.
618     
619     New function works in the same way: it decomposes
620     matrix to V*D*V^-1, then inverts diagonal of D
621     and composes matrix back.
622     
623     The same way is used to deal with gauges - last
624     7 eigen values are getting zeroed.
625     
626     In own tests gives approx 2x boost, without
627     visible affect on selected keyframe quality.
628
629 commit b735649ead4d3d61f7896e46f35b1f7e0cecea3d
630 Author: Sergey Sharybin <sergey.vfx@gmail.com>
631 Date:   Thu Mar 14 14:53:42 2013 +0600
632
633     Initial commit of reconstruction variance criteria
634     which is an addition for GRIC-based keyframe selection.
635     
636     Uses paper Keyframe Selection for Camera Motion and Structure
637     Estimation from Multiple Views,
638     ftp://ftp.tnt.uni-hannover.de/pub/papers/2004/ECCV2004-TTHBAW.pdf
639     as a basis.
640     
641     Currently implemented camera positions reconstructions,
642     bundle positions estimation and bundle adjustment step.
643     
644     Covariance matrix is estimating using generalized inverse
645     with 7 (by the number of gauge freedoms) zeroed eigen values
646     of J^T * J.
647     
648     Additional changes:
649     - Added utility function FundamentalToEssential to extract
650       E from F matrix, used by both final reconstruction pipeline
651       and reconstruction variance code.
652     
653     - Refactored bundler a bit, so now it's possible to return
654       different evaluation data, such as number of cameras and
655       points being minimized and also jacobian.
656     
657       Jacobian currently contains only camera and points columns,
658       no intrinsics there yet. It is also currently converting to
659       an Eigen dense matrix. A bit weak, but speed is nice for
660       tests.
661     
662       Columns in jacobian are ordered in the following way:
663       first columns are cameras (3 cols for rotation and 3 cols
664       for translation), then goes 3D point columns.
665     
666     - Switched F and H refining to normalized space. Apparently,
667       refining F in pixel space squeezes it a lot making it wrong.
668     
669     - EuclideanIntersect will not add point to reconstruction if
670       it happened to be behind the camera.
671     
672     - Cleaned style a bit.