added new constructor and changed to emplace
							parent
							
								
									a7b71cf203
								
							
						
					
					
						commit
						ee0eefbc86
					
				|  | @ -2762,12 +2762,12 @@ virtual class EssentialMatrixFactor : gtsam::NoiseModelFactor { | ||||||
| 
 | 
 | ||||||
| class SfmTrack { | class SfmTrack { | ||||||
|   SfmTrack(); |   SfmTrack(); | ||||||
|   Point3 point3() const; |   SfmTrack(const gtsam::Point3& pt); | ||||||
|  |   const Point3& point3() const; | ||||||
|   size_t number_measurements() const; |   size_t number_measurements() const; | ||||||
|   void set_point3(gtsam::Point3& p_); |  | ||||||
|   pair<size_t, gtsam::Point2> measurement(size_t idx) const; |   pair<size_t, gtsam::Point2> measurement(size_t idx) const; | ||||||
|   pair<size_t, size_t> siftIndex(size_t idx) const; |   pair<size_t, size_t> siftIndex(size_t idx) const; | ||||||
|   void add_measurement(const pair<size_t, gtsam::Point2>& m); |   void add_measurement(size_t idx, const gtsam::Point2& m); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| class SfmData { | class SfmData { | ||||||
|  |  | ||||||
|  | @ -217,6 +217,7 @@ typedef std::pair<size_t, size_t> SiftIndex; | ||||||
| /// Define the structure for the 3D points
 | /// Define the structure for the 3D points
 | ||||||
| struct SfmTrack { | struct SfmTrack { | ||||||
|   SfmTrack(): p(0,0,0) {} |   SfmTrack(): p(0,0,0) {} | ||||||
|  |   SfmTrack(const gtsam::Point3& pt) : p(pt) {} | ||||||
|   Point3 p; ///< 3D position of the point
 |   Point3 p; ///< 3D position of the point
 | ||||||
|   float r, g, b; ///< RGB color of the 3D point
 |   float r, g, b; ///< RGB color of the 3D point
 | ||||||
|   std::vector<SfmMeasurement> measurements; ///< The 2D image projections (id,(u,v))
 |   std::vector<SfmMeasurement> measurements; ///< The 2D image projections (id,(u,v))
 | ||||||
|  | @ -226,10 +227,6 @@ struct SfmTrack { | ||||||
|   size_t number_measurements() const { |   size_t number_measurements() const { | ||||||
|     return measurements.size(); |     return measurements.size(); | ||||||
|   } |   } | ||||||
|   /// Set 3D point
 |  | ||||||
|   void set_point3(const Point3& p_){ |  | ||||||
|     p = p_; |  | ||||||
|   } |  | ||||||
|   /// Get the measurement (camera index, Point2) at pose index `idx`
 |   /// Get the measurement (camera index, Point2) at pose index `idx`
 | ||||||
|   SfmMeasurement measurement(size_t idx) const { |   SfmMeasurement measurement(size_t idx) const { | ||||||
|     return measurements[idx]; |     return measurements[idx]; | ||||||
|  | @ -239,12 +236,12 @@ struct SfmTrack { | ||||||
|     return siftIndices[idx]; |     return siftIndices[idx]; | ||||||
|   } |   } | ||||||
|   /// Get 3D point
 |   /// Get 3D point
 | ||||||
|   Point3 point3() const { |   const Point3& point3() const { | ||||||
|     return p; |     return p; | ||||||
|   } |   } | ||||||
|   /// Add measurement to track
 |   /// Add measurement (camera_idx, Point2) to track
 | ||||||
|   void add_measurement(const pair<size_t, gtsam::Point2>& m) { |   void add_measurement(size_t idx, const gtsam::Point2& m) { | ||||||
|     measurements.push_back(m); |     measurements.emplace_back(idx, m); | ||||||
|   } |   } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -26,7 +26,8 @@ class TestSfmData(GtsamTestCase): | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|         """Initialize SfmData and SfmTrack""" |         """Initialize SfmData and SfmTrack""" | ||||||
|         self.data = gtsam.SfmData() |         self.data = gtsam.SfmData() | ||||||
|         self.tracks = gtsam.SfmTrack() |         # initialize SfmTrack with 3D point | ||||||
|  |         self.tracks = gtsam.SfmTrack(gtsam.Point3(2.5, 3.3, 1.2)) | ||||||
| 
 | 
 | ||||||
|     def test_tracks(self): |     def test_tracks(self): | ||||||
|         """Test functions in SfmTrack""" |         """Test functions in SfmTrack""" | ||||||
|  | @ -37,17 +38,14 @@ class TestSfmData(GtsamTestCase): | ||||||
|         uv_i1 = gtsam.Point2(12.6, 82) |         uv_i1 = gtsam.Point2(12.6, 82) | ||||||
|         # translating point uv_i1 along X-axis |         # translating point uv_i1 along X-axis | ||||||
|         uv_i2 = gtsam.Point2(24.88, 82) |         uv_i2 = gtsam.Point2(24.88, 82) | ||||||
|         m_i1 = (i1, uv_i1) |  | ||||||
|         m_i2 = (i2, uv_i2) |  | ||||||
|         # add measurements to the track |         # add measurements to the track | ||||||
|         self.tracks.add_measurement(m_i1) |         self.tracks.add_measurement(i1, uv_i1) | ||||||
|         self.tracks.add_measurement(m_i2) |         self.tracks.add_measurement(i2, uv_i2) | ||||||
|         # Number of measurements in the track is 2 |         # Number of measurements in the track is 2 | ||||||
|         self.assertEqual(self.tracks.number_measurements(), 2) |         self.assertEqual(self.tracks.number_measurements(), 2) | ||||||
|         # camera_idx in the first measurement of the track corresponds to i1 |         # camera_idx in the first measurement of the track corresponds to i1 | ||||||
|         self.assertEqual(self.tracks.measurement(0)[0], i1) |         cam_idx, img_measurement = self.tracks.measurement(0) | ||||||
|         # Set arbitrary 3D point corresponding to the track |         self.assertEqual(cam_idx, i1) | ||||||
|         self.tracks.set_point3(gtsam.Point3(2.5, 3.3, 1.2)) |  | ||||||
|         np.testing.assert_array_almost_equal( |         np.testing.assert_array_almost_equal( | ||||||
|             gtsam.Point3(2.5,3.3,1.2),  |             gtsam.Point3(2.5,3.3,1.2),  | ||||||
|             self.tracks.point3() |             self.tracks.point3() | ||||||
|  | @ -63,17 +61,17 @@ class TestSfmData(GtsamTestCase): | ||||||
|         # translating along X-axis |         # translating along X-axis | ||||||
|         uv_i2 = gtsam.Point2(45.7, 45.64) |         uv_i2 = gtsam.Point2(45.7, 45.64) | ||||||
|         uv_i3 = gtsam.Point2(68.35, 45.64) |         uv_i3 = gtsam.Point2(68.35, 45.64) | ||||||
|         m_i1, m_i2, m_i3 = (i1, uv_i1),  (i2, uv_i2), (i3, uv_i3) |  | ||||||
|         # add measurements to the track |         # add measurements to the track | ||||||
|         track2.add_measurement(m_i1) |         track2.add_measurement(i1, uv_i1) | ||||||
|         track2.add_measurement(m_i2) |         track2.add_measurement(i2, uv_i2) | ||||||
|         track2.add_measurement(m_i3) |         track2.add_measurement(i3, uv_i3) | ||||||
|         self.data.add_track(self.tracks) |         self.data.add_track(self.tracks) | ||||||
|         self.data.add_track(track2) |         self.data.add_track(track2) | ||||||
|         # Number of tracks in SfmData is 2 |         # Number of tracks in SfmData is 2 | ||||||
|         self.assertEqual(self.data.number_tracks(), 2) |         self.assertEqual(self.data.number_tracks(), 2) | ||||||
|         # camera idx of first measurement of second track corresponds to i1 |         # camera idx of first measurement of second track corresponds to i1 | ||||||
|         self.assertEqual(self.data.track(1).measurement(0)[0], i1) |         cam_idx, img_measurement = self.data.track(1).measurement(0) | ||||||
|  |         self.assertEqual(cam_idx, i1) | ||||||
| 
 | 
 | ||||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||||
|     unittest.main() |     unittest.main() | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue