[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58824] branches/soc-2013-motion_track: Modify Tracks to multiview only

Joseph Mansfield sftrabbit at gmail.com
Fri Aug 2 11:40:42 CEST 2013


Revision: 58824
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58824
Author:   sftrabbit
Date:     2013-08-02 09:40:42 +0000 (Fri, 02 Aug 2013)
Log Message:
-----------
Modify Tracks to multiview only

The Tracks class stores Markers that correspond to tracks across different views and images. There's no need to have an interface for both singleview and multiview reconstruction, so remove the single view interface. For now, all algorithms assume view 0, but should instead be passed the view that they should work on.

Modified Paths:
--------------
    branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/initialize_reconstruction.cc
    branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/keyframe_selection.cc
    branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/modal_solver.cc
    branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/pipeline.cc
    branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/tracks.cc
    branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/tracks.h
    branches/soc-2013-motion_track/extern/libmv/libmv-capi.cc
    branches/soc-2013-motion_track/extern/libmv/libmv-capi.h
    branches/soc-2013-motion_track/extern/libmv/libmv-capi_stub.cc
    branches/soc-2013-motion_track/source/blender/blenkernel/intern/tracking.c

Modified: branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/initialize_reconstruction.cc
===================================================================
--- branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/initialize_reconstruction.cc	2013-08-02 08:50:30 UTC (rev 58823)
+++ branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/initialize_reconstruction.cc	2013-08-02 09:40:42 UTC (rev 58824)
@@ -61,8 +61,8 @@
   GetImagesInMarkers(markers, &image1, &image2);
 
   Mat x1, x2;
-  CoordinatesForMarkersInImage(markers, image1, &x1);
-  CoordinatesForMarkersInImage(markers, image2, &x2);
+  CoordinatesForMarkersInImage(markers, 0, image1, &x1);
+  CoordinatesForMarkersInImage(markers, 0, image2, &x2);
 
   Mat3 F;
   NormalizedEightPointSolver(x1, x2, &F);
@@ -149,8 +149,8 @@
   GetImagesInMarkers(markers, &image1, &image2);
 
   Mat x1, x2;
-  CoordinatesForMarkersInImage(markers, image1, &x1);
-  CoordinatesForMarkersInImage(markers, image2, &x2);
+  CoordinatesForMarkersInImage(markers, 0, image1, &x1);
+  CoordinatesForMarkersInImage(markers, 0, image2, &x2);
 
   Mat3 F;
   NormalizedEightPointSolver(x1, x2, &F);

