struct mrpt::vision::TSequenceFeatureObservations
A complete sequence of observations of features from different camera frames (poses).
This structure is the input to some (Bundle-adjustment) methods in mrpt::vision Pixel coordinates can be either “raw” or “undistorted”. Read the doc of functions handling this structure to see what they expect.
See also:
#include <mrpt/vision/types.h> struct TSequenceFeatureObservations: public std::vector< TFeatureObservation > { // typedefs typedef std::vector<TFeatureObservation> BASE; // construction TSequenceFeatureObservations(); TSequenceFeatureObservations(size_t size); TSequenceFeatureObservations(const TSequenceFeatureObservations& o); // methods void saveToTextFile(const std::string& filName, bool skipFirstCommentLine = false) const; void loadFromTextFile(const std::string& filName); bool saveAsSBAFiles( const TLandmarkLocationsVec& pts, const std::string& pts_file, const TFramePosesVec& cams, const std::string& cams_file ) const; size_t removeFewObservedFeatures(size_t minNumObservations = 3); void decimateCameraFrames(size_t decimate_ratio); void compressIDs( std::map<TCameraPoseID, TCameraPoseID>* old2new_camIDs = nullptr, std::map<TLandmarkID, TLandmarkID>* old2new_lmIDs = nullptr ); };
Methods
void saveToTextFile( const std::string& filName, bool skipFirstCommentLine = false ) const
Saves all entries to a text file, with each line having this format: #FRAME_ID #FEAT_ID #PIXEL_X #PIXEL_Y The file is self-descripting, since the first line contains a comment line (starting with ‘’) explaining the format.
Saves all entries to a text file, with each line having this format: #FRAME_ID #FEAT_ID #PIXEL_X #PIXEL_Y.
Generated files can be loaded from MATLAB.
Parameters:
std::exception |
On I/O error |
See also:
void loadFromTextFile(const std::string& filName)
Load from a text file, in the format described in saveToTextFile.
Parameters:
std::exception |
On I/O or format error |
bool saveAsSBAFiles( const TLandmarkLocationsVec& pts, const std::string& pts_file, const TFramePosesVec& cams, const std::string& cams_file ) const
Save the list of observations + the point locations + the camera frame poses to a pair of files in the format used by the Sparse Bundle Adjustment (SBA) C++ library.
Point file lines: X Y Z nframes frame0 x0 y0 frame1 x1 y1 …
Camera file lines: qr qx qy qz x y z (Pose as a quaternion)
Returns:
false on any error
size_t removeFewObservedFeatures(size_t minNumObservations = 3)
Remove all those features that don’t have a minimum number of observations from different camera frame IDs.
Returns:
the number of erased entries.
See also:
After calling this you may want to call compressIDs
void decimateCameraFrames(size_t decimate_ratio)
Remove all but one out of decimate_ratio camera frame IDs from the list (eg: from N camera pose IDs at return there will be just N/decimate_ratio) The algorithm first builds a sorted list of frame IDs, then keep the lowest ID, remove the next “decimate_ratio-1”, and so on.
Remove one out of decimate_ratio camera frame IDs from the list.
See also:
After calling this you may want to call compressIDs
void compressIDs( std::map<TCameraPoseID, TCameraPoseID>* old2new_camIDs = nullptr, std::map<TLandmarkID, TLandmarkID>* old2new_lmIDs = nullptr )
Rearrange frame and feature IDs such as they start at 0 and there are no gaps.
Parameters:
old2new_camIDs |
If provided, the mapping from old to new IDs is stored here. |
old2new_lmIDs |
If provided, the mapping from old to new IDs is stored here. |