[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45623] branches/soc-2011-tomato/extern/ libmv: libmv: bundle new upstream version of libmv from own branch
Sergey Sharybin
sergey.vfx at gmail.com
Sat Apr 14 14:02:40 CEST 2012
Revision: 45623
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45623
Author: nazgul
Date: 2012-04-14 12:02:39 +0000 (Sat, 14 Apr 2012)
Log Message:
-----------
libmv: bundle new upstream version of libmv from own branch
Added modal solver module which is needed for tripod solving.
For details of this solver read changelog of libmv.
Modified Paths:
--------------
branches/soc-2011-tomato/extern/libmv/CMakeLists.txt
branches/soc-2011-tomato/extern/libmv/ChangeLog
branches/soc-2011-tomato/extern/libmv/files.txt
branches/soc-2011-tomato/extern/libmv/third_party/ssba/README.libmv
Added Paths:
-----------
branches/soc-2011-tomato/extern/libmv/libmv/simple_pipeline/modal_solver.cc
branches/soc-2011-tomato/extern/libmv/libmv/simple_pipeline/modal_solver.h
Property Changed:
----------------
branches/soc-2011-tomato/extern/libmv/third_party/ssba/README.libmv
Modified: branches/soc-2011-tomato/extern/libmv/CMakeLists.txt
===================================================================
--- branches/soc-2011-tomato/extern/libmv/CMakeLists.txt 2012-04-14 11:58:52 UTC (rev 45622)
+++ branches/soc-2011-tomato/extern/libmv/CMakeLists.txt 2012-04-14 12:02:39 UTC (rev 45623)
@@ -69,6 +69,7 @@
libmv/simple_pipeline/detect.cc
libmv/simple_pipeline/initialize_reconstruction.cc
libmv/simple_pipeline/intersect.cc
+ libmv/simple_pipeline/modal_solver.cc
libmv/simple_pipeline/pipeline.cc
libmv/simple_pipeline/reconstruction.cc
libmv/simple_pipeline/resect.cc
@@ -126,6 +127,7 @@
libmv/simple_pipeline/detect.h
libmv/simple_pipeline/initialize_reconstruction.h
libmv/simple_pipeline/intersect.h
+ libmv/simple_pipeline/modal_solver.h
libmv/simple_pipeline/pipeline.h
libmv/simple_pipeline/reconstruction.h
libmv/simple_pipeline/resect.h
Modified: branches/soc-2011-tomato/extern/libmv/ChangeLog
===================================================================
--- branches/soc-2011-tomato/extern/libmv/ChangeLog 2012-04-14 11:58:52 UTC (rev 45622)
+++ branches/soc-2011-tomato/extern/libmv/ChangeLog 2012-04-14 12:02:39 UTC (rev 45623)
@@ -1,3 +1,16 @@
+commit a44312a7beb2963b8e3bf8015c516d2eff40cc3d
+Author: Sergey Sharybin <sergey.vfx at gmail.com>
+Date: Thu Apr 12 13:56:02 2012 +0600
+
+ Added solver for modal camera motion, currently supports only tripod solving
+
+ This solver is intended to deal with such camera motions as tripod and panning,
+ where it's impossible to reconstruct exact position of markers in 3d view.
+
+ It projects markers onto sphere and uses rigid registration of rotation to
+ find rotation angles which makes bundles from previous and current frame be
+ as closest as it's possible.
+
commit fa3842e472e3b9c789e47bf6d8f592aa40a84f16
Author: Sergey Sharybin <sergey.vfx at gmail.com>
Date: Thu Apr 12 12:32:48 2012 +0600
@@ -520,9 +533,3 @@
Date: Fri Aug 19 16:04:37 2011 +0200
MSVC compatibility: heap allocate pattern, explicit float cast.
-
-commit 702658d2f8616964a6eeb3743fd85e97ac7ff09d
-Author: Matthias Fauconneau <matthias.fauconneau at gmail.com>
-Date: Fri Aug 19 14:59:24 2011 +0200
-
- Expose regularization parameters (areaPenalty and conditionPenalty) in API.
Modified: branches/soc-2011-tomato/extern/libmv/files.txt
===================================================================
--- branches/soc-2011-tomato/extern/libmv/files.txt 2012-04-14 11:58:52 UTC (rev 45622)
+++ branches/soc-2011-tomato/extern/libmv/files.txt 2012-04-14 12:02:39 UTC (rev 45623)
@@ -42,6 +42,8 @@
libmv/simple_pipeline/initialize_reconstruction.h
libmv/simple_pipeline/intersect.cc
libmv/simple_pipeline/intersect.h
+libmv/simple_pipeline/modal_solver.cc
+libmv/simple_pipeline/modal_solver.h
libmv/simple_pipeline/pipeline.cc
libmv/simple_pipeline/pipeline.h
libmv/simple_pipeline/reconstruction.cc
Added: branches/soc-2011-tomato/extern/libmv/libmv/simple_pipeline/modal_solver.cc
===================================================================
--- branches/soc-2011-tomato/extern/libmv/libmv/simple_pipeline/modal_solver.cc (rev 0)
+++ branches/soc-2011-tomato/extern/libmv/libmv/simple_pipeline/modal_solver.cc 2012-04-14 12:02:39 UTC (rev 45623)
@@ -0,0 +1,130 @@
+// Copyright (c) 2012 libmv authors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to
+// deal in the Software without restriction, including without limitation the
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+// sell copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+// IN THE SOFTWARE.
+
+#include <cstdio>
+
+#include "libmv/logging/logging.h"
+#include "libmv/simple_pipeline/modal_solver.h"
+#include "libmv/simple_pipeline/rigid_registration.h"
+
+#ifdef _MSC_VER
+# define snprintf _snprintf
+#endif
+
+namespace libmv {
+
+static void ProjectMarkerOnSphere(Marker &marker, Vec3 &X) {
+ X(0) = marker.x;
+ X(1) = marker.y;
+ X(2) = 1.0;
+
+ X *= 5.0 / X.norm();
+}
+
+static void ModalSolverLogProress(ProgressUpdateCallback *update_callback,
+ double progress)
+{
+ if (update_callback) {
+ char message[256];
+
+ snprintf(message, sizeof(message), "Solving progress %d%%", (int)(progress * 100));
+
+ update_callback->invoke(progress, message);
+ }
+}
+
+void ModalSolver(Tracks &tracks,
+ EuclideanReconstruction *reconstruction,
+ ProgressUpdateCallback *update_callback) {
+ int max_image = tracks.MaxImage();
+ int max_track = tracks.MaxTrack();
+
+ LG << "Max image: " << max_image;
+ LG << "Max track: " << max_track;
+
+ Mat3 R = Mat3::Identity();
+
+ for (int image = 0; image <= max_image; ++image) {
+ vector<Marker> all_markers = tracks.MarkersInImage(image);
+
+ ModalSolverLogProress(update_callback, (float) image / max_image);
+
+ // Skip empty frames without doing anything
+ if (all_markers.size() == 0) {
+ LG << "Skipping frame: " << image;
+ continue;
+ }
+
+ vector<Vec3> points, reference_points;
+
+ // Cnstruct pairs of markers from current and previous image,
+ // to reproject them and find rigid transformation between
+ // previous and current image
+ for (int track = 0; track <= max_track; ++track) {
+ EuclideanPoint *point = reconstruction->PointForTrack(track);
+
+ if (point) {
+ Marker marker = tracks.MarkerInImageForTrack(image, track);
+
+ if (marker.image == image) {
+ Vec3 X;
+
+ LG << "Use track " << track << " for rigid registration between image " <<
+ image - 1 << " and " << image;
+
+ ProjectMarkerOnSphere(marker, X);
+
+ points.push_back(R * point->X);
+ reference_points.push_back(X);
+ }
+ }
+ }
+
+ if (points.size()) {
+ Mat3 dR = Mat3::Identity();
+
+ // Find rigid delta transformation from previous image to current image
+ RigidRegistration(reference_points, points, dR);
+
+ R *= dR;
+ }
+
+ reconstruction->InsertCamera(image, R, Vec3::Zero());
+
+ // Review if there's new tracks for which position might be reconstructed
+ for (int track = 0; track <= max_track; ++track) {
+ if (!reconstruction->PointForTrack(track)) {
+ Marker marker = tracks.MarkerInImageForTrack(image, track);
+
+ if (marker.image == image) {
+ // New track appeared on this image, project it's position onto sphere
+
+ LG << "Projecting track " << track << " at image " << image;
+
+ Vec3 X;
+ ProjectMarkerOnSphere(marker, X);
+ reconstruction->InsertPoint(track, R.inverse() * X);
+ }
+ }
+ }
+ }
+}
+
+} // namespace libmv
Added: branches/soc-2011-tomato/extern/libmv/libmv/simple_pipeline/modal_solver.h
===================================================================
--- branches/soc-2011-tomato/extern/libmv/libmv/simple_pipeline/modal_solver.h (rev 0)
+++ branches/soc-2011-tomato/extern/libmv/libmv/simple_pipeline/modal_solver.h 2012-04-14 12:02:39 UTC (rev 45623)
@@ -0,0 +1,48 @@
+// Copyright (c) 2012 libmv authors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to
+// deal in the Software without restriction, including without limitation the
+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+// sell copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+// IN THE SOFTWARE.
+
+#ifndef LIBMV_SIMPLE_PIPELINE_MODAL_SOLVER_H_
+#define LIBMV_SIMPLE_PIPELINE_MODAL_SOLVER_H_
+
+#include "libmv/simple_pipeline/tracks.h"
+#include "libmv/simple_pipeline/reconstruction.h"
+#include "libmv/simple_pipeline/callbacks.h"
+
+namespace libmv {
+
+/*!
+ This solver solves such camera motion as tripod rotation, reconstructing
+ only camera motion itself. Bundles are not reconstructing properly, they're
+ just getting projected onto sphere.
+
+ Markers from tracks object would be used for recosntruction, and algorithm
+ assumes thir's positions are undistorted already and they're in nnormalized
+ space.
+
+ Reconstructed cameras and projected bundles would be added to reconstruction
+ object.
+*/
+void ModalSolver(Tracks &tracks,
+ EuclideanReconstruction *reconstruction,
+ ProgressUpdateCallback *update_callback = NULL);
+
+} // namespace libmv
+
+#endif // LIBMV_SIMPLE_PIPELINE_MODAL_SOLVER_H_
Property changes on: branches/soc-2011-tomato/extern/libmv/third_party/ssba/README.libmv
___________________________________________________________________
Deleted: svn:executable
- *
More information about the Bf-blender-cvs
mailing list