improving formatting
							parent
							
								
									df4419b609
								
							
						
					
					
						commit
						9d61e5bc4a
					
				| 
						 | 
				
			
			@ -247,6 +247,8 @@ struct SfmTrack {
 | 
			
		|||
    measurements.emplace_back(idx, m);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** Serialization function */
 | 
			
		||||
  friend class boost::serialization::access;
 | 
			
		||||
  template<class ARCHIVE>
 | 
			
		||||
  void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
 | 
			
		||||
    ar & p;
 | 
			
		||||
| 
						 | 
				
			
			@ -259,24 +261,40 @@ struct SfmTrack {
 | 
			
		|||
 | 
			
		||||
  /// assert equality up to a tolerance
 | 
			
		||||
  bool equals(const SfmTrack &sfmTrack, double tol = 1e-9) const {
 | 
			
		||||
    if(!p.isApprox(sfmTrack.p)){
 | 
			
		||||
    // check the 3D point
 | 
			
		||||
    if (!p.isApprox(sfmTrack.p)) {
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // TODO: compare RGB values
 | 
			
		||||
    // check the RGB values
 | 
			
		||||
    if (r!=sfmTrack.r || g!=sfmTrack.g || b!=sfmTrack.b) {
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // compare size of vectors
 | 
			
		||||
    if(number_measurements() != sfmTrack.number_measurements() ||
 | 
			
		||||
      siftIndices.size() != sfmTrack.siftIndices.size()){
 | 
			
		||||
    // compare size of vectors for measurements and siftIndices
 | 
			
		||||
    if (number_measurements() != sfmTrack.number_measurements() ||
 | 
			
		||||
        siftIndices.size() != sfmTrack.siftIndices.size()) {
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // compare measurements (order sensitive)
 | 
			
		||||
    for(size_t idx=0; idx<number_measurements(); idx++){
 | 
			
		||||
    for (size_t idx = 0; idx < number_measurements(); ++idx) {
 | 
			
		||||
      SfmMeasurement measurement = measurements[idx];
 | 
			
		||||
      SfmMeasurement otherMeasurement = sfmTrack.measurements[idx];
 | 
			
		||||
 | 
			
		||||
      if(measurement.first != otherMeasurement.first || !measurement.second.isApprox(otherMeasurement.second)){
 | 
			
		||||
      if (measurement.first != otherMeasurement.first ||
 | 
			
		||||
          !measurement.second.isApprox(otherMeasurement.second)) {
 | 
			
		||||
        return false;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // compare sift indices (order sensitive)
 | 
			
		||||
    for (size_t idx = 0; idx < siftIndices.size(); ++idx) {
 | 
			
		||||
      SiftIndex index = siftIndices[idx];
 | 
			
		||||
      SiftIndex otherIndex = sfmTrack.siftIndices[idx];
 | 
			
		||||
 | 
			
		||||
      if (index.first != otherIndex.first ||
 | 
			
		||||
          index.second != otherIndex.second) {
 | 
			
		||||
        return false;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -288,10 +306,6 @@ struct SfmTrack {
 | 
			
		|||
  void print(const std::string& s = "") const {
 | 
			
		||||
    cout << "Track with " << measurements.size() << "measurements\n";
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // inline bool SfmTrack::operator == (const SfmTrack& rhs) const{
 | 
			
		||||
  //   return p==rhs.p;
 | 
			
		||||
  // }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* ************************************************************************* */
 | 
			
		||||
| 
						 | 
				
			
			@ -305,73 +319,75 @@ struct traits<SfmTrack> : public Testable<SfmTrack> {
 | 
			
		|||
typedef PinholeCamera<Cal3Bundler> SfmCamera;
 | 
			
		||||
 | 
			
		||||
/// Define the structure for SfM data
 | 
			
		||||
class GTSAM_EXPORT SfmData {
 | 
			
		||||
  public:
 | 
			
		||||
    std::vector<SfmCamera> cameras; ///< Set of cameras
 | 
			
		||||
    std::vector<SfmTrack> tracks; ///< Sparse set of points
 | 
			
		||||
    size_t number_cameras() const {
 | 
			
		||||
      return cameras.size();
 | 
			
		||||
    }
 | 
			
		||||
    /// The number of reconstructed 3D points
 | 
			
		||||
    size_t number_tracks() const {
 | 
			
		||||
      return tracks.size();
 | 
			
		||||
    }
 | 
			
		||||
    /// The camera pose at frame index `idx`
 | 
			
		||||
    SfmCamera camera(size_t idx) const {
 | 
			
		||||
      return cameras[idx];
 | 
			
		||||
    }
 | 
			
		||||
    /// The track formed by series of landmark measurements
 | 
			
		||||
    SfmTrack track(size_t idx) const {
 | 
			
		||||
      return tracks[idx];
 | 
			
		||||
    }
 | 
			
		||||
    /// Add a track to SfmData
 | 
			
		||||
    void add_track(const SfmTrack& t)  {
 | 
			
		||||
      tracks.push_back(t);
 | 
			
		||||
    }
 | 
			
		||||
    /// Add a camera to SfmData
 | 
			
		||||
    void add_camera(const SfmCamera& cam){
 | 
			
		||||
      cameras.push_back(cam);
 | 
			
		||||
struct SfmData {
 | 
			
		||||
  std::vector<SfmCamera> cameras; ///< Set of cameras
 | 
			
		||||
  std::vector<SfmTrack> tracks; ///< Sparse set of points
 | 
			
		||||
  size_t number_cameras() const {
 | 
			
		||||
    return cameras.size();
 | 
			
		||||
  }
 | 
			
		||||
  /// The number of reconstructed 3D points
 | 
			
		||||
  size_t number_tracks() const {
 | 
			
		||||
    return tracks.size();
 | 
			
		||||
  }
 | 
			
		||||
  /// The camera pose at frame index `idx`
 | 
			
		||||
  SfmCamera camera(size_t idx) const {
 | 
			
		||||
    return cameras[idx];
 | 
			
		||||
  }
 | 
			
		||||
  /// The track formed by series of landmark measurements
 | 
			
		||||
  SfmTrack track(size_t idx) const {
 | 
			
		||||
    return tracks[idx];
 | 
			
		||||
  }
 | 
			
		||||
  /// Add a track to SfmData
 | 
			
		||||
  void add_track(const SfmTrack& t) {
 | 
			
		||||
    tracks.push_back(t);
 | 
			
		||||
  }
 | 
			
		||||
  /// Add a camera to SfmData
 | 
			
		||||
  void add_camera(const SfmCamera& cam) {
 | 
			
		||||
    cameras.push_back(cam);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /** Serialization function */
 | 
			
		||||
  friend class boost::serialization::access;
 | 
			
		||||
  template<class Archive>
 | 
			
		||||
  void serialize(Archive & ar, const unsigned int /*version*/) {
 | 
			
		||||
    ar & cameras;
 | 
			
		||||
    ar & tracks;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /// @}
 | 
			
		||||
  /// @name Testable
 | 
			
		||||
  /// @{
 | 
			
		||||
 | 
			
		||||
  /// assert equality up to a tolerance
 | 
			
		||||
  bool equals(const SfmData &sfmData, double tol = 1e-9) const {
 | 
			
		||||
    // check number of cameras and tracks
 | 
			
		||||
    if (number_cameras() != sfmData.number_cameras() ||
 | 
			
		||||
        number_tracks() != sfmData.number_tracks()) {
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// @}
 | 
			
		||||
    /// @name Testable
 | 
			
		||||
    /// @{
 | 
			
		||||
 | 
			
		||||
    /// assert equality up to a tolerance
 | 
			
		||||
    bool equals(const SfmData &sfmData, double tol = 1e-9) const {
 | 
			
		||||
      // check number of cameras and tracks
 | 
			
		||||
      if (number_cameras() != sfmData.number_cameras() || number_tracks() != sfmData.number_tracks()){
 | 
			
		||||
    // check each camera
 | 
			
		||||
    for (size_t i = 0; i < number_cameras(); ++i) {
 | 
			
		||||
      if (!camera(i).equals(sfmData.camera(i), tol)) {
 | 
			
		||||
        return false;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
      // check each camera
 | 
			
		||||
      for(size_t cam_idx = 0; cam_idx < number_cameras(); cam_idx++){
 | 
			
		||||
        if(!camera(cam_idx).equals(sfmData.camera(cam_idx), tol)){
 | 
			
		||||
          return false;
 | 
			
		||||
        }
 | 
			
		||||
    // check each track
 | 
			
		||||
    for (size_t j = 0; j < number_tracks(); ++j) {
 | 
			
		||||
      if (!track(j).equals(sfmData.track(j), tol)) {
 | 
			
		||||
        return false;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// print
 | 
			
		||||
    void print(const std::string& s = "") const {
 | 
			
		||||
      cout << "Number of cameras = " << number_cameras() << "\n";
 | 
			
		||||
      cout << "Number of tracks = " << number_tracks() << "\n";
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private:
 | 
			
		||||
    /** Serialization function */
 | 
			
		||||
    friend class boost::serialization::access;
 | 
			
		||||
    template<class Archive>
 | 
			
		||||
    void serialize(Archive & ar, const unsigned int /*version*/) {
 | 
			
		||||
      ar & cameras;
 | 
			
		||||
      ar & tracks;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  // inline bool SfmData::operator == (const SfmData& rhs) const{
 | 
			
		||||
  //   return cameras==rhs.cameras && tracks==rhs.tracks;
 | 
			
		||||
  // }
 | 
			
		||||
  /// print
 | 
			
		||||
  void print(const std::string& s = "") const {
 | 
			
		||||
    cout << "Number of cameras = " << number_cameras() << "\n";
 | 
			
		||||
    cout << "Number of tracks = " << number_tracks() << "\n";
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* ************************************************************************* */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue