Camera tracking: synchronize changes with own branch
Should be no functional changes.
This commit is contained in:
4
extern/libmv/CMakeLists.txt
vendored
4
extern/libmv/CMakeLists.txt
vendored
@@ -47,9 +47,9 @@ set(SRC
|
||||
libmv/multiview/conditioning.cc
|
||||
libmv/multiview/euclidean_resection.cc
|
||||
libmv/multiview/fundamental.cc
|
||||
libmv/multiview/homography.cc
|
||||
libmv/multiview/projection.cc
|
||||
libmv/multiview/triangulation.cc
|
||||
libmv/multiview/homography.cc
|
||||
libmv/numeric/numeric.cc
|
||||
libmv/numeric/poly.cc
|
||||
libmv/simple_pipeline/bundle.cc
|
||||
@@ -71,8 +71,8 @@ set(SRC
|
||||
libmv/tracking/lmicklt_region_tracker.cc
|
||||
libmv/tracking/pyramid_region_tracker.cc
|
||||
libmv/tracking/retrack_region_tracker.cc
|
||||
libmv/tracking/trklt_region_tracker.cc
|
||||
libmv/tracking/track_region.cc
|
||||
libmv/tracking/trklt_region_tracker.cc
|
||||
|
||||
third_party/fast/fast_10.c
|
||||
third_party/fast/fast_11.c
|
||||
|
||||
800
extern/libmv/ChangeLog
vendored
800
extern/libmv/ChangeLog
vendored
@@ -1,3 +1,487 @@
|
||||
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
|
||||
@@ -238,319 +722,3 @@ Date: Fri Feb 17 20:08:01 2012 +0600
|
||||
SAD tracker now can deal with pattern size any size,
|
||||
Very quick implementation came from Blender before Hybrid tracker was added.
|
||||
Better to be replaced with brute tracker.
|
||||
|
||||
commit d547c9cfe37d5d3397d33c8b0e58471e1e1c1634
|
||||
Author: Sergey Sharybin <sergey.vfx@gmail.com>
|
||||
Date: Fri Feb 17 20:03:52 2012 +0600
|
||||
|
||||
Just convert end of lines to unix style.
|
||||
|
||||
commit eb73ddbaec5b9e1ad30331bbf858a6ebc266c4aa
|
||||
Author: Sergey Sharybin <sergey.vfx@gmail.com>
|
||||
Date: Fri Feb 17 20:02:20 2012 +0600
|
||||
|
||||
Made some function static. Resolves possible linking issues when building with MinGW.
|
||||
|
||||
commit 2930681fafd86e4f4a958054b1db8bfff29623d1
|
||||
Author: Sergey Sharybin <sergey.vfx@gmail.com>
|
||||
Date: Fri Feb 17 19:59:45 2012 +0600
|
||||
|
||||
Missed this in commit with improvements in camera intrinsics.
|
||||
|
||||
commit 8d31bc767019b05c5bf8c9f309f9545b3428afa1
|
||||
Author: Sergey Sharybin <sergey.vfx@gmail.com>
|
||||
Date: Fri Feb 17 19:57:51 2012 +0600
|
||||
|
||||
Another step of syncing codebase with Blender.
|
||||
Mainly fixes for freebsd/osx compilation and aligned memory allocation.
|
||||
|
||||
commit 3214a2df5bfd98021f25d0f1a626a86318bb245f
|
||||
Author: Sergey Sharybin <sergey.vfx@gmail.com>
|
||||
Date: Fri Feb 17 19:48:02 2012 +0600
|
||||
|
||||
Support compilation on FreeBSD platform
|
||||
|
||||
commit 0e5abe96f543687ccfb3a923ec639cb8f45d54f8
|
||||
Author: Sergey Sharybin <sergey.vfx@gmail.com>
|
||||
Date: Fri Feb 17 19:44:18 2012 +0600
|
||||
|
||||
Implementation of basic system for progress reporting into callee stuff
|
||||
|
||||
Implemented by using simple callbacks classes which are getting invoked from
|
||||
places where lots of calculation happens, so applications which are using
|
||||
libmv may display nice progress bar.
|
||||
|
||||
commit c5e18fe35464618055e0e9761be8d22fae56db49
|
||||
Author: Keir Mierle <mierle@gmail.com>
|
||||
Date: Fri Feb 17 19:25:45 2012 +0600
|
||||
|
||||
Add support for detecting tracking failure in the ESM tracker component of
|
||||
libmv. Since both KLT and Hybrid rely on ESM underneath, KLT and Hybrid now
|
||||
have a minimum correlation setting to match. With this fix, track failures
|
||||
should get detected quicker, with the issue that sometimes the tracker will
|
||||
give up too easily. That is fixable by reducing the required correlation (in
|
||||
the track properties).
|
||||
|
||||
commit ea0fed736ecdcc8c020227aeef8ef4cd3be5e63d
|
||||
Author: Keir Mierle <mierle@gmail.com>
|
||||
Date: Fri Feb 17 19:23:50 2012 +0600
|
||||
|
||||
Add a new hybrid region tracker for motion tracking to libmv, and
|
||||
add it as an option (under "Hybrid") in the tracking settings. The
|
||||
region tracker is a combination of brute force tracking for coarse
|
||||
alignment, then refinement with the ESM/KLT algorithm already in
|
||||
libmv that gives excellent subpixel precision (typically 1/50'th
|
||||
of a pixel)
|
||||
|
||||
This also adds a new "brute force" region tracker which does a
|
||||
brute force search through every pixel position in the destination
|
||||
for the pattern in the first frame. It leverages SSE if available,
|
||||
similar to the SAD tracker, to do this quickly. Currently it does
|
||||
some unnecessary conversions to/from floating point that will get
|
||||
fixed later.
|
||||
|
||||
The hybrid tracker glues the two trackers (brute & ESM) together
|
||||
to get an overall better tracker. The algorithm is simple:
|
||||
|
||||
1. Track from frame 1 to frame 2 with the brute force tracker.
|
||||
This tries every possible pixel position for the pattern from
|
||||
frame 1 in frame 2. The position with the smallest
|
||||
sum-of-absolute-differences is chosen. By definition, this
|
||||
position is only accurate up to 1 pixel or so.
|
||||
2. Using the result from 1, initialize a track with ESM. This does
|
||||
a least-squares fit with subpixel precision.
|
||||
3. If the ESM shift was more than 2 pixels, report failure.
|
||||
4. If the ESM track shifted less than 2 pixels, then the track is
|
||||
good and we're done. The rationale here is that if the
|
||||
refinement stage shifts more than 1 pixel, then the brute force
|
||||
result likely found some random position that's not a good fit.
|
||||
|
||||
commit a07fff8431621c01d81ae52595d8dd91a295a776
|
||||
Author: Keir Mierle <mierle@gmail.com>
|
||||
Date: Fri Feb 17 19:19:58 2012 +0600
|
||||
|
||||
Assorted camera tracker improvements
|
||||
|
||||
- Add support for refining the camera's intrinsic parameters
|
||||
during a solve. Currently, refining supports only the following
|
||||
combinations of intrinsic parameters:
|
||||
|
||||
f
|
||||
f, cx, cy
|
||||
f, cx, cy, k1, k2
|
||||
f, k1
|
||||
f, k1, k2
|
||||
|
||||
This is not the same as autocalibration, since the user must
|
||||
still make a reasonable initial guess about the focal length and
|
||||
other parameters, whereas true autocalibration would eliminate
|
||||
the need for the user specify intrinsic parameters at all.
|
||||
|
||||
However, the solver works well with only rough guesses for the
|
||||
focal length, so perhaps full autocalibation is not that
|
||||
important.
|
||||
|
||||
Adding support for the last two combinations, (f, k1) and (f,
|
||||
k1, k2) required changes to the library libmv depends on for
|
||||
bundle adjustment, SSBA. These changes should get ported
|
||||
upstream not just to libmv but to SSBA as well.
|
||||
|
||||
- Improved the region of convergence for bundle adjustment by
|
||||
increasing the number of Levenberg-Marquardt iterations from 50
|
||||
to 500. This way, the solver is able to crawl out of the bad
|
||||
local minima it gets stuck in when changing from, for example,
|
||||
bundling k1 and k2 to just k1 and resetting k2 to 0.
|
||||
|
||||
- Add several new region tracker implementations. A region tracker
|
||||
is a libmv concept, which refers to tracking a template image
|
||||
pattern through frames. The impact to end users is that tracking
|
||||
should "just work better". I am reserving a more detailed
|
||||
writeup, and maybe a paper, for later.
|
||||
|
||||
- Other libmv tweaks, such as detecting that a tracker is headed
|
||||
outside of the image bounds.
|
||||
|
||||
This includes several changes made directly to the libmv extern
|
||||
code rather expecting to get those changes through normal libmv
|
||||
channels, because I, the libmv BDFL, decided it was faster to work
|
||||
on libmv directly in Blender, then later reverse-port the libmv
|
||||
changes from Blender back into libmv trunk. The interesting part
|
||||
is that I added a full Levenberg-Marquardt loop to the region
|
||||
tracking code, which should lead to a more stable solutions. I
|
||||
also added a hacky implementation of "Efficient Second-Order
|
||||
Minimization" for tracking, which works nicely. A more detailed
|
||||
quantitative evaluation will follow.
|
||||
|
||||
commit 0bf66c009d5022eacfc473d247884a73ffeefa8f
|
||||
Author: Sergey Sharybin <sergey.vfx@gmail.com>
|
||||
Date: Fri Feb 17 19:13:49 2012 +0600
|
||||
|
||||
Rest of compilation fix with FAST library.
|
||||
|
||||
commit 71b578ca2ba34c528363c514cd1fcc85791d01f3
|
||||
Author: Keir Mierle <mierle@gmail.com>
|
||||
Date: Fri Feb 17 19:00:28 2012 +0600
|
||||
|
||||
Improve the KLT tracking behaviour and UI
|
||||
|
||||
- Remove the overly-conservative use of libmv's re-track tracker. The re-track
|
||||
tracker would take a normal tracker such as TRKLT or KLT or pyramid KLT, and
|
||||
track from frame 1 to 2, then back from the position found in 2 back to 1.
|
||||
Then, when the reverse-track doesn't match the original track with high
|
||||
precision, the track is considered "failed". This is a good approach for
|
||||
fully automatic reconstruction, but is too conservative for supervised
|
||||
tracking.
|
||||
|
||||
The retrack-tracker will return when fully automatic tracking is added.
|
||||
|
||||
- Always solve for (dx, dy) in the TRKLT loop even if the linear system is
|
||||
ill-conditioned. The client (Blender in this case) can still use the solved
|
||||
position, even though it is less reliable.
|
||||
|
||||
commit 7d8a8762f2bc2e36f95b0b6f4fb4ca996f9f0db7
|
||||
Author: Sergey Sharybin <sergey.vfx@gmail.com>
|
||||
Date: Fri Feb 17 18:46:24 2012 +0600
|
||||
|
||||
Changes in camera intrinsics distortion/undistortion:
|
||||
|
||||
- Distortion/undistortion of scaled images wasn't happening right,
|
||||
because camera intrinsics are calibrated on an original frame which
|
||||
has got some particular resolution and trying to apply this model on
|
||||
an image with another resolution gives totally wrong result.
|
||||
This is needed to be able to do post-prccessing of render, running
|
||||
distortion on a scene which might be rendered with higher resolution
|
||||
than footage itself and then be scaled down.
|
||||
- Fixed incorrect calculation/applying of precomputed grid when
|
||||
distortion is high high enough and produces pixel offset higher
|
||||
than 127 pixels. This might be still not very distorted image,
|
||||
but if it's a 4K footage "normal" camera will easily give such
|
||||
a distortion.
|
||||
- Added support of overscan distortion/undistortion.
|
||||
|
||||
commit ed080785d63bb8e3a13dde51a2dc94fe59b059bb
|
||||
Author: Sergey Sharybin <sergey.vfx@gmail.com>
|
||||
Date: Fri Feb 17 18:38:51 2012 +0600
|
||||
|
||||
Fast headers now can be included from C++ sources.
|
||||
Was needed to make it working fine when bundling in Blender but might also
|
||||
be needed to bundle into another applications.
|
||||
|
||||
commit 5f5a7aa46a2d87b96c8098dfc8682f4d01b5cd40
|
||||
Author: Sergey Sharybin <sergey.vfx@gmail.com>
|
||||
Date: Fri Feb 17 18:36:16 2012 +0600
|
||||
|
||||
Bring back FAST detector which seems to be working much nicer than Morravec.
|
||||
Both of them are available in API.
|
||||
|
||||
commit 2cab13c18216fb684b270cec077f7300262584af
|
||||
Author: Sergey Sharybin <sergey.vfx@gmail.com>
|
||||
Date: Fri Feb 17 18:27:36 2012 +0600
|
||||
|
||||
Revert "Make CameraIntrinsics (and thus Qt tracker) compilable without linking libmv."
|
||||
|
||||
This reverts commit 81613ee0cc94b315f333c9632b18b95d426aad05.
|
||||
|
||||
That commit made inverting intrinsics totally unworkable, so reverted this and
|
||||
made needed tweaks to qt-tracker project file to make it compilable (was needed
|
||||
to make it linking together with glog).
|
||||
|
||||
Conflicts:
|
||||
|
||||
src/ui/tracker/tracker.cc
|
||||
src/ui/tracker/tracker.pro
|
||||
|
||||
commit ec46cae041401b17afb4fe4d9c9343d10797090f
|
||||
Author: Sergey Sharybin <sergey.vfx@gmail.com>
|
||||
Date: Fri Feb 17 17:59:55 2012 +0600
|
||||
|
||||
Fix compilation error using official MinGW
|
||||
|
||||
commit 6fbc370e922c47cfa35381662b6c439f4891ed74
|
||||
Author: Sergey Sharybin <sergey.vfx@gmail.com>
|
||||
Date: Fri Feb 17 17:38:20 2012 +0600
|
||||
|
||||
Fix compilation error with MSVC 2010 which is more picky for "missed" STL headers
|
||||
|
||||
commit be9e6b63691d83b551a085f0766878bd84220767
|
||||
Author: Sergey Sharybin <sergey.vfx@gmail.com>
|
||||
Date: Fri Feb 17 17:36:18 2012 +0600
|
||||
|
||||
Fix compilation with MSVC where snprintf function is declared as unsafe and _snprintf should be used instead.
|
||||
|
||||
Better to switch to own implementation will ensure string is correctly NULL-terminated.
|
||||
|
||||
commit 1847d9e414ed763cd80668775d7d9f79575fc8ca
|
||||
Author: Sergey Sharybin <sergey.vfx@gmail.com>
|
||||
Date: Fri Feb 17 17:34:45 2012 +0600
|
||||
|
||||
Fix compilation error on OSX caused by incorrect access to ucontext
|
||||
|
||||
commit 90579b6ffad07672172a1c240499615b30b25549
|
||||
Merge: b9aac30 531c79b
|
||||
Author: Sergey Sharybin <sergey.vfx@gmail.com>
|
||||
Date: Fri Feb 17 18:32:52 2012 +0600
|
||||
|
||||
Merge remote-tracking branch 'Matthias-Fauconneau/master' into devel
|
||||
|
||||
Conflicts:
|
||||
src/libmv/tracking/CMakeLists.txt
|
||||
|
||||
commit b9aac30a9ca6bc8362c09a0e191040964f7c6de2
|
||||
Merge: 198894e 6969e1a
|
||||
Author: Keir Mierle <mierle@gmail.com>
|
||||
Date: Sat Nov 5 17:38:30 2011 -0700
|
||||
|
||||
Merge pull request #3 from nathanwiegand/master
|
||||
|
||||
Just a few tiny cleanups
|
||||
|
||||
commit 6969e1a9534291a982749baa5a3672c97bfa506d
|
||||
Author: Nathan Wiegand <nathanwiegand@gmail.com>
|
||||
Date: Sat Nov 5 14:26:54 2011 -0700
|
||||
|
||||
I've added cleaned up a few style issues here an there. Also, I've updated the CMakeLists.txt file so that it can build the image_io library. Note, it's only been tested on OSX 10.6
|
||||
|
||||
commit 4763f851299050140757bfaa069107a0cf639e56
|
||||
Author: Nathan Wiegand <nathanwiegand@gmail.com>
|
||||
Date: Fri Nov 4 23:59:08 2011 -0700
|
||||
|
||||
Removed a superfulous comment
|
||||
|
||||
commit a44577c0162e273681e4a9a3cc5f5b37d4315b67
|
||||
Author: Nathan Wiegand <nathanwiegand@gmail.com>
|
||||
Date: Fri Nov 4 23:55:52 2011 -0700
|
||||
|
||||
Removed a duplicate entry for an author.
|
||||
|
||||
commit 198894e4c4f51c2c1784ad7c02eb45d2d1ada9bc
|
||||
Merge: c4c67db 6e797d6
|
||||
Author: Keir Mierle <mierle@gmail.com>
|
||||
Date: Fri Nov 4 21:47:05 2011 -0700
|
||||
|
||||
Merge pull request #2 from nathanwiegand/master
|
||||
|
||||
CMake changes for OSX
|
||||
|
||||
commit 6e797d678c4c19f6a9e21657d66183f412cc995b
|
||||
Author: Nathan Wiegand <nathanwiegand@gmail.com>
|
||||
Date: Fri Nov 4 21:43:28 2011 -0700
|
||||
|
||||
Uncomment the GUI part of the CMake file
|
||||
|
||||
commit 33ef88a33860345d8906f3c9dd22d8dbce3df53e
|
||||
Author: Nathan Wiegand <nathanwiegand@gmail.com>
|
||||
Date: Fri Nov 4 21:31:22 2011 -0700
|
||||
|
||||
Fixed build error on OSX by adding 'glog' to the dependencies in the tracker CMake
|
||||
|
||||
commit 531c79bf95fddaaa70707d1abcd4fdafda16bbf0
|
||||
Author: Matthias Fauconneau <matthias.fauconneau@gmail.com>
|
||||
Date: Sat Aug 20 00:00:42 2011 +0200
|
||||
|
||||
Display warped pattern in marker preview.
|
||||
|
||||
commit bb5c27e671b6f8eb56ddf490f0795d59bede591b
|
||||
Author: Matthias Fauconneau <matthias.fauconneau@gmail.com>
|
||||
Date: Fri Aug 19 18:37:48 2011 +0200
|
||||
|
||||
Fix CMake build.
|
||||
|
||||
13
extern/libmv/bundle.sh
vendored
13
extern/libmv/bundle.sh
vendored
@@ -136,19 +136,6 @@ set(INC_SYS
|
||||
\${ZLIB_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
|
||||
# XXX - FIXME
|
||||
# this is a momentary hack to find unwind.h in 10.6.sdk
|
||||
if(APPLE)
|
||||
if(\${CMAKE_OSX_DEPLOYMENT_TARGET} STREQUAL "10.6")
|
||||
list(APPEND INC_SYS
|
||||
\${CMAKE_OSX_SYSROOT}/Developer/usr/llvm-gcc-4.2/lib/gcc/i686-apple-darwin10/4.2.1/include
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
# XXX - END
|
||||
|
||||
|
||||
set(SRC
|
||||
libmv-capi.cpp
|
||||
${sources}
|
||||
|
||||
5
extern/libmv/files.txt
vendored
5
extern/libmv/files.txt
vendored
@@ -17,6 +17,9 @@ libmv/multiview/euclidean_resection.cc
|
||||
libmv/multiview/euclidean_resection.h
|
||||
libmv/multiview/fundamental.cc
|
||||
libmv/multiview/fundamental.h
|
||||
libmv/multiview/homography.cc
|
||||
libmv/multiview/homography.h
|
||||
libmv/multiview/homography_parameterization.h
|
||||
libmv/multiview/nviewtriangulation.h
|
||||
libmv/multiview/projection.cc
|
||||
libmv/multiview/projection.h
|
||||
@@ -69,6 +72,8 @@ libmv/tracking/pyramid_region_tracker.h
|
||||
libmv/tracking/region_tracker.h
|
||||
libmv/tracking/retrack_region_tracker.cc
|
||||
libmv/tracking/retrack_region_tracker.h
|
||||
libmv/tracking/track_region.cc
|
||||
libmv/tracking/track_region.h
|
||||
libmv/tracking/trklt_region_tracker.cc
|
||||
libmv/tracking/trklt_region_tracker.h
|
||||
third_party/fast/fast_10.c
|
||||
|
||||
4
extern/libmv/libmv/multiview/fundamental.cc
vendored
4
extern/libmv/libmv/multiview/fundamental.cc
vendored
@@ -254,8 +254,8 @@ double SymmetricEpipolarDistance(const Mat &F, const Vec2 &x1, const Vec2 &x2) {
|
||||
Vec3 Ft_y = F.transpose() * y;
|
||||
double y_F_x = y.dot(F_x);
|
||||
|
||||
return Square(y_F_x) * ( 1 / F_x.head<2>().squaredNorm()
|
||||
+ 1 / Ft_y.head<2>().squaredNorm());
|
||||
return y_F_x * ( 1 / F_x.head<2>().norm()
|
||||
+ 1 / Ft_y.head<2>().norm());
|
||||
}
|
||||
|
||||
// HZ 9.6 pag 257 (formula 9.12)
|
||||
|
||||
@@ -31,22 +31,6 @@
|
||||
namespace libmv {
|
||||
namespace {
|
||||
|
||||
void CoordinatesForMarkersInImage(const vector<Marker> &markers,
|
||||
int image,
|
||||
Mat *coordinates) {
|
||||
vector<Vec2> coords;
|
||||
for (int i = 0; i < markers.size(); ++i) {
|
||||
const Marker &marker = markers[i];
|
||||
if (markers[i].image == image) {
|
||||
coords.push_back(Vec2(marker.x, marker.y));
|
||||
}
|
||||
}
|
||||
coordinates->resize(2, coords.size());
|
||||
for (int i = 0; i < coords.size(); i++) {
|
||||
coordinates->col(i) = coords[i];
|
||||
}
|
||||
}
|
||||
|
||||
void GetImagesInMarkers(const vector<Marker> &markers,
|
||||
int *image1, int *image2) {
|
||||
if (markers.size() < 2) {
|
||||
|
||||
26
extern/libmv/libmv/simple_pipeline/tracks.cc
vendored
26
extern/libmv/libmv/simple_pipeline/tracks.cc
vendored
@@ -72,6 +72,16 @@ vector<Marker> Tracks::MarkersForTrack(int track) const {
|
||||
return markers;
|
||||
}
|
||||
|
||||
vector<Marker> Tracks::MarkersInBothImages(int image1, int image2) const {
|
||||
vector<Marker> markers;
|
||||
for (int i = 0; i < markers_.size(); ++i) {
|
||||
int image = markers_[i].image;
|
||||
if (image == image1 || image == image2)
|
||||
markers.push_back(markers_[i]);
|
||||
}
|
||||
return markers;
|
||||
}
|
||||
|
||||
vector<Marker> Tracks::MarkersForTracksInBothImages(int image1, int image2) const {
|
||||
std::vector<int> image1_tracks;
|
||||
std::vector<int> image2_tracks;
|
||||
@@ -156,4 +166,20 @@ int Tracks::NumMarkers() const {
|
||||
return markers_.size();
|
||||
}
|
||||
|
||||
void CoordinatesForMarkersInImage(const vector<Marker> &markers,
|
||||
int image,
|
||||
Mat *coordinates) {
|
||||
vector<Vec2> coords;
|
||||
for (int i = 0; i < markers.size(); ++i) {
|
||||
const Marker &marker = markers[i];
|
||||
if (markers[i].image == image) {
|
||||
coords.push_back(Vec2(marker.x, marker.y));
|
||||
}
|
||||
}
|
||||
coordinates->resize(2, coords.size());
|
||||
for (int i = 0; i < coords.size(); i++) {
|
||||
coordinates->col(i) = coords[i];
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace libmv
|
||||
|
||||
8
extern/libmv/libmv/simple_pipeline/tracks.h
vendored
8
extern/libmv/libmv/simple_pipeline/tracks.h
vendored
@@ -22,6 +22,7 @@
|
||||
#define LIBMV_SIMPLE_PIPELINE_TRACKS_H_
|
||||
|
||||
#include "libmv/base/vector.h"
|
||||
#include "libmv/numeric/numeric.h"
|
||||
|
||||
namespace libmv {
|
||||
|
||||
@@ -84,6 +85,9 @@ class Tracks {
|
||||
/// Returns all the markers visible in \a image.
|
||||
vector<Marker> MarkersInImage(int image) const;
|
||||
|
||||
/// Returns all the markers visible in \a image1 and \a image2.
|
||||
vector<Marker> MarkersInBothImages(int image1, int image2) const;
|
||||
|
||||
/*!
|
||||
Returns the markers in \a image1 and \a image2 which have a common track.
|
||||
|
||||
@@ -114,6 +118,10 @@ class Tracks {
|
||||
vector<Marker> markers_;
|
||||
};
|
||||
|
||||
void CoordinatesForMarkersInImage(const vector<Marker> &markers,
|
||||
int image,
|
||||
Mat *coordinates);
|
||||
|
||||
} // namespace libmv
|
||||
|
||||
#endif // LIBMV_SIMPLE_PIPELINE_MARKERS_H_
|
||||
|
||||
2
extern/libmv/third_party/gflags/README.libmv
vendored
2
extern/libmv/third_party/gflags/README.libmv
vendored
@@ -11,4 +11,6 @@ Local modifications:
|
||||
- Added a poor-man's version of upstream's port.cc/h to make gflags compile on
|
||||
windows. This isn't sufficient but is a stopgap for now.
|
||||
|
||||
- Added -fPIC flag, so shared libraries from Ceres could be linked against static glog
|
||||
|
||||
TODO(keir): Import and use gflags for Windows from upstream.
|
||||
|
||||
1
extern/libmv/third_party/glog/README.libmv
vendored
1
extern/libmv/third_party/glog/README.libmv
vendored
@@ -22,3 +22,4 @@ Upgrading Notes
|
||||
* Do not define va_copy for MinGW platforms (it's already defined there).
|
||||
* Patch localtime_r to be working fine with MinGW, disable strerror_r for MinGW because
|
||||
of lack of needed functions.
|
||||
* Added -fPIC flag, so shared libraries from Ceres could be linked against static glog
|
||||
|
||||
Reference in New Issue
Block a user