Commit: 6730c6d19a8b76e4e44081db1d9d589f694e1413
Author: Tianwei Shen
Date:   Wed Jun 15 00:29:01 2016 +0800
Branches: soc-2016-multiview
https://developer.blender.org/rB6730c6d19a8b76e4e44081db1d9d589f694e1413

pipeline in progress, so far so good

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

M       intern/libmv/intern/reconstructionN.cc
M       intern/libmv/libmv/autotrack/reconstruction.cc
M       intern/libmv/libmv/autotrack/reconstruction.h
M       intern/libmv/libmv/autotrack/tracks.cc
M       intern/libmv/libmv/autotrack/tracks.h

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

diff --git a/intern/libmv/intern/reconstructionN.cc 
b/intern/libmv/intern/reconstructionN.cc
index f625833..aa0512e 100644
--- a/intern/libmv/intern/reconstructionN.cc
+++ b/intern/libmv/intern/reconstructionN.cc
@@ -42,6 +42,7 @@
 
 // TODO(tianwei): still rely on simple_pipeline/callback for now, will be 
removed
 #include "libmv/simple_pipeline/callbacks.h"
+#include "libmv/simple_pipeline/callbacks.h"
 
 using mv::Tracks;
 using mv::Marker;
@@ -116,8 +117,7 @@ libmv_ReconstructionN** 
libmv_solveMultiviewReconstruction(const int clip_num,
        libmv::vector<Marker> keyframe_markers;
        int keyframe1, keyframe2;
 
-       // make reconstrution on the primary clip reconstruction
-       Reconstruction &reconstruction = 
all_libmv_reconstruction[0]->reconstruction;
+       Tracks all_normalized_tracks;   // normalized tracks of all clips
        for(int i = 0; i < clip_num; i++)
        {
                all_libmv_reconstruction[i] = 
LIBMV_OBJECT_NEW(libmv_ReconstructionN);
@@ -132,6 +132,7 @@ libmv_ReconstructionN** 
libmv_solveMultiviewReconstruction(const int clip_num,
                ///* Invert the camera intrinsics/ */
                Tracks normalized_tracks;
                mv_getNormalizedTracks(tracks, *camera_intrinsics, 
&normalized_tracks);
+               all_normalized_tracks.AddTracks(normalized_tracks);
 
                if(i == 0)              // key frame from primary camera
                {
@@ -140,6 +141,9 @@ libmv_ReconstructionN** 
libmv_solveMultiviewReconstruction(const int clip_num,
                        normalized_tracks.GetMarkersForTracksInBothImages(i, 
keyframe1, i, keyframe2, &keyframe_markers);
                }
        }
+       // make reconstrution on the primary clip reconstruction
+       Reconstruction &reconstruction = 
all_libmv_reconstruction[0]->reconstruction;
+       printf("all pose num %d\n", reconstruction.GetAllPoseNum());
 
        printf("frames to init from: %d %d\n", keyframe1, keyframe2);
        printf("number of markers for init: %d\n", keyframe_markers.size());
@@ -181,14 +185,21 @@ libmv_ReconstructionN** 
libmv_solveMultiviewReconstruction(const int clip_num,
        if(!mv::ReconstructTwoFrames(keyframe_markers, 0, 
*(all_libmv_reconstruction[0]->intrinsics), &reconstruction))
        {
                printf("mv::ReconstrucTwoFrames failed\n");
-               for(int i = 0; i < clip_num; i++)
-                       all_libmv_reconstruction[i]->is_valid = false;
+               all_libmv_reconstruction[0]->is_valid = false;
+               return all_libmv_reconstruction;
+       }
+       if(!mv::EuclideanBundleAll(all_normalized_tracks, &reconstruction))
+       {
+               printf("mv::EuclideanBundleAll failed\n");
+               all_libmv_reconstruction[0]->is_valid = false;
+               return all_libmv_reconstruction;
+       }
+       if(!mv::EuclideanReconstructionComplete(all_normalized_tracks, 
&reconstruction, &update_callback))
+       {
+               printf("mv::EuclideanReconstructionComplete failed\n");
+               all_libmv_reconstruction[0]->is_valid = false;
                return all_libmv_reconstruction;
        }
-       //EuclideanBundle(normalized_tracks, &reconstruction);
-       //EuclideanCompleteReconstruction(normalized_tracks,
-       //                                &reconstruction,
-       //                                &update_callback);
 
        ///* Refinement/ */
        //if (libmv_reconstruction_options->refine_intrinsics) {
@@ -205,13 +216,14 @@ libmv_ReconstructionN** 
libmv_solveMultiviewReconstruction(const int clip_num,
        ///* Set reconstruction scale to unity. */
        //EuclideanScaleToUnity(&reconstruction);
 
-       ///* Finish reconstruction. */
+       /* Finish reconstruction. */
        //finishReconstruction(tracks,
        //                     *camera_intrinsics,
        //                     libmv_reconstruction,
        //                     progress_update_callback,
        //                     callback_customdata);
 
+       // a multi-view reconstruction is succesfuly iff all reconstruction 
falgs are set to true
        for(int i = 0; i < clip_num; i++)
                all_libmv_reconstruction[i]->is_valid = true;
 
diff --git a/intern/libmv/libmv/autotrack/reconstruction.cc 
b/intern/libmv/libmv/autotrack/reconstruction.cc
index 611191d..748ef53 100644
--- a/intern/libmv/libmv/autotrack/reconstruction.cc
+++ b/intern/libmv/libmv/autotrack/reconstruction.cc
@@ -68,8 +68,9 @@ void CoordinatesForMarkersInFrame(const vector<Marker> 
&markers,
                coordinates->col(i) = coords[i];
        }
 }
+
 /* markers come from two views in the same clip,
- * reconstruction should be empty
+ * reconstruction should be new and empty
  */
 bool ReconstructTwoFrames(const vector<Marker> &markers,
                           const int clip,
@@ -106,10 +107,12 @@ bool ReconstructTwoFrames(const vector<Marker> &markers,
                return false;
        }
 
+       printf("%d, %d, %d\n", cam_intrinsics.image_width(), 
cam_intrinsics.image_height(), cam_intrinsics.focal_length());
+
        // frame 1 gets the reference frame, frame 2 gets the relative motion.
-       reconstruction->AddCameraIntrinsics(&cam_intrinsics, clip);
-       CameraPose pose1(clip, frame1, clip, Mat3::Identity(), Vec3::Zero());
-       CameraPose pose2(clip, frame2, clip, R, t);
+       int cam_intrinsic_index = 
reconstruction->AddCameraIntrinsics(&cam_intrinsics);
+       CameraPose pose1(clip, frame1, cam_intrinsic_index, Mat3::Identity(), 
Vec3::Zero());
+       CameraPose pose2(clip, frame2, cam_intrinsic_index, R, t);
        reconstruction->AddCameraPose(pose1);
        reconstruction->AddCameraPose(pose2);
 
@@ -118,6 +121,34 @@ bool ReconstructTwoFrames(const vector<Marker> &markers,
        return true;
 }
 
+/**
+ * @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,
+                        Reconstruction *reconstruction)
+{
+       return true;
+}
+
+bool EuclideanReconstructionComplete(const Tracks &tracks,
+                                     Reconstruction *reconstruction,
+                                     libmv::ProgressUpdateCallback 
*update_callback)
+{
+       //InternalCompleteReconstruction<EuclideanPipelineRoutines>(tracks, 
reconstruction, update_callback);
+       return true;
+}
+
+//     ==================  mv::Reconstruction implementation 
===================
+// push a new cameraIntrinsics and return the index
+int Reconstruction::AddCameraIntrinsics(CameraIntrinsics *intrinsics_ptr)
+{
+       camera_intrinsics_.push_back(intrinsics_ptr);
+       return camera_intrinsics_.size()-1;
+}
+
 void Reconstruction::AddCameraPose(const CameraPose& pose)
 {
        if(camera_poses_.size() < pose.clip + 1)
@@ -125,19 +156,15 @@ void Reconstruction::AddCameraPose(const CameraPose& pose)
        camera_poses_[pose.clip].push_back(pose);
 }
 
-/**
- * @brief Reconstruction::AddCameraIntrinsics insert camera intrinsics into 
Reconstruction by index,
- * overwrite the old intrinsic if there is any, resize the CameraIntrinsics 
vector if the size is smaller
- * than index.
- * @param intrinsics_ptr: camera intrinsic pointer
- * @param intrisic_index: index
- * @return
- */
-void Reconstruction::AddCameraIntrinsics(CameraIntrinsics* intrinsics_ptr, 
const int intrinsic_index)
-{
-       if(camera_intrinsics_.size() < intrinsic_index+1)
-               camera_intrinsics_.resize(intrinsic_index+1);
-       camera_intrinsics_[intrinsic_index] = intrinsics_ptr;
+int Reconstruction::GetClipNum() const {
+       return camera_poses_.size();
+}
+
+int Reconstruction::GetAllPoseNum() const {
+       int all_pose = 0;
+       for(int i = 0; i < camera_poses_.size(); ++i) {
+               all_pose += camera_poses_[i].size();
+       }
 }
 
 }  // namespace mv
diff --git a/intern/libmv/libmv/autotrack/reconstruction.h 
b/intern/libmv/libmv/autotrack/reconstruction.h
index 6f45739..74aece4 100644
--- a/intern/libmv/libmv/autotrack/reconstruction.h
+++ b/intern/libmv/libmv/autotrack/reconstruction.h
@@ -27,6 +27,7 @@
 #include "libmv/base/vector.h"
 #include "libmv/numeric/numeric.h"
 #include "libmv/simple_pipeline/camera_intrinsics.h"
+#include "libmv/simple_pipeline/callbacks.h"
 
 namespace mv {
 
@@ -51,51 +52,60 @@ struct CameraPose {
 };
 
 class Point {
-  int track;
+       int track;
 
-  // The coordinates of the point. Note that not all coordinates are always
-  // used; for example points on a plane only use the first two coordinates.
-  Vec3 X;
+       // The coordinates of the point. Note that not all coordinates are 
always
+       // used; for example points on a plane only use the first two 
coordinates.
+       Vec3 X;
 };
 
 // A reconstruction for a set of tracks. The indexing for clip, frame, and
-// track should match that of a Tracs object, stored elsewhere.
+// track should match that of a Tracks object, stored elsewhere.
 class Reconstruction {
- public:
-  // All methods copy their input reference or take ownership of the pointer.
-  void AddCameraPose(const CameraPose& pose);
-  void AddCameraIntrinsics(CameraIntrinsics* intrinsics_ptr, const int 
intrinsic_index);
-  int  AddPoint(const Point& point);
-  int  AddModel(Model* model);
-
-  // Returns the corresponding pose or point or NULL if missing.
-        CameraPose* CameraPoseForFrame(int clip, int frame);
-  const CameraPose* CameraPoseForFrame(int clip, int frame) const;
-        Point* PointForTrack(int track);
-  const Point* PointForTrack(int track) const;
-
-  const vector<vector<CameraPose> >& camera_poses() const {
-    return camera_poses_;
-  }
-
- private:
-  // Indexed by CameraPose::intrinsics. Owns the intrinsics objects.
-  vector<CameraIntrinsics*> camera_intrinsics_;
-
-  // Indexed by Marker::clip then by Marker::frame.
-  vector<vector<CameraPose> > camera_poses_;
-
-  // Indexed by Marker::track.
-  vector<Point> points_;
-
-  // Indexed by Marker::model_id. Owns model objects.
-  vector<Model*> models_;
+public:
+       // All methods copy their input reference or take ownership of the 
pointer.
+       void AddCameraPose(const CameraPose& pose);
+       int AddCameraIntrinsics(CameraIntrinsics* intrinsics_ptr);
+       int  AddPoint(const Point& point);
+       int  AddModel(Model* model);
+
+       // Returns the corresponding pose or point or NULL if missing.
+       CameraPose* CameraPoseForFrame(int clip, int frame);
+       const CameraPose* CameraPoseForFrame(int clip, int frame) const;
+       Point* PointForTrack(int track);
+       const Point* PointForTrack(int track) const;
+
+       const vector<vector<CameraPose> >& camera_poses() const {
+               return camera_poses_;
+       }
+
+       int GetClipNum() const;
+       int GetAllPoseNum() const;
+
+private:
+       // Indexed by CameraPose::intrinsics. Owns the intrinsics objects.
+       vector<CameraIntrinsics*> camera_int

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to