Point Clouds in Libpointmatcher
The base structure containing library functionality is called
PointMatcher. It is restricted to a particular scalar type T through the use of a template:
PointMatcher<T>. In almost all situations the type T will either be
float and provides developers with the flexibility of choosing which best suits their application. For simplicity, we recommend using an abbreviated type identifier for
PointMatcher. This could for example be the following:
typedef PointMatcher<float> PM;
In libpointmatcher, point clouds are encapsulated in
DataPoints objects. DataPoints objects are composed of the following members :
- Features matrix
- Feature Labels
- Descriptors matrix
- Descriptor Labels
Features is an Eigen matrix typically containing the coordinates of the points which form the cloud. Each column corresponds to a point in the cloud. The rows correspond to the dimensions of the points in homogeneous coordinates. Homogeneous coordinates are used to allow for translations and rotations. For 2D point clouds, there will thus be 3 rows and for 4 rows for 3D point clouds.
Each row of the features matrix can be given a human readable label such as
Z and the
group of labels is stored as a vector.
Descriptors are additional information about each point in the cloud. For example these may include an orientation vector pointing to the sensor location, or a surface normal vector. Following the structure of the features matrix, descriptors are stored in a single Eigen matrix with each column representing a point in the cloud. Descriptors are stacked in the rows of the features matrix and thus a single descriptors will span several rows.
Human readable labels are used to identify the individual descriptors in the descriptors matrix. For example if the point cloud contains a 3D orientation and 3D surface normal descriptors for each points we may assign the label: "orientation" to the first three rows of the descriptor matrix and the label "normal" to the last three.