Point clouds are collections of data points in 3D space, typically representing the surface of objects or environments. They are often captured by Area3D sensors, laser triangulation systems or stereo cameras. A point cloud typically contains at least X, Y, and Z components. In some cases, confidence values are included to indicate the reliability of the Z values. Point clouds consisting only of X, Y, Z, and optionally confidence values are relatively simple. For these scenarios, a convenient approach for streaming and processing is available through the CVB point cloud stream and the CVB point cloud classes, where data can be accessed more easily can be used.
However, some point clouds include additional data, such as RGB images or surface normals. For these cases, more advanced solutions like CVB composite streaming and the CVB Composite classes are required, where data must be accessed in a more generic manner.
Point Cloud Components | Acquisition | Point Cloud Class | Data Access | |||
---|---|---|---|---|---|---|
X, Y, Z + Confidence | ⇒ | Point Cloud Stream | ⇒ | CVB Point Cloud | ⇒ | Point Cloud Access |
⇒ | Load & Create | ⇒ | ||||
↑ conversion (if possible) ↑ | ||||||
X, Y, Z + Confidence + RGB image + Normals + Any other data | ⇒ | Composite Stream | ⇒ | CVB Composite | ⇒ | Composite Access |
As mentioned earlier, for simple point clouds containing only X, Y, Z, and optionally a confidence value, the CVB point cloud classes — Cvb::PointCloud
in C++, Stemmer.Cvb.PointCloud
in .NET, and cvb.PointCloud
in Python — can be used for processing. These classes provide access to point cloud values as well as basic processing tools, such as cropping and transformations.
CVB point clouds are typically acquired from 3D cameras that support simple point cloud streaming or from files or direct creation with CVB. For details on accessing point cloud data, see Access to Simple Point Clouds.
Generally CVB also distinguishes between organized (dense) point clouds and un-organized (sparse) point clouds:
An organized (dense) point cloud is structured like a 2D image, where the points are arranged in a grid with rows and columns. This structure is typically obtained from depth cameras, stereo vision, and 3D sensors using laser triangulation. The advantage of an organized point cloud is that neighboring points are inherently known, making operations like filtering, segmentation, and normal estimation more efficient. In CVB organized point clouds are represented by the classes:
Cvb::DensePointCloud
(C++)Stemmer.Cvb.DensePointCloud
(.NET)cvb.DensePointCloud
(Python)Note that some CVB tools, such as the DNC tool for CAD-based 3D object recognition, require organized (dense) point clouds.
An unorganized (sparse) point cloud is a collection of 3D points without any inherent structure. The points are scattered in space and do not follow a grid-like pattern. Unorganized point clouds typically result from merging multiple datasets or applying affine transformations. In CVB unorganized point clouds are represented by the classes:
Cvb::SparsePointCloud
(C++)Stemmer.Cvb.SparsePointCloud
(.NET)cvb.SparsePointCloud
(Python)The CVB composite is a flexible, generic data container capable of holding various types of data. It is represented by the following classes:
Cvb::Composite
(C++)Stemmer.Cvb.Composite
(.NET)cvb.Composite
(Python)A composite has a member variable called "Purpose," which specifies its intended use (e.g., Cvb::CompositePurpose::PointCloud
). A composite can contain multiple items, which can be of the following types:
Cvb::PlaneEnumerator
: A container that holds several planes, typically representing a point cloud.Cvb::Plane
: A single plane, such as a confidence plane.Cvb::Image
: An image.Cvb::PFNCBuffer
: A PFNC buffer following the pixel format naming convention.Cvb::Buffer
and Cvb::HandleOnly
: Generic raw buffer.When working with composites, the content may not be immediately known. Therefore, it's important to first analyze the composite, as described in the section Analyze your Composite in C++ and .NET or in Python.
CVB composites are typically obtained from 3D cameras via composite streaming. For details on accessing composite data, see Access to Point Cloud Composites.