[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