[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58638] branches/soc-2013-motion_track/ extern/libmv/libmv-capi.cc: Refactor bundle refinement in libmv C API
Joseph Mansfield
sftrabbit at gmail.com
Sat Jul 27 01:18:26 CEST 2013
Revision: 58638
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58638
Author: sftrabbit
Date: 2013-07-26 23:18:26 +0000 (Fri, 26 Jul 2013)
Log Message:
-----------
Refactor bundle refinement in libmv C API
Instead of having libmv_solveRefineIntrinsics, which creates bundle options from reconstruction options and passes them to the libmv bundle adjuster, have a simpler function that just creates and returns the options. This brings all of the solving logic into libmv_solve.
Modified Paths:
--------------
branches/soc-2013-motion_track/extern/libmv/libmv-capi.cc
Modified: branches/soc-2013-motion_track/extern/libmv/libmv-capi.cc
===================================================================
--- branches/soc-2013-motion_track/extern/libmv/libmv-capi.cc 2013-07-26 23:13:14 UTC (rev 58637)
+++ branches/soc-2013-motion_track/extern/libmv/libmv-capi.cc 2013-07-26 23:18:26 UTC (rev 58638)
@@ -439,52 +439,6 @@
void *callback_customdata_;
};
-static void libmv_solveRefineIntrinsics(const libmv::Tracks &tracks,
- const libmv_reconstructionOptions &reconstruction_options,
- reconstruct_progress_update_cb progress_update_callback,
- void *callback_customdata,
- libmv::EuclideanReconstruction *reconstruction,
- libmv::CameraIntrinsics *intrinsics)
-{
- /* only a few combinations are supported but trust the caller */
- libmv::BundleOptions bundle_options;
-
- LoggingCallback callback;
- bundle_options.iteration_callback = &callback;
-
- const int motion_flag = reconstruction_options.motion_flag;
- const int refine_intrinsics = reconstruction_options.refine_intrinsics;
-
- if (motion_flag & LIBMV_TRACKING_MOTION_MODAL) {
- bundle_options.constraints |= libmv::BUNDLE_NO_TRANSLATION;
- }
-
- if (refine_intrinsics & LIBMV_REFINE_FOCAL_LENGTH) {
- bundle_options.bundle_intrinsics |= libmv::BUNDLE_FOCAL_LENGTH;
- if (refine_intrinsics & LIBMV_CONSTRAIN_FOCAL_LENGTH) {
- bundle_options.constraints |= libmv::BUNDLE_CONSTRAIN_FOCAL_LENGTH;
- bundle_options.focal_length_min = reconstruction_options.focal_length_min;
- bundle_options.focal_length_max = reconstruction_options.focal_length_max;
- }
- }
- if (refine_intrinsics & LIBMV_REFINE_PRINCIPAL_POINT) {
- bundle_options.bundle_intrinsics |= libmv::BUNDLE_PRINCIPAL_POINT;
- }
- if (refine_intrinsics & LIBMV_REFINE_RADIAL_DISTORTION_K1) {
- bundle_options.bundle_intrinsics |= libmv::BUNDLE_RADIAL_K1;
- }
- if (refine_intrinsics & LIBMV_REFINE_RADIAL_DISTORTION_K2) {
- bundle_options.bundle_intrinsics |= libmv::BUNDLE_RADIAL_K2;
- }
-
- progress_update_callback(callback_customdata, 1.0, "Refining solution");
-
- libmv::EuclideanBundleCommonIntrinsics(tracks,
- bundle_options,
- reconstruction,
- intrinsics);
-}
-
static void cameraIntrinsicsFromOptions(const libmv_cameraIntrinsicsOptions *camera_intrinsics_options,
libmv::CameraIntrinsics *camera_intrinsics)
{
@@ -514,19 +468,6 @@
return libmv::Tracks(markers);
}
-static void finishReconstruction(const libmv::Tracks &tracks, const libmv::CameraIntrinsics &camera_intrinsics,
- libmv_Reconstruction *libmv_reconstruction,
- reconstruct_progress_update_cb progress_update_callback,
- void *callback_customdata)
-{
- libmv::EuclideanReconstruction &reconstruction = libmv_reconstruction->reconstruction;
-
- /* reprojection error calculation */
- progress_update_callback(callback_customdata, 1.0, "Finishing solution");
- libmv_reconstruction->tracks = tracks;
- libmv_reconstruction->error = libmv::EuclideanReprojectionError(tracks, reconstruction, camera_intrinsics);
-}
-
static bool selectTwoKeyframesBasedOnGRICAndVariance(
libmv::Tracks &tracks,
libmv::Tracks &normalized_tracks,
@@ -600,6 +541,53 @@
return true;
}
+static libmv::BundleOptions refinementOptionsFromReconstructionOptions(
+ const libmv_reconstructionOptions &reconstruction_options)
+{
+ /* only a few combinations are supported but trust the caller */
+ libmv::BundleOptions bundle_options;
+
+ const int motion_flag = reconstruction_options.motion_flag;
+ const int refine_intrinsics = reconstruction_options.refine_intrinsics;
+
+ if (motion_flag & LIBMV_TRACKING_MOTION_MODAL) {
+ bundle_options.constraints |= libmv::BUNDLE_NO_TRANSLATION;
+ }
+
+ if (refine_intrinsics & LIBMV_REFINE_FOCAL_LENGTH) {
+ bundle_options.bundle_intrinsics |= libmv::BUNDLE_FOCAL_LENGTH;
+ if (refine_intrinsics & LIBMV_CONSTRAIN_FOCAL_LENGTH) {
+ bundle_options.constraints |= libmv::BUNDLE_CONSTRAIN_FOCAL_LENGTH;
+ bundle_options.focal_length_min = reconstruction_options.focal_length_min;
+ bundle_options.focal_length_max = reconstruction_options.focal_length_max;
+ }
+ }
+ if (refine_intrinsics & LIBMV_REFINE_PRINCIPAL_POINT) {
+ bundle_options.bundle_intrinsics |= libmv::BUNDLE_PRINCIPAL_POINT;
+ }
+ if (refine_intrinsics & LIBMV_REFINE_RADIAL_DISTORTION_K1) {
+ bundle_options.bundle_intrinsics |= libmv::BUNDLE_RADIAL_K1;
+ }
+ if (refine_intrinsics & LIBMV_REFINE_RADIAL_DISTORTION_K2) {
+ bundle_options.bundle_intrinsics |= libmv::BUNDLE_RADIAL_K2;
+ }
+
+ return bundle_options;
+}
+
+static void finishReconstruction(const libmv::Tracks &tracks, const libmv::CameraIntrinsics &camera_intrinsics,
+ libmv_Reconstruction *libmv_reconstruction,
+ reconstruct_progress_update_cb progress_update_callback,
+ void *callback_customdata)
+{
+ libmv::EuclideanReconstruction &reconstruction = libmv_reconstruction->reconstruction;
+
+ /* reprojection error calculation */
+ progress_update_callback(callback_customdata, 1.0, "Finishing solution");
+ libmv_reconstruction->tracks = tracks;
+ libmv_reconstruction->error = libmv::EuclideanReprojectionError(tracks, reconstruction, camera_intrinsics);
+}
+
libmv_Reconstruction *libmv_solve(const libmv_Tracks *libmv_tracks,
const libmv_cameraIntrinsicsOptions libmv_camera_intrinsics_options[],
libmv_reconstructionOptions *libmv_reconstruction_options,
@@ -671,14 +659,17 @@
&reconstruction, &update_callback);
}
- /* Refine bundle parameters */
if (libmv_reconstruction_options->refine_intrinsics) {
- libmv_solveRefineIntrinsics(tracks,
- *libmv_reconstruction_options,
- progress_update_callback,
- callback_customdata,
- &reconstruction,
- &camera_intrinsics);
+ /* Refine bundle parameters */
+ libmv::BundleOptions refinement_bundle_options =
+ refinementOptionsFromReconstructionOptions(*libmv_reconstruction_options);
+
+ progress_update_callback(callback_customdata, 1.0, "Refining solution");
+
+ libmv::EuclideanBundleCommonIntrinsics(tracks,
+ refinement_bundle_options,
+ &reconstruction,
+ &camera_intrinsics);
}
/* Set reconstruction scale to unity */
More information about the Bf-blender-cvs
mailing list