A point cloud object. More...
#include <cvb/point_cloud.hpp>
Inherited by DensePointCloud, and SparsePointCloud.
Public Member Functions | |
PointCloudLayout | Layout () const |
Get the layout of the available buffers/planes of the given point cloud. More... | |
class DataType | DataType () const |
Gets the DataType of the x,y,z(,w) components of the given PointCloud. More... | |
std::size_t | NumPoints () const |
Gets the number of x,y,z(,w) points in the given point cloud. More... | |
ComponentsPointers3D | PointComponents () const |
Tries to get the point components from the given point cloud. More... | |
template<class T > | |
std::size_t | Points (Point3D< T > *&points) const |
Gets the 3D points from the given point cloud. More... | |
template<class T > | |
std::size_t | PointsH (Point3DH< T > *&pointsH) const |
Tries to get the 3D points from the given point cloud. More... | |
Cuboid | CalculateBoundingBox () const |
Calculates the minimum and maximum extent of the point cloud. More... | |
Point3D< double > | CalculateCenterOfGravity () const |
Calculates the center of gravity of the point cloud. More... | |
Matrix3D | CalculateCovarianceMatrix () const |
Calculates the covariance matrix of the point cloud. More... | |
Plane3D | FitPlane () const |
Fits a plane in the points of the point cloud without cropping it. More... | |
Plane3D | FitPlane (const Cuboid &aoi) const |
Fits a plane in the points of the point cloud for a specified area of interest. More... | |
template<class T > | |
std::shared_ptr< T > | Crop (const Cuboid &clipBox) const |
Creates a new point cloud which only consists of the points inside the clip box. More... | |
template<class T > | |
std::shared_ptr< T > | FrustumCrop (const Cuboid &clipBox, Angle theta, Angle phi) const |
Creates a new point cloud which only consists of the points inside the clipBox, where the orientation of the two boundary planes Z=Zmin and Z=Zmax can be modified by angles theta and phi. More... | |
template<class T > | |
std::shared_ptr< T > | PlaneCrop (const Plane3D &plane, const ValueRange< double > &range, CropRange cropRange) const |
Creates a new point cloud where points within or outside a range parallel to given plane are cropped. More... | |
template<class T > | |
std::shared_ptr< T > | PlaneCrop (const Plane3D &plane, double threshold, CropDirection cropBelowAbove=CropDirection::Below) const |
Creates a new point cloud which only consists of the points below or above given plane. More... | |
PointCloudPtr | Downsample (DownSampleMode mode, int value) const |
Creates a new point cloud which has several points being removed dependent on the down sample mode and value. More... | |
PointCloudPtr | Duplicate () const |
Creates a new point cloud which is a copy this point cloud. More... | |
void | Save (const String &fileName) const |
Saves the given point cloud to the file with the given FileName. More... | |
PointCloudPtr | Convert (PointCloudFlags flags) const |
Creates a new point cloud, which is a copy from this point cloud, but with possibly different data type and number of components. More... | |
PointCloudPtr | Scale (Factors3D factors) const |
Creates a new point cloud with all points being scaled by the given factors. More... | |
PointCloudPtr | Transform (const AffineMatrix3D &transformation) const |
Creates a new point cloud with all points being transformed by the given transformation. More... | |
PointCloudPtr | Transform (const Matrix3DH &transformation) const |
Creates a new point cloud with all points being transformed by the given transformation. More... | |
void | Transform (const AffineMatrix3D &affineTransformation, PointCloud &pointCloud) |
Transforms all points in this point cloud by the given AffineTransformation and stores them in the given point cloud. More... | |
void | Transform (const Cvb::Matrix3DH &transformation, PointCloud &pointCloud) |
Transforms all points in this point cloud by the given transformation and stores them in the given point cloud. More... | |
std::unique_ptr< Cvb::Image > | RangeMap (ValueRange< double > xRange, ValueRange< double > yRange, Size2D< int > size, double background) const |
Creates a new range map image via linear projection in negative z-direction. More... | |
int | PlaneCount () const noexcept |
Gets the number of planes enumerated by this object. More... | |
std::vector< PlanePtr > | Planes () const |
Gets all available planes enumerated by this object. More... | |
PlanePtr | Plane (int index) const |
Index based plane access. More... | |
size_t | MemorySize (PointCloudFlags flags, Cvb::PointCloudFileFormat format) const |
Determines the amount of memory needed for ToMemory. More... | |
template<class Point > | |
size_t | MemorySize (Cvb::PointCloudFileFormat format) const |
Determines the amount of memory needed for ToMemory. More... | |
void | ToMemory (PointCloudFlags flags, Cvb::PointCloudFileFormat format, size_t size, void *buffer) const |
Saves the point cloud to the memory in the given format. More... | |
template<class Point > | |
void | ToMemory (Cvb::PointCloudFileFormat format, size_t size, std::uint8_t *buffer) const |
Saves the point cloud to the memory in the given format. More... | |
void * | Handle () const noexcept |
Returns C-API style handle to Node Object. More... | |
Static Public Member Functions | |
static PointCloudPtr | FromHandle (HandleGuard< PointCloud > &&guard) |
Creates a point cloud from a classic API handle. More... | |
template<class T > | |
static std::shared_ptr< T > | FromComposite (CompositePtr object) |
Creates a point cloud from a composite. More... | |
static PointCloudPtr | FromMemory (void *buffer, size_t size, PointCloudFlags flags, Cvb::PointCloudFileFormat format) |
Creates a point cloud reading memory from buffer. More... | |
template<class Point > | |
static PointCloudPtr | FromMemory (void *buffer, size_t size, Cvb::PointCloudFileFormat format) |
Creates a point cloud reading memory from buffer. More... | |
Related Functions | |
(Note that these are not member functions.) | |
template<class VISITOR > | |
auto | Visit (VISITOR &&visitor, const PointCloud &cloud) |
Creates a Cvb::Block based on the cloud object's access trait and pixel type and calls the given visitor with it. More... | |
template<class T , class VISITOR > | |
auto | VisitAs (VISITOR &&visitor, const PointCloud &cloud) |
Creates a Cvb::Block based on the cloud object's access trait and given pixel type T and calls the given visitor with it. More... | |
A point cloud object.
At its core the point cloud is a collection of 3D points (x, y, z and optionally w).
|
inline |
Calculates the minimum and maximum extent of the point cloud.
Any | exception derived from std::exception including CvbException. |
|
inline |
Calculates the center of gravity of the point cloud.
Any | exception derived from std::exception including CvbException. |
|
inline |
Calculates the covariance matrix of the point cloud.
Any | exception derived from std::exception including CvbException. |
|
inline |
Creates a new point cloud, which is a copy from this point cloud, but with possibly different data type and number of components.
[in] | flags | Flags specifying the kind of point cloud to be created. |
Any | exception derived from std::exception including CvbException. |
|
inline |
Creates a new point cloud which only consists of the points inside the clip box.
T | Point cloud type (dense or sparse). Note, that point clouds will have the same type after cropping. |
[in] | clipBox | Cuboid defining the bounds for the points to be copied (min/max are inclusive). |
Any | exception derived from std::exception including CvbException. |
Gets the DataType of the x,y,z(,w) components of the given PointCloud.
Any | exception derived from std::exception including CvbException. |
|
inline |
Creates a new point cloud which has several points being removed dependent on the down sample mode and value.
[in] | mode | Downsample strategy. |
[in] | value | Every Value-th point will be removed (must be greater than one). |
Any | exception derived from std::exception including CvbException. |
|
inline |
Creates a new point cloud which is a copy this point cloud.
Any | exception derived from std::exception including CvbException. |
|
inline |
Fits a plane in the points of the point cloud without cropping it.
Any | exception derived from std::exception including CvbException. |
Fits a plane in the points of the point cloud for a specified area of interest.
[in] | aoi | Bounding cuboid to extract points from. |
Any | exception derived from std::exception including CvbException. |
|
inlinestatic |
Creates a point cloud from a composite.
[in] | object | A composite to share. |
Any | exception derived from std::exception including CvbException. |
|
inlinestatic |
Creates a point cloud from a classic API handle.
[in] | guard | Life time guard for C-API handle. |
Any | exception derived from std::exception including CvbException. |
The point cloud takes ownership of the handle, so you must share it before using this function.
|
inlinestatic |
Creates a point cloud reading memory from buffer.
The following data formats are supported:
Name | Extension(s) |
---|---|
Polygon File Format | ply |
Wavefront OBJ | obj |
Stereo Lithography | stl |
ASCII | asc, pts, txt, xyz |
Point | 3D point type. |
[in] | buffer | Raw pointer to buffer with given size. |
[in] | size | Size of buffer. |
[in] | format | The data format the buffer is in. |
Any | exception derived from std::exception including CvbException. |
|
inlinestatic |
Creates a point cloud reading memory from buffer.
The following data formats are supported:
Name | Extension(s) |
---|---|
Polygon File Format | ply |
Wavefront OBJ | obj |
Stereo Lithography | stl |
ASCII | asc, pts, txt, xyz |
[in] | buffer | Raw pointer to buffer with given size. |
[in] | size | Size of buffer. |
[in] | flags | Point cloud flags. |
[in] | format | The data format the buffer is in. |
Any | exception derived from std::exception including CvbException. |
|
inline |
Creates a new point cloud which only consists of the points inside the clipBox, where the orientation of the two boundary planes Z=Zmin and Z=Zmax can be modified by angles theta and phi.
For theta, phi = 0,0 the function will give the same result as Crop(). Angle theta tilts the two Z-boundary planes towards the (positive) Y-axis. Additionally, phi rotates the tilted Z-boundary planes around the Z-axis (for theta=0, phi will have no effect, because it is then just an inplane-rotation). The two Z-boundary planes will stay parallel, but no longer necessarily orthogonal to the lateral boundary planes. Note, that only the Z-boundaries are tilted and not the whole bounding box, i.e. X- and Y-boundaries will stay the same.
T | Point cloud type (dense or sparse). Note, that point clouds will have the same type after cropping. |
[in] | clipBox | Cuboid defining the bounds for the points to be copied (min/max are inclusive). |
[in] | theta | Tilt angle of the two Z-boundary planes Z=Zmin and Z=Zmax towards the positive Y-axis. |
[in] | phi | Rotation angle of the tilted Z-boundary planes around the Z-axis. If Theta = 0, Phi will have no effect. |
Any | exception derived from std::exception including CvbException. |
|
inlinenoexcept |
Returns C-API style handle to Node Object.
|
inline |
Get the layout of the available buffers/planes of the given point cloud.
Any | exception derived from std::exception including CvbException. |
|
inline |
Determines the amount of memory needed for ToMemory.
The data format to be used is determined by the format. The following file formats are supported:
Name | Extension(s) |
---|---|
Polygon File Format | ply |
Wavefront OBJ | obj |
Stereo Lithography | stl |
ASCII | asc, pts, txt, xyz |
Point | 3D point type. |
[in] | format | The data format to be used for the export. |
Any | exception derived from std::exception including CvbException. |
|
inline |
Determines the amount of memory needed for ToMemory.
The data format to be used is determined by the format. The following file formats are supported:
Name | Extension(s) |
---|---|
Polygon File Format | ply |
Wavefront OBJ | obj |
Stereo Lithography | stl |
ASCII | asc, pts, txt, xyz |
[in] | flags | Point cloud flags. |
[in] | format | The data format to be used for the export. |
Any | exception derived from std::exception including CvbException. |
|
inline |
Gets the number of x,y,z(,w) points in the given point cloud.
Any | exception derived from std::exception including CvbException. |
Index based plane access.
[in] | index | Index of the plane. |
Any | exception derived from std::exception including CvbException. |
If the plane does not exist the access will throw.
|
inlinenoexcept |
Gets the number of planes enumerated by this object.
Any | exception derived from std::exception including CvbException. |
|
inline |
Creates a new point cloud where points within or outside a range parallel to given plane are cropped.
The plane is defined by the hessian normal form:
Points are cropped within or outside a range parallel to the given plane. The range is defined by range. Note, that Range.Max and Range.Min are applied along normal direction.
In order to define a range around the plane, maximum and minimum range have to be positive and negative respectively.
If the input point cloud is dense, cropped points are set non-confident. Lines and columns at the borders containing only non-confident points are removed. If the input point cloud is dense and does not contain a confidence plane, a confidence plane will be added to the cropped point cloud.
T | Point cloud type (dense or sparse). Note, that point clouds will have the same type after cropping. |
[in] | plane | Points parallel to this plane will be cropped. |
[in] | range | Points within or outside this range will be cropped. |
[in] | cropRange | Indicates whether points should be cropped within or outside the range. |
Any | exception derived from std::exception including CvbException. |
|
inline |
Creates a new point cloud which only consists of the points below or above given plane.
The plane is defined by the hessian normal form:
Above plane means all points with z values greater than the plane are cropped. It makes no difference in which direction the given normal points. The normal is always converted, so that it points up (positive z value). Note, if Normal.Z equals 0, "below" and "above" is undefined and thus no cropping is done. Instead the input point cloud will be duplicated.
If the input point cloud is dense, points beyond the plane are set non-confident. Lines and columns at the borders containing only non-confident points are removed. If the input point cloud is dense and does not contain a confidence plane, a confidence plane will be added to the cropped point cloud.
T | Point cloud type (dense or sparse). Note, that point clouds will have the same type after cropping. |
[in] | plane | Points beyond this plane will be cropped. |
[in] | threshold | Points below plane plus this value and points above plane minus this value are cropped respectively. This threshold should be set, if plane is calculated via FitPlane(). It ensures, that all points beyond this plane plus noise are cropped. |
[in] | cropBelowAbove | Indicates if points should either be cropped below or above plane (optional, default value: CropDirection::Below). |
Any | exception derived from std::exception including CvbException. |
|
inline |
Gets all available planes enumerated by this object.
Any | exception derived from std::exception including CvbException. |
|
inline |
Tries to get the point components from the given point cloud.
Any | exception derived from std::exception including CvbException. |
|
inline |
Gets the 3D points from the given point cloud.
[in] | points | The variable to be filled with pointer to first point in PointCloud. |
Any | exception derived from std::exception including CvbException. |
|
inline |
Tries to get the 3D points from the given point cloud.
[in] | pointsH | The variable to be filled with pointer to first point in PointCloud. |
Any | exception derived from std::exception including CvbException. |
|
inline |
Creates a new range map image via linear projection in negative z-direction.
[in] | xRange | Input window along the x-axis (inclusive). |
[in] | yRange | Input window along the y-axis (inclusive). |
[in] | size | Target size of RangeMap in pixels (greater or equal to 2x2). |
[in] | background | Background value (initialization value for RangeMap). |
Any | exception derived from std::exception including CvbException. |
|
inline |
Saves the given point cloud to the file with the given FileName.
[in] | fileName | Complete path where to save the file to. |
Any | exception derived from std::exception including CvbException. |
|
inline |
Creates a new point cloud with all points being scaled by the given factors.
[in] | factors | Scale factors to be applied to each point. |
Any | exception derived from std::exception including CvbException. |
|
inline |
Saves the point cloud to the memory in the given format.
The data format to be used is determined by the format. The following file formats are supported:
Name | Extension(s) |
---|---|
Polygon File Format | ply |
Wavefront OBJ | obj |
Stereo Lithography | stl |
ASCII | asc, pts, txt, xyz |
Stereo Lithography (STL) is only supported if polygon information is present.
Point | 3D point type. |
[in] | format | The data format to be used for the export. |
[in] | size | Size of buffer. |
[in] | buffer | Raw pointer to buffer with given size, where memory is written to. |
Any | exception derived from std::exception including CvbException. |
|
inline |
Saves the point cloud to the memory in the given format.
The data format to be used is determined by the format. The following file formats are supported:
Name | Extension(s) |
---|---|
Polygon File Format | ply |
Wavefront OBJ | obj |
Stereo Lithography | stl |
ASCII | asc, pts, txt, xyz |
Stereo Lithography (STL) is only supported if polygon information is present.
[in] | flags | Point cloud flags. |
[in] | format | The data format to be used for the export. |
[in] | size | Size of buffer. |
[in] | buffer | Raw pointer to buffer with given size, where memory is written to. |
Any | exception derived from std::exception including CvbException. |
|
inline |
Transforms all points in this point cloud by the given AffineTransformation and stores them in the given point cloud.
[in] | affineTransformation | Homogeneous transformation matrix. AffineMatrix3D is a compact version of CVC3DMatrixH with the last row being { 0, 0, 0, 1 }. So no perspective transformation is possible, but translation, rotation and scaling is. |
[out] | pointCloud | Handle to point cloud were the transformed points are stored in. |
Any | exception derived from std::exception including CvbException. |
|
inline |
Creates a new point cloud with all points being transformed by the given transformation.
[in] | transformation | Homogeneous transformation matrix. |
Any | exception derived from std::exception including CvbException. |
|
inline |
Transforms all points in this point cloud by the given transformation and stores them in the given point cloud.
[in] | transformation | Homogeneous transformation matrix. |
[out] | pointCloud | Handle to point cloud were the transformed points are stored in. |
Any | exception derived from std::exception including CvbException. |
|
inline |
Creates a new point cloud with all points being transformed by the given transformation.
[in] | transformation | Homogeneous transformation matrix. |
Any | exception derived from std::exception including CvbException. |
|
related |
Creates a Cvb::Block based on the cloud object's access trait and pixel type and calls the given visitor with it.
VISITOR | Callable that is called with the typed CvbConcepts::Block. |
[in] | visitor | Callable of signature auto(Block<T,ACCESS_TRAIT>). |
[in] | cloud | PointCloud to create typed CvbConcepts::Block for. |
std::runtime_error | if no pixel type could be matched. |
std::domain_error | if properties of the planes differ. |
|
related |
Creates a Cvb::Block based on the cloud object's access trait and given pixel type T and calls the given visitor with it.
T | Type of the pixel, that can be accessed through the Block. |
VISITOR | Callable that is called with the typed CvbConcepts::Block. |
[in] | visitor | Callable of signature auto(Block<T,ACCESS_TRAIT>). |
[in] | cloud | PointCloud to create typed CvbConcepts::Block for. |
std::runtime_error | if no pixel type could be matched. |
std::domain_error | if properties of the planes differ. |