[Bf-blender-cvs] [2ce1533] soc-2016-multiview: add reconstruction.cc in autotrack
Tianwei Shen
noreply at git.blender.org
Thu Jun 9 17:40:57 CEST 2016
Commit: 2ce153377a54862bdcb5d8b62f35b139a7cf8aa2
Author: Tianwei Shen
Date: Thu Jun 9 23:40:59 2016 +0800
Branches: soc-2016-multiview
https://developer.blender.org/rB2ce153377a54862bdcb5d8b62f35b139a7cf8aa2
add reconstruction.cc in autotrack
===================================================================
M intern/libmv/CMakeLists.txt
M intern/libmv/intern/reconstructionN.cc
A intern/libmv/libmv/autotrack/reconstruction.cc
M intern/libmv/libmv/autotrack/reconstruction.h
===================================================================
diff --git a/intern/libmv/CMakeLists.txt b/intern/libmv/CMakeLists.txt
index bf0ad3f..c7d75ed 100644
--- a/intern/libmv/CMakeLists.txt
+++ b/intern/libmv/CMakeLists.txt
@@ -76,6 +76,7 @@ if(WITH_LIBMV)
intern/tracksN.cc
libmv/autotrack/autotrack.cc
libmv/autotrack/predict_tracks.cc
+ libmv/autotrack/reconstruction.cc
libmv/autotrack/tracks.cc
libmv/base/aligned_malloc.cc
libmv/image/array_nd.cc
diff --git a/intern/libmv/intern/reconstructionN.cc b/intern/libmv/intern/reconstructionN.cc
index e0dae97..61954cc 100644
--- a/intern/libmv/intern/reconstructionN.cc
+++ b/intern/libmv/intern/reconstructionN.cc
@@ -115,11 +115,13 @@ libmv_ReconstructionN** libmv_solveMultiviewReconstruction(const int clip_num,
libmv_ReconstructionN **all_libmv_reconstruction = LIBMV_STRUCT_NEW(libmv_ReconstructionN*, clip_num);
libmv::vector<Marker> keyframe_markers;
int keyframe1, keyframe2;
+
+ // make reconstrution on the primary clip reconstruction
+ Reconstruction &reconstruction = all_libmv_reconstruction[0]->reconstruction;
for(int i = 0; i < clip_num; i++)
{
all_libmv_reconstruction[i] = LIBMV_OBJECT_NEW(libmv_ReconstructionN);
Tracks &tracks = *((Tracks *) all_libmv_tracks[i]);
- Reconstruction &reconstruction = all_libmv_reconstruction[i]->reconstruction;
///* Retrieve reconstruction options from C-API to libmv API. */
CameraIntrinsics *camera_intrinsics;
@@ -136,7 +138,6 @@ libmv_ReconstructionN** libmv_solveMultiviewReconstruction(const int clip_num,
///* keyframe selection. */
keyframe1 = libmv_reconstruction_options->keyframe1, keyframe2 = libmv_reconstruction_options->keyframe2;
normalized_tracks.GetMarkersForTracksInBothImages(i, keyframe1, i, keyframe2, &keyframe_markers);
-
}
}
@@ -144,7 +145,8 @@ libmv_ReconstructionN** libmv_solveMultiviewReconstruction(const int clip_num,
printf("number of markers for init: %d\n", keyframe_markers.size());
if (keyframe_markers.size() < 8) {
LG << "No enough markers to initialize from";
- all_libmv_reconstruction[0]->is_valid = false;
+ for(int i = 0; i < clip_num; i++)
+ all_libmv_reconstruction[i]->is_valid = false;
return all_libmv_reconstruction;
}
@@ -153,7 +155,7 @@ libmv_ReconstructionN** libmv_solveMultiviewReconstruction(const int clip_num,
MultiviewReconstructUpdateCallback(progress_update_callback,
callback_customdata);
- // TODO(tianwei): skip the automatic keyframe selection
+ // TODO(tianwei): skip the automatic keyframe selection for now
//if (libmv_reconstruction_options->select_keyframes) {
// LG << "Using automatic keyframe selection";
@@ -173,7 +175,14 @@ libmv_ReconstructionN** libmv_solveMultiviewReconstruction(const int clip_num,
///* Actual reconstruction. */
update_callback.invoke(0, "Initial reconstruction");
- //EuclideanReconstructTwoFrames(keyframe_markers, &reconstruction);
+ ///* TODO(tianwei): chain the tracks and correspondences */
+
+ if(!mv::ReconstructTwoFrames(keyframe_markers, &reconstruction)) {
+ printf("mv::ReconstrucTwoFrames failed\n");
+ for(int i = 0; i < clip_num; i++)
+ all_libmv_reconstruction[i]->is_valid = false;
+ return all_libmv_reconstruction;
+ }
//EuclideanBundle(normalized_tracks, &reconstruction);
//EuclideanCompleteReconstruction(normalized_tracks,
// &reconstruction,
@@ -202,9 +211,7 @@ libmv_ReconstructionN** libmv_solveMultiviewReconstruction(const int clip_num,
// callback_customdata);
for(int i = 0; i < clip_num; i++)
- {
all_libmv_reconstruction[i]->is_valid = true;
- }
return all_libmv_reconstruction;
}
diff --git a/intern/libmv/libmv/autotrack/reconstruction.cc b/intern/libmv/libmv/autotrack/reconstruction.cc
new file mode 100644
index 0000000..73fc02c
--- /dev/null
+++ b/intern/libmv/libmv/autotrack/reconstruction.cc
@@ -0,0 +1,78 @@
+// Copyright (c) 2016 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.
+//
+// Author: shentianweipku at gmail.com (Tianwei Shen)
+
+#include "libmv/autotrack/reconstruction.h"
+#include "libmv/autotrack/marker.h"
+#include "libmv/autotrack/tracks.h"
+#include "libmv/numeric/numeric.h"
+#include "libmv/logging/logging.h"
+
+using mv::Marker;
+using mv::Tracks;
+
+namespace mv {
+
+bool ReconstructTwoFrames(const vector<Marker> &markers,
+ Reconstruction *reconstruction)
+{
+ if (markers.size() < 16) {
+ LG << "Not enough markers to initialize from two frames: " << markers.size();
+ return false;
+ }
+
+ int image1, image2;
+ //GetImagesInMarkers(markers, &image1, &image2);
+
+ //Mat x1, x2;
+ //CoordinatesForMarkersInImage(markers, image1, &x1);
+ //CoordinatesForMarkersInImage(markers, image2, &x2);
+
+ //Mat3 F;
+ //NormalizedEightPointSolver(x1, x2, &F);
+
+ //// The F matrix should be an E matrix, but squash it just to be sure.
+ //Mat3 E;
+ //FundamentalToEssential(F, &E);
+
+ //// Recover motion between the two images. Since this function assumes a
+ //// calibrated camera, use the identity for K.
+ //Mat3 R;
+ //Vec3 t;
+ //Mat3 K = Mat3::Identity();
+ //if (!MotionFromEssentialAndCorrespondence(E,
+ // K, x1.col(0),
+ // K, x2.col(0),
+ // &R, &t)) {
+ // LG << "Failed to compute R and t from E and K.";
+ // return false;
+ //}
+
+ //// Image 1 gets the reference frame, image 2 gets the relative motion.
+ //reconstruction->InsertCamera(image1, Mat3::Identity(), Vec3::Zero());
+ //reconstruction->InsertCamera(image2, R, t);
+
+ //LG << "From two frame reconstruction got:\nR:\n" << R
+ // << "\nt:" << t.transpose();
+ return true;
+}
+
+} // namespace mv
diff --git a/intern/libmv/libmv/autotrack/reconstruction.h b/intern/libmv/libmv/autotrack/reconstruction.h
index 48bfa70..0a9fd29 100644
--- a/intern/libmv/libmv/autotrack/reconstruction.h
+++ b/intern/libmv/libmv/autotrack/reconstruction.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2014 libmv authors.
+// Copyright (c) 2014, 2016 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
@@ -19,6 +19,7 @@
// IN THE SOFTWARE.
//
// Author: mierle at gmail.com (Keir Mierle)
+// shentianweipku at gmail.com (Tianwei Shen)
#ifndef LIBMV_AUTOTRACK_RECONSTRUCTION_H_
#define LIBMV_AUTOTRACK_RECONSTRUCTION_H_
@@ -35,6 +36,8 @@ using libmv::Mat3;
using libmv::Vec3;
class Model;
+struct Marker;
+class Tracks;
class CameraPose {
int clip;
@@ -86,6 +89,8 @@ class Reconstruction {
vector<Model*> models_;
};
+bool ReconstructTwoFrames(const vector<Marker> &markers,
+ Reconstruction *reconstruction);
} // namespace mv
#endif // LIBMV_AUTOTRACK_RECONSTRUCTION_H_
More information about the Bf-blender-cvs
mailing list