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:

mrpt::vision::bundle_adj_full

#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(const 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:

loadFromTextFile

loadFromTextFile

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(const 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.