Modified: branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/keyframe_selection.cc
===================================================================
--- branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/keyframe_selection.cc	2013-08-02 08:50:30 UTC (rev 58823)
+++ branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/keyframe_selection.cc	2013-08-02 09:40:42 UTC (rev 58824)
@@ -328,16 +328,16 @@
          candidate_image++) {
       // Conjunction of all markers from both keyframes
       vector<Marker> all_markers =
-        tracks.MarkersInBothImages(current_keyframe, candidate_image);
+        tracks.MarkersInBothImages(0, current_keyframe, candidate_image);
 
       // Match keypoints between frames current_keyframe and candidate_image
       vector<Marker> tracked_markers =
-        tracks.MarkersForTracksInBothImages(current_keyframe, candidate_image);
+        tracks.MarkersForTracksInBothImages(0, current_keyframe, candidate_image);
 
       // Correspondences in normalized space
       Mat x1, x2;
-      CoordinatesForMarkersInImage(tracked_markers, current_keyframe, &x1);
-      CoordinatesForMarkersInImage(tracked_markers, candidate_image, &x2);
+      CoordinatesForMarkersInImage(tracked_markers, 0, current_keyframe, &x1);
+      CoordinatesForMarkersInImage(tracked_markers, 0, candidate_image, &x2);
 
       LG << "Found " << x1.cols()
          << " correspondences between " << current_keyframe

Modified: branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/modal_solver.cc
===================================================================
--- branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/modal_solver.cc	2013-08-02 08:50:30 UTC (rev 58823)
+++ branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/modal_solver.cc	2013-08-02 09:40:42 UTC (rev 58824)
@@ -111,7 +111,7 @@
   ceres::AngleAxisToQuaternion(&zero_rotation(0), &quaternion(0));
 
   for (int image = 0; image <= max_image; ++image) {
-    vector<Marker> all_markers = tracks.MarkersInImage(image);
+    vector<Marker> all_markers = tracks.MarkersInImage(0, image);
 
     ModalSolverLogProress(update_callback, (float) image / max_image);
 
@@ -226,7 +226,7 @@
     // and reproject them on sphere to obtain 3D position/
     for (int track = 0; track <= max_track; ++track) {
       if (!reconstruction->PointForTrack(track)) {
-        Marker marker = tracks.MarkerInImageForTrack(image, track);
+        Marker marker = tracks.MarkerInImageForTrack(0, image, track);
 
         if (marker.image == image) {
           // New track appeared on this image,

Modified: branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/pipeline.cc
===================================================================
--- branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/pipeline.cc	2013-08-02 08:50:30 UTC (rev 58823)
+++ branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/pipeline.cc	2013-08-02 09:40:42 UTC (rev 58824)
@@ -203,7 +203,7 @@
         LG << "Skipping frame: " << image;
         continue;
       }
-      vector<Marker> all_markers = tracks.MarkersInImage(image);
+      vector<Marker> all_markers = tracks.MarkersInImage(0, image);
       LG << "Got " << all_markers.size() << " markers for image " << image;
 
       vector<Marker> reconstructed_markers;
@@ -243,7 +243,7 @@
       LG << "Skipping frame: " << image;
       continue;
     }
-    vector<Marker> all_markers = tracks.MarkersInImage(image);
+    vector<Marker> all_markers = tracks.MarkersInImage(0, image);
 
     vector<Marker> reconstructed_markers;
     for (int i = 0; i < all_markers.size(); ++i) {

Modified: branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/tracks.cc
===================================================================
--- branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/tracks.cc	2013-08-02 08:50:30 UTC (rev 58823)
+++ branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/tracks.cc	2013-08-02 09:40:42 UTC (rev 58824)
@@ -51,10 +51,6 @@
   markers_.push_back(marker);
 }
 
-void Tracks::Insert(int image, int track, double x, double y) {
-  this->Insert(0, image, track, x, y);
-}
-
 vector<Marker> Tracks::AllMarkers() const {
   return markers_;
 }
@@ -69,10 +65,11 @@
   return markers;
 }
 
-vector<Marker> Tracks::MarkersInImage(int image) const {
+vector<Marker> Tracks::MarkersInImage(int view, int image) const {
   vector<Marker> markers;
   for (int i = 0; i < markers_.size(); ++i) {
-    if (image == markers_[i].image) {
+    if (view == markers_[i].view &&
+        image == markers_[i].image) {
       markers.push_back(markers_[i]);
     }
   }
@@ -89,27 +86,32 @@
   return markers;
 }
 
-vector<Marker> Tracks::MarkersInBothImages(int image1, int image2) const {
+vector<Marker> Tracks::MarkersInBothImages(int view,
+                                           int image1, int image2) const {
   vector<Marker> markers;
   for (int i = 0; i < markers_.size(); ++i) {
     int image = markers_[i].image;
-    if (image == image1 || image == image2)
+    if (markers_[i].view == view &&
+        (image == image1 || image == image2)) {
       markers.push_back(markers_[i]);
+    }
   }
   return markers;
 }
 
-vector<Marker> Tracks::MarkersForTracksInBothImages(int image1,
+vector<Marker> Tracks::MarkersForTracksInBothImages(int view, int image1,
                                                     int image2) const {
   std::vector<int> image1_tracks;
   std::vector<int> image2_tracks;
 
   for (int i = 0; i < markers_.size(); ++i) {
-    int image = markers_[i].image;
-    if (image == image1) {
-      image1_tracks.push_back(markers_[i].track);
-    } else if (image == image2) {
-      image2_tracks.push_back(markers_[i].track);
+    if (markers_[i].view == view) {
+      int image = markers_[i].image;
+      if (image == image1) {
+        image1_tracks.push_back(markers_[i].track);
+      } else if (image == image2) {
+        image2_tracks.push_back(markers_[i].track);
+      }
     }
   }
 
@@ -132,9 +134,11 @@
   return markers;
 }
 
-Marker Tracks::MarkerInImageForTrack(int image, int track) const {
+Marker Tracks::MarkerInImageForTrack(int view, int image, int track) const {
   for (int i = 0; i < markers_.size(); ++i) {
-    if (markers_[i].image == image && markers_[i].track == track) {
+    if (markers_[i].view == view &&
+        markers_[i].image == image &&
+        markers_[i].track == track) {
       return markers_[i];
     }
   }
@@ -174,10 +178,6 @@
   markers_.resize(size);
 }
 
-void Tracks::RemoveMarker(int image, int track) {
-  this->RemoveMarker(0, image, track);
-}
-
 int Tracks::MaxView() const {
   // TODO(MatthiasF): maintain a max_view_ member (updated on Insert)
   int max_view = 0;
@@ -210,12 +210,13 @@
 }
 
 void CoordinatesForMarkersInImage(const vector<Marker> &markers,
-                                  int image,
+                                  int view, int image,
                                   Mat *coordinates) {
   vector<Vec2> coords;
   for (int i = 0; i < markers.size(); ++i) {
     const Marker &marker = markers[i];
-    if (markers[i].image == image) {
+    if (marker.view == view &&
+        marker.image == image) {
       coords.push_back(Vec2(marker.x, marker.y));
     }
   }

Modified: branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/tracks.h
===================================================================
--- branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/tracks.h	2013-08-02 08:50:30 UTC (rev 58823)
+++ branches/soc-2013-motion_track/extern/libmv/libmv/simple_pipeline/tracks.h	2013-08-02 09:40:42 UTC (rev 58824)
@@ -80,27 +80,20 @@
   */
   void Insert(int view, int image, int track, double x, double y);
 
-  /*!
-      Inserts a marker for view 0 into the set. If there is already a marker
-      for view 0 and the given \a image and \a track, the existing marker is
-      replaced. This is a useful shorthand for single view reconstruction.
-  */
-  void Insert(int image, int track, double x, double y);
-
   /// Returns all the markers.
   vector<Marker> AllMarkers() const;
 
   /// Returns all the markers visible in \a view.
   vector<Marker> MarkersInView(int view) const;
 
-  /// Returns all the markers visible in \a image.
-  vector<Marker> MarkersInImage(int image) const;
+  /// Returns all the markers visible in an \a image from \a view.
+  vector<Marker> MarkersInImage(int view, int image) const;
 
   /// Returns all the markers belonging to a track.
   vector<Marker> MarkersForTrack(int track) const;
 
-  /// Returns all the markers visible in \a image1 and \a image2.
-  vector<Marker> MarkersInBothImages(int image1, int image2) const;
+  /// Returns all the markers visible in \a image1 and \a image2 from \a view.
+  vector<Marker> MarkersInBothImages(int view, int image1, int image2) const;
 
   /*!
       Returns the markers in \a image1 and \a image2 which have a common track.
@@ -108,10 +101,10 @@
       This is not the same as the union of the markers in \a image1 and \a
       image2; each marker is for a track that appears in both images.
   */
-  vector<Marker> MarkersForTracksInBothImages(int image1, int image2) const;

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list