Open3D (C++ API)
|
A point cloud consists of point coordinates, and optionally point colors and point normals. More...
#include <PointCloud.h>
Public Member Functions | |
PointCloud () | |
Default Constructor. More... | |
PointCloud (const std::vector< Eigen::Vector3d > &points) | |
Parameterized Constructor. More... | |
~PointCloud () override | |
PointCloud & | Clear () override |
Clear all elements in the geometry. More... | |
bool | IsEmpty () const override |
Returns true iff the geometry is empty. More... | |
Eigen::Vector3d | GetMinBound () const override |
Returns min bounds for geometry coordinates. More... | |
Eigen::Vector3d | GetMaxBound () const override |
Returns max bounds for geometry coordinates. More... | |
Eigen::Vector3d | GetCenter () const override |
Returns the center of the geometry coordinates. More... | |
AxisAlignedBoundingBox | GetAxisAlignedBoundingBox () const override |
Returns an axis-aligned bounding box of the geometry. More... | |
OrientedBoundingBox | GetOrientedBoundingBox () const override |
Returns an oriented bounding box of the geometry. More... | |
PointCloud & | Transform (const Eigen::Matrix4d &transformation) override |
Apply transformation (4x4 matrix) to the geometry coordinates. More... | |
PointCloud & | Translate (const Eigen::Vector3d &translation, bool relative=true) override |
Apply translation to the geometry coordinates. More... | |
PointCloud & | Scale (const double scale, const Eigen::Vector3d ¢er) override |
Apply scaling to the geometry coordinates. Given a scaling factor , and center , a given point is transformed according to . More... | |
PointCloud & | Rotate (const Eigen::Matrix3d &R, const Eigen::Vector3d ¢er) override |
Apply rotation to the geometry coordinates and normals. Given a rotation matrix , and center , a given point is transformed according to . More... | |
PointCloud & | operator+= (const PointCloud &cloud) |
PointCloud | operator+ (const PointCloud &cloud) const |
bool | HasPoints () const |
Returns 'true' if the point cloud contains points. More... | |
bool | HasNormals () const |
Returns true if the point cloud contains point normals. More... | |
bool | HasColors () const |
Returns true if the point cloud contains point colors. More... | |
PointCloud & | NormalizeNormals () |
Normalize point normals to length 1. More... | |
PointCloud & | PaintUniformColor (const Eigen::Vector3d &color) |
PointCloud & | RemoveNonFinitePoints (bool remove_nan=true, bool remove_infinite=true) |
Remove all points fromt he point cloud that have a nan entry, or infinite entries. More... | |
std::shared_ptr< PointCloud > | SelectByIndex (const std::vector< size_t > &indices, bool invert=false) const |
Function to select points from input pointcloud into output pointcloud. More... | |
std::shared_ptr< PointCloud > | VoxelDownSample (double voxel_size) const |
Function to downsample input pointcloud into output pointcloud with a voxel. More... | |
std::tuple< std::shared_ptr< PointCloud >, Eigen::MatrixXi, std::vector< std::vector< int > > > | VoxelDownSampleAndTrace (double voxel_size, const Eigen::Vector3d &min_bound, const Eigen::Vector3d &max_bound, bool approximate_class=false) const |
Function to downsample using geometry.PointCloud.VoxelDownSample. More... | |
std::shared_ptr< PointCloud > | UniformDownSample (size_t every_k_points) const |
Function to downsample input pointcloud into output pointcloud uniformly. More... | |
std::shared_ptr< PointCloud > | Crop (const AxisAlignedBoundingBox &bbox) const |
Function to crop pointcloud into output pointcloud. More... | |
std::shared_ptr< PointCloud > | Crop (const OrientedBoundingBox &bbox) const |
Function to crop pointcloud into output pointcloud. More... | |
std::tuple< std::shared_ptr< PointCloud >, std::vector< size_t > > | RemoveRadiusOutliers (size_t nb_points, double search_radius) const |
Function to remove points that have less than nb_points in a sphere of a given radius. More... | |
std::tuple< std::shared_ptr< PointCloud >, std::vector< size_t > > | RemoveStatisticalOutliers (size_t nb_neighbors, double std_ratio) const |
Function to remove points that are further away from their nb_neighbor neighbors in average. More... | |
bool | EstimateNormals (const KDTreeSearchParam &search_param=KDTreeSearchParamKNN(), bool fast_normal_computation=true) |
Function to compute the normals of a point cloud. More... | |
bool | OrientNormalsToAlignWithDirection (const Eigen::Vector3d &orientation_reference=Eigen::Vector3d(0.0, 0.0, 1.0)) |
Function to orient the normals of a point cloud. More... | |
bool | OrientNormalsTowardsCameraLocation (const Eigen::Vector3d &camera_location=Eigen::Vector3d::Zero()) |
Function to orient the normals of a point cloud. More... | |
std::vector< double > | ComputePointCloudDistance (const PointCloud &target) |
Function to compute the point to point distances between point clouds. More... | |
std::tuple< Eigen::Vector3d, Eigen::Matrix3d > | ComputeMeanAndCovariance () const |
std::vector< double > | ComputeMahalanobisDistance () const |
Function to compute the Mahalanobis distance for points in an input point cloud. More... | |
std::vector< double > | ComputeNearestNeighborDistance () const |
std::tuple< std::shared_ptr< TriangleMesh >, std::vector< size_t > > | ComputeConvexHull () const |
Function that computes the convex hull of the point cloud using qhull. More... | |
std::tuple< std::shared_ptr< TriangleMesh >, std::vector< size_t > > | HiddenPointRemoval (const Eigen::Vector3d &camera_location, const double radius) const |
This is an implementation of the Hidden Point Removal operator described in Katz et. al. 'Direct Visibility of Point Sets', 2007. More... | |
std::vector< int > | ClusterDBSCAN (double eps, size_t min_points, bool print_progress=false) const |
Cluster PointCloud using the DBSCAN algorithm Ester et al., "A Density-Based Algorithm for Discovering Clusters
in Large Spatial Databases with Noise", 1996. More... | |
std::tuple< Eigen::Vector4d, std::vector< size_t > > | SegmentPlane (const double distance_threshold=0.01, const int ransac_n=3, const int num_iterations=100) const |
Segment PointCloud plane using the RANSAC algorithm. More... | |
std::shared_ptr< PointCloud > | CreateFromVoxelGrid (const VoxelGrid &voxel_grid) |
Function to create a PointCloud from a VoxelGrid. More... | |
Public Member Functions inherited from open3d::geometry::Geometry3D | |
~Geometry3D () override | |
Public Member Functions inherited from open3d::geometry::Geometry | |
virtual | ~Geometry () |
GeometryType | GetGeometryType () const |
Returns one of registered geometry types. More... | |
int | Dimension () const |
Returns whether the geometry is 2D or 3D. More... | |
std::string | GetName () const |
void | SetName (const std::string &name) |
Static Public Member Functions | |
static std::shared_ptr< PointCloud > | CreateFromDepthImage (const Image &depth, const camera::PinholeCameraIntrinsic &intrinsic, const Eigen::Matrix4d &extrinsic=Eigen::Matrix4d::Identity(), double depth_scale=1000.0, double depth_trunc=1000.0, int stride=1, bool project_valid_depth_only=true) |
Factory function to create a pointcloud from a depth image and a camera model. More... | |
static std::shared_ptr< PointCloud > | CreateFromRGBDImage (const RGBDImage &image, const camera::PinholeCameraIntrinsic &intrinsic, const Eigen::Matrix4d &extrinsic=Eigen::Matrix4d::Identity(), bool project_valid_depth_only=true) |
Factory function to create a pointcloud from an RGB-D image and a camera model. More... | |
Static Public Member Functions inherited from open3d::geometry::Geometry3D | |
static Eigen::Matrix3d | GetRotationMatrixFromXYZ (const Eigen::Vector3d &rotation) |
Get Rotation Matrix from XYZ RotationType. More... | |
static Eigen::Matrix3d | GetRotationMatrixFromYZX (const Eigen::Vector3d &rotation) |
Get Rotation Matrix from YZX RotationType. More... | |
static Eigen::Matrix3d | GetRotationMatrixFromZXY (const Eigen::Vector3d &rotation) |
Get Rotation Matrix from ZXY RotationType. More... | |
static Eigen::Matrix3d | GetRotationMatrixFromXZY (const Eigen::Vector3d &rotation) |
Get Rotation Matrix from XZY RotationType. More... | |
static Eigen::Matrix3d | GetRotationMatrixFromZYX (const Eigen::Vector3d &rotation) |
Get Rotation Matrix from ZYX RotationType. More... | |
static Eigen::Matrix3d | GetRotationMatrixFromYXZ (const Eigen::Vector3d &rotation) |
Get Rotation Matrix from YXZ RotationType. More... | |
static Eigen::Matrix3d | GetRotationMatrixFromAxisAngle (const Eigen::Vector3d &rotation) |
Get Rotation Matrix from AxisAngle RotationType. More... | |
static Eigen::Matrix3d | GetRotationMatrixFromQuaternion (const Eigen::Vector4d &rotation) |
Get Rotation Matrix from Quaternion. More... | |
Data Fields | |
std::vector< Eigen::Vector3d > | points_ |
RGB colors of points. More... | |
std::vector< Eigen::Vector3d > | normals_ |
Points normals. More... | |
std::vector< Eigen::Vector3d > | colors_ |
Points coordinates. More... | |
Additional Inherited Members | |
Public Types inherited from open3d::geometry::Geometry | |
enum | GeometryType { GeometryType::Unspecified = 0, GeometryType::PointCloud = 1, GeometryType::VoxelGrid = 2, GeometryType::Octree = 3, GeometryType::LineSet = 4, GeometryType::MeshBase = 5, GeometryType::TriangleMesh = 6, GeometryType::HalfEdgeTriangleMesh = 7, GeometryType::Image = 8, GeometryType::RGBDImage = 9, GeometryType::TetraMesh = 10, GeometryType::OrientedBoundingBox = 11, GeometryType::AxisAlignedBoundingBox = 12 } |
Specifies possible geometry types. More... | |
Protected Member Functions inherited from open3d::geometry::Geometry3D | |
Geometry3D (GeometryType type) | |
Parameterized Constructor. More... | |
Eigen::Vector3d | ComputeMinBound (const std::vector< Eigen::Vector3d > &points) const |
Compute min bound of a list points. More... | |
Eigen::Vector3d | ComputeMaxBound (const std::vector< Eigen::Vector3d > &points) const |
Compute max bound of a list points. More... | |
Eigen::Vector3d | ComputeCenter (const std::vector< Eigen::Vector3d > &points) const |
Computer center of a list of points. More... | |
void | ResizeAndPaintUniformColor (std::vector< Eigen::Vector3d > &colors, const size_t size, const Eigen::Vector3d &color) const |
Resizes the colors vector and paints a uniform color. More... | |
void | TransformPoints (const Eigen::Matrix4d &transformation, std::vector< Eigen::Vector3d > &points) const |
Transforms all points with the transformation matrix. More... | |
void | TransformNormals (const Eigen::Matrix4d &transformation, std::vector< Eigen::Vector3d > &normals) const |
Transforms the normals with the transformation matrix. More... | |
void | TranslatePoints (const Eigen::Vector3d &translation, std::vector< Eigen::Vector3d > &points, bool relative) const |
Apply translation to the geometry coordinates. More... | |
void | ScalePoints (const double scale, std::vector< Eigen::Vector3d > &points, const Eigen::Vector3d ¢er) const |
Scale the coordinates of all points by the scaling factor scale . More... | |
void | RotatePoints (const Eigen::Matrix3d &R, std::vector< Eigen::Vector3d > &points, const Eigen::Vector3d ¢er) const |
Rotate all points with the rotation matrix R . More... | |
void | RotateNormals (const Eigen::Matrix3d &R, std::vector< Eigen::Vector3d > &normals) const |
Rotate all normals with the rotation matrix R . More... | |
Protected Member Functions inherited from open3d::geometry::Geometry | |
Geometry (GeometryType type, int dimension) | |
Parameterized Constructor. More... | |
A point cloud consists of point coordinates, and optionally point colors and point normals.
|
inline |
Default Constructor.
|
inline |
Parameterized Constructor.
points | Points coordinates. |
|
inlineoverride |
|
overridevirtual |
Clear all elements in the geometry.
Implements open3d::geometry::Geometry3D.
std::vector< int > open3d::geometry::PointCloud::ClusterDBSCAN | ( | double | eps, |
size_t | min_points, | ||
bool | print_progress = false |
||
) | const |
Cluster PointCloud using the DBSCAN algorithm Ester et al., "A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise", 1996.
Returns a list of point labels, -1 indicates noise according to the algorithm.
eps | Density parameter that is used to find neighbouring points. |
min_points | Minimum number of points to form a cluster. |
print_progress | If true the progress is visualized in the console. |
std::tuple< std::shared_ptr< TriangleMesh >, std::vector< size_t > > open3d::geometry::PointCloud::ComputeConvexHull | ( | ) | const |
Function that computes the convex hull of the point cloud using qhull.
std::vector< double > open3d::geometry::PointCloud::ComputeMahalanobisDistance | ( | ) | const |
Function to compute the Mahalanobis distance for points in an input point cloud.
std::tuple< Eigen::Vector3d, Eigen::Matrix3d > open3d::geometry::PointCloud::ComputeMeanAndCovariance | ( | ) | const |
Function to compute the mean and covariance matrix of a point cloud.
std::vector< double > open3d::geometry::PointCloud::ComputeNearestNeighborDistance | ( | ) | const |
Function to compute the distance from a point to its nearest neighbor in the input point cloud
std::vector< double > open3d::geometry::PointCloud::ComputePointCloudDistance | ( | const PointCloud & | target | ) |
Function to compute the point to point distances between point clouds.
For each point in the source
point cloud, compute the distance to the target
point cloud.
target | The target point cloud. |
|
static |
Factory function to create a pointcloud from a depth image and a camera model.
Given depth value d at (u, v) image coordinate, the corresponding 3d point is: z = d / depth_scale
x = (u - cx) * z / fx
y = (v - cy) * z / fy
depth | The input depth image can be either a float image, or a uint16_t image. |
intrinsic | Intrinsic parameters of the camera. |
extrinsic | Extrinsic parameters of the camera. |
depth_scale | The depth is scaled by 1 / depth_scale . |
depth_trunc | Truncated at depth_trunc distance. |
stride | Sampling factor to support coarse point cloud extraction. |
project_valid_depth_only | is true, return point cloud, which doesn't have nan point. If the value is false, return point cloud, which has a point for each pixel, whereas invalid depth results in NaN points. |
|
static |
Factory function to create a pointcloud from an RGB-D image and a camera model.
Given depth value d at (u, v) image coordinate, the corresponding 3d point is: z = d / depth_scale
x = (u - cx) * z / fx
y = (v - cy) * z / fy
image | The input image. |
intrinsic | Intrinsic parameters of the camera. |
extrinsic | Extrinsic parameters of the camera. |
project_valid_depth_only | is true, return point cloud, which doesn't have nan point. If the value is false, return point cloud, which has a point for each pixel, whereas invalid depth results in NaN points. |
std::shared_ptr< PointCloud > open3d::geometry::PointCloud::CreateFromVoxelGrid | ( | const VoxelGrid & | voxel_grid | ) |
Function to create a PointCloud from a VoxelGrid.
It transforms the voxel centers to 3D points using the original point cloud coordinate (with respect to the center of the voxel grid).
voxel_grid | The input VoxelGrid. |
std::shared_ptr< PointCloud > open3d::geometry::PointCloud::Crop | ( | const AxisAlignedBoundingBox & | bbox | ) | const |
Function to crop pointcloud into output pointcloud.
All points with coordinates outside the bounding box bbox
are clipped.
bbox | AxisAlignedBoundingBox to crop points. |
std::shared_ptr< PointCloud > open3d::geometry::PointCloud::Crop | ( | const OrientedBoundingBox & | bbox | ) | const |
Function to crop pointcloud into output pointcloud.
All points with coordinates outside the bounding box bbox
are clipped.
bbox | OrientedBoundingBox to crop points. |
bool open3d::geometry::PointCloud::EstimateNormals | ( | const KDTreeSearchParam & | search_param = KDTreeSearchParamKNN() , |
bool | fast_normal_computation = true |
||
) |
Function to compute the normals of a point cloud.
Normals are oriented with respect to the input point cloud if normals exist.
search_param | The KDTree search parameters for neighborhood search. |
fast_normal_computation | If true, the normal estiamtion uses a non-iterative method to extract the eigenvector from the covariance matrix. This is faster, but is not as numerical stable. |
|
overridevirtual |
Returns an axis-aligned bounding box of the geometry.
Implements open3d::geometry::Geometry3D.
|
overridevirtual |
Returns the center of the geometry coordinates.
Implements open3d::geometry::Geometry3D.
|
overridevirtual |
Returns max bounds for geometry coordinates.
Implements open3d::geometry::Geometry3D.
|
overridevirtual |
Returns min bounds for geometry coordinates.
Implements open3d::geometry::Geometry3D.
|
overridevirtual |
Returns an oriented bounding box of the geometry.
Implements open3d::geometry::Geometry3D.
|
inline |
Returns true
if the point cloud contains point colors.
|
inline |
Returns true
if the point cloud contains point normals.
|
inline |
Returns 'true' if the point cloud contains points.
std::tuple< std::shared_ptr< TriangleMesh >, std::vector< size_t > > open3d::geometry::PointCloud::HiddenPointRemoval | ( | const Eigen::Vector3d & | camera_location, |
const double | radius | ||
) | const |
This is an implementation of the Hidden Point Removal operator described in Katz et. al. 'Direct Visibility of Point Sets', 2007.
Additional information about the choice of radius for noisy point clouds can be found in Mehra et. al. 'Visibility of Noisy Point Cloud Data', 2010.
camera_location | All points not visible from that location will be removed. |
radius | The radius of the sperical projection. |
|
overridevirtual |
Returns true
iff the geometry is empty.
Implements open3d::geometry::Geometry3D.
|
inline |
Normalize point normals to length 1.
PointCloud open3d::geometry::PointCloud::operator+ | ( | const PointCloud & | cloud | ) | const |
PointCloud & open3d::geometry::PointCloud::operator+= | ( | const PointCloud & | cloud | ) |
bool open3d::geometry::PointCloud::OrientNormalsToAlignWithDirection | ( | const Eigen::Vector3d & | orientation_reference = Eigen::Vector3d(0.0, 0.0, 1.0) | ) |
Function to orient the normals of a point cloud.
orientation_reference | Normals are oriented with respect to orientation_reference. |
bool open3d::geometry::PointCloud::OrientNormalsTowardsCameraLocation | ( | const Eigen::Vector3d & | camera_location = Eigen::Vector3d::Zero() | ) |
Function to orient the normals of a point cloud.
camera_location | Normals are oriented with towards the camera_location. |
|
inline |
Assigns each point in the PointCloud the same color.
color | RGB colors of points. |
PointCloud & open3d::geometry::PointCloud::RemoveNonFinitePoints | ( | bool | remove_nan = true , |
bool | remove_infinite = true |
||
) |
Remove all points fromt he point cloud that have a nan entry, or infinite entries.
Also removes the corresponding normals and color entries.
remove_nan | Remove NaN values from the PointCloud. |
remove_infinite | Remove infinite values from the PointCloud. |
std::tuple< std::shared_ptr< PointCloud >, std::vector< size_t > > open3d::geometry::PointCloud::RemoveRadiusOutliers | ( | size_t | nb_points, |
double | search_radius | ||
) | const |
Function to remove points that have less than nb_points
in a sphere of a given radius.
nb_points | Number of points within the radius. |
search_radius | Radius of the sphere. |
std::tuple< std::shared_ptr< PointCloud >, std::vector< size_t > > open3d::geometry::PointCloud::RemoveStatisticalOutliers | ( | size_t | nb_neighbors, |
double | std_ratio | ||
) | const |
Function to remove points that are further away from their nb_neighbor
neighbors in average.
nb_neighbors | Number of neighbors around the target point. |
std_ratio | Standard deviation ratio. |
|
overridevirtual |
Apply rotation to the geometry coordinates and normals. Given a rotation matrix , and center , a given point is transformed according to .
R | A 3x3 rotation matrix |
center | Rotation center that is used for the rotation. |
Implements open3d::geometry::Geometry3D.
|
overridevirtual |
Apply scaling to the geometry coordinates. Given a scaling factor , and center , a given point is transformed according to .
scale | The scale parameter that is multiplied to the points/vertices of the geometry. |
center | Scale center that is used to resize the geometry. |
Implements open3d::geometry::Geometry3D.
std::tuple< Eigen::Vector4d, std::vector< size_t > > open3d::geometry::PointCloud::SegmentPlane | ( | const double | distance_threshold = 0.01 , |
const int | ransac_n = 3 , |
||
const int | num_iterations = 100 |
||
) | const |
Segment PointCloud plane using the RANSAC algorithm.
distance_threshold | Max distance a point can be from the plane model, and still be considered an inlier. |
ransac_n | Number of initial points to be considered inliers in each iteration. |
num_iterations | Number of iterations. |
std::shared_ptr< PointCloud > open3d::geometry::PointCloud::SelectByIndex | ( | const std::vector< size_t > & | indices, |
bool | invert = false |
||
) | const |
Function to select points from input
pointcloud into output
pointcloud.
Points with indices in
indices | are selected. |
indices | Indices of points to be selected. |
invert | Set to True to invert the selection of indices. |
|
overridevirtual |
Apply transformation (4x4 matrix) to the geometry coordinates.
Implements open3d::geometry::Geometry3D.
|
overridevirtual |
Apply translation to the geometry coordinates.
translation | A 3D vector to transform the geometry. |
relative | If true , the translation is directly applied to the geometry. Otherwise, the geometry center is moved to the translation . |
Implements open3d::geometry::Geometry3D.
std::shared_ptr< PointCloud > open3d::geometry::PointCloud::UniformDownSample | ( | size_t | every_k_points | ) | const |
Function to downsample input pointcloud into output pointcloud uniformly.
The sample is performed in the order of the points with the 0-th point always chosen, not at random.
every_k_points | Sample rate, the selected point indices are [0, k, 2k, …]. |
std::shared_ptr< PointCloud > open3d::geometry::PointCloud::VoxelDownSample | ( | double | voxel_size | ) | const |
Function to downsample input pointcloud into output pointcloud with a voxel.
Normals and colors are averaged if they exist.
voxel_size | Defines the resolution of the voxel grid, smaller value leads to denser output point cloud. |
std::tuple< std::shared_ptr< PointCloud >, Eigen::MatrixXi, std::vector< std::vector< int > > > open3d::geometry::PointCloud::VoxelDownSampleAndTrace | ( | double | voxel_size, |
const Eigen::Vector3d & | min_bound, | ||
const Eigen::Vector3d & | max_bound, | ||
bool | approximate_class = false |
||
) | const |
Function to downsample using geometry.PointCloud.VoxelDownSample.
Also records point cloud index before downsampling.
voxel_size | Voxel size to downsample into. |
min_bound | Minimum coordinate of voxel boundaries |
max_bound | Maximum coordinate of voxel boundaries |
approximate_class | Whether to approximate. |
std::vector<Eigen::Vector3d> open3d::geometry::PointCloud::colors_ |
Points coordinates.
std::vector<Eigen::Vector3d> open3d::geometry::PointCloud::normals_ |
Points normals.
std::vector<Eigen::Vector3d> open3d::geometry::PointCloud::points_ |
RGB colors of points.