[Bf-blender-cvs] [71bac14] soc-2016-multiview: bundle in progress

Tianwei Shen noreply at git.blender.org
Tue Jun 21 04:14:39 CEST 2016


Commit: 71bac14ca4a809965f0951a39e7c67af6a0b4671
Author: Tianwei Shen
Date:   Mon Jun 20 23:49:14 2016 +0800
Branches: soc-2016-multiview
https://developer.blender.org/rB71bac14ca4a809965f0951a39e7c67af6a0b4671

bundle in progress

===================================================================

M	intern/libmv/intern/reconstructionN.cc
M	intern/libmv/libmv/autotrack/bundle.cc
M	intern/libmv/libmv/autotrack/bundle.h

===================================================================

diff --git a/intern/libmv/intern/reconstructionN.cc b/intern/libmv/intern/reconstructionN.cc
index 8369ff9..1ceeec5 100644
--- a/intern/libmv/intern/reconstructionN.cc
+++ b/intern/libmv/intern/reconstructionN.cc
@@ -183,10 +183,6 @@ libmv_ReconstructionN** libmv_solveMultiviewReconstruction(
 	///* Actual reconstruction. */
 	update_callback.invoke(0, "Initial reconstruction");
 
-	///* TODO(tianwei): chain the tracks and correspondences */
-	Correspondences &correspondences = *((Correspondences*) libmv_correspondences);
-	printf("corrs in the libmv %d\n", correspondences.GetCorrNum());
-
 	// reconstruct two views from the main clip
 	if(!mv::ReconstructTwoFrames(keyframe_markers, 0, *(all_libmv_reconstruction[0]->intrinsics), &reconstruction))
 	{
diff --git a/intern/libmv/libmv/autotrack/bundle.cc b/intern/libmv/libmv/autotrack/bundle.cc
index 2dfe231..35aa3f4 100644
--- a/intern/libmv/libmv/autotrack/bundle.cc
+++ b/intern/libmv/libmv/autotrack/bundle.cc
@@ -242,7 +242,7 @@ void UnpackIntrinsicsFromArray(const double ceres_intrinsics[OFFSET_MAX],
 //// camera at image i.
 //vector<Vec6> PackCamerasRotationAndTranslation(
 //    const Tracks &tracks,
-//    const EuclideanReconstruction &reconstruction) {
+//    const Reconstruction &reconstruction) {
 //  vector<Vec6> all_cameras_R_t;
 //  int max_image = tracks.MaxImage();
 //
@@ -451,36 +451,26 @@ void UnpackIntrinsicsFromArray(const double ceres_intrinsics[OFFSET_MAX],
 
 }  // namespace
 
-//void EuclideanBundle(const Tracks &tracks,
-//                     EuclideanReconstruction *reconstruction) {
-//  PolynomialCameraIntrinsics empty_intrinsics;
-//  EuclideanBundleCommonIntrinsics(tracks,
-//                                  BUNDLE_NO_INTRINSICS,
-//                                  BUNDLE_NO_CONSTRAINTS,
-//                                  reconstruction,
-//                                  &empty_intrinsics,
-//                                  NULL);
-//}
+void EuclideanBundleCommonIntrinsics(
+    const Tracks &tracks,
+    const int bundle_intrinsics,
+    const int bundle_constraints,
+    Reconstruction *reconstruction,
+    CameraIntrinsics *intrinsics,
+    BundleEvaluation *evaluation) {
+  LG << "Original intrinsics: " << *intrinsics;
+  vector<Marker> markers;
+  tracks.GetAllMarkers(&markers);
+
+  // N-th element denotes whether track N is a constant zero-weigthed track.
+  vector<bool> zero_weight_tracks_flags(tracks.MaxTrack() + 1, true);
+
+  // Residual blocks with 10 parameters are unwieldly with Ceres, so pack the
+  // intrinsics into a single block and rely on local parameterizations to
+  // control which intrinsics are allowed to vary.
+  double ceres_intrinsics[OFFSET_MAX];
+  PackIntrinisicsIntoArray(*intrinsics, ceres_intrinsics);
 
-//void EuclideanBundleCommonIntrinsics(
-//    const Tracks &tracks,
-//    const int bundle_intrinsics,
-//    const int bundle_constraints,
-//    EuclideanReconstruction *reconstruction,
-//    CameraIntrinsics *intrinsics,
-//    BundleEvaluation *evaluation) {
-//  LG << "Original intrinsics: " << *intrinsics;
-//  vector<Marker> markers = tracks.AllMarkers();
-//
-//  // N-th element denotes whether track N is a constant zero-weigthed track.
-//  vector<bool> zero_weight_tracks_flags(tracks.MaxTrack() + 1, true);
-//
-//  // Residual blocks with 10 parameters are unwieldly with Ceres, so pack the
-//  // intrinsics into a single block and rely on local parameterizations to
-//  // control which intrinsics are allowed to vary.
-//  double ceres_intrinsics[OFFSET_MAX];
-//  PackIntrinisicsIntoArray(*intrinsics, ceres_intrinsics);
-//
 //  // Convert cameras rotations to angle axis and merge with translation
 //  // into single parameter block for maximal minimization speed.
 //  //
@@ -655,17 +645,17 @@ void UnpackIntrinsicsFromArray(const double ceres_intrinsics[OFFSET_MAX],
 //                              ceres_intrinsics,
 //                              reconstruction);
 //  }
-//}
+}
 
-/**
- * @brief EuclideanBundleAll: bundle all the clips and frames
- * @param all_normalized_tracks: markers from all clips
- * @param reconstruction: Reconstruction data structure
- * @return
- */
-bool EuclideanBundleAll(const Tracks &all_normalized_tracks,
+bool EuclideanBundleAll(const Tracks &tracks,
                         Reconstruction *reconstruction) {
 	libmv::PolynomialCameraIntrinsics empty_intrinsics;
+	EuclideanBundleCommonIntrinsics(tracks,
+	                                BUNDLE_NO_INTRINSICS,
+	                                BUNDLE_NO_CONSTRAINTS,
+	                                reconstruction,
+	                                &empty_intrinsics,
+	                                NULL);
 	return true;
 }
 
diff --git a/intern/libmv/libmv/autotrack/bundle.h b/intern/libmv/libmv/autotrack/bundle.h
index 4bc57a7..4755bea 100644
--- a/intern/libmv/libmv/autotrack/bundle.h
+++ b/intern/libmv/libmv/autotrack/bundle.h
@@ -64,25 +64,6 @@ struct BundleEvaluation {
 	Mat jacobian;
 };
 
-/*! Refine camera poses and 3D coordinates using bundle adjustment.
-
-    This routine adjusts all cameras and points in \a *reconstruction. This
-    assumes a full observation for reconstructed tracks; this implies that if
-    there is a reconstructed 3D point (a bundle) for a track, then all markers
-    for that track will be included in the minimization. \a tracks should
-    contain markers used in the initial reconstruction.
-
-    The cameras and bundles (3D points) are refined in-place.
-
-    \note This assumes an outlier-free set of markers.
-    \note This assumes a calibrated reconstruction, e.g. the markers are
-          already corrected for camera intrinsics and radial distortion.
-
-    \sa EuclideanResect, EuclideanIntersect, EuclideanReconstructTwoFrames
-*/
-void EuclideanBundle(const Tracks &tracks,
-                     EuclideanReconstruction *reconstruction);
-
 /*!
 	Refine camera poses and 3D coordinates using bundle adjustment.
 
@@ -122,16 +103,35 @@ enum BundleConstraints {
 	BUNDLE_NO_CONSTRAINTS = 0,
 	BUNDLE_NO_TRANSLATION = 1,
 };
+
 void EuclideanBundleCommonIntrinsics(
         const Tracks &tracks,
         const int bundle_intrinsics,
         const int bundle_constraints,
-        EuclideanReconstruction *reconstruction,
+        Reconstruction *reconstruction,
         CameraIntrinsics *intrinsics,
         BundleEvaluation *evaluation = NULL);
 
-bool EuclideanBundleAll(const Tracks &all_normalized_tracks,
+/*! Refine all camera poses and 3D coordinates from all clips using bundle adjustment.
+	This is a renewed version for autotrack, adapted from libmv/simple_pipeline
+
+    This routine adjusts all cameras and points in \a *reconstruction. This
+    assumes a full observation for reconstructed tracks; this implies that if
+    there is a reconstructed 3D point (a bundle) for a track, then all markers
+    for that track will be included in the minimization. \a tracks should
+    contain markers used in the initial reconstruction.
+
+    The cameras and bundles (3D points) are refined in-place.
+
+    \note This assumes an outlier-free set of markers.
+    \note This assumes a calibrated reconstruction, e.g. the markers are
+          already corrected for camera intrinsics and radial distortion.
+
+    \sa EuclideanResect, EuclideanIntersect, EuclideanReconstructTwoFrames
+*/
+bool EuclideanBundleAll(const Tracks &tracks,
                         Reconstruction *reconstruction);
+
 bool EuclideanReconstructionComplete(const Tracks &tracks,
                                      Reconstruction *reconstruction,
                                      libmv::ProgressUpdateCallback *update_callback);




More information about the Bf-blender-cvs mailing list