MEPP2 Project
Point Cloud processing API

The Point Cloud processing API is provided by the Point Cloud concept detailed below.

See also:

  • Concepts for a general picture on MEPP2 concepts.


Point Cloud concept

dot_inline_dotgraph_10.png

Introduction

The objective of the PointCloud concept is to enable the manipulation of Point Cloud (PC) objects within the geometrical context of mesh manipulations. Point Clouds can be conceived as the geometric information of more general concepts like meshes or cell-sets. The PointCloud concept offers the ability to manipulate such point clouds independently from such other concepts for example when working on point cloud data coming from specialized sources (e.g. LIDAR data).

Notations

  • PC    A type that is a model of PointCloud.
  • pc    An object of type PC.
  • u,v, w    Vertex descriptors.

Associated types

Type Reference Description
vertices_size_type VertexListGraph (boost) The unsigned integer type used to represent the number of point in the point cloud.
vertex_descriptor Graph (boost) A vertex descriptor corresponds to a unique node in a Point Cloud instance. A vertex descriptor must be Default Constructible, Assignable, and Equality Comparable.
vertex_iterator VertexListGraph (boost) A vertex iterator (obtained via vertices(g)) provides access to all of the vertices in a point cloud. A vertex iterator type must meet the requirements of MultiPassInputIterator. The value type of the vertex iterator must be the vertex descriptor of the point cloud.

Valid expressions

Expression Reference Returns Description
Traversals
vertices(pc) VertexListGraph (boost) std::pair<vertex_iterator, vertex_iterator> Returns an iterator-range providing access to all the points in the point cloud pc.
size_of_vertices(pc) ListGraphExtensions (MEPP2) vertices_size_type Returns the exact number of vertices in the point cloud pc, as opposed to ‘'num_vertices(pc)’which returns an upper bound.\ilinebr </td> </tr> <tr class="markdownTableRowEven"> <td class="markdownTableBodyNone">num_vertices(pc)\ilinebr </td> <td class="markdownTableBodyNone"> [VertexListGraph (boost)](http://www.boost.org/doc/libs/1_60_0/libs/graph/doc/VertexListGraph.html)\ilinebr </td> <td class="markdownTableBodyNone">vertices_size_type\ilinebr </td> <td class="markdownTableBodyNone"> Returns an upper bound of the number of vertices in the point cloudpc. Provided only for compatibility with base concepts. Its usage is highly discouraged in favor of'size_of_vertices(pc)'`.
Mutability
add_vertex(pc) MutableGraph (boost) vertex_descriptor Add a new vertex to the point cloud. The vertex_descriptor for the new vertex is returned.
remove_vertex(v, pc) MutableGraph (boost) void Remove v from the vertex set of point cloud.
Miscelaneous
null_vertex() Graph (boost) vertex_descriptor Returns a special vertex_descriptor object which does not refer to any vertex of point cloud object which type is PC.
Neighborhood
create_kd_tree(pc) Smart pointer to a k-d tree Returns a smart pointer to a k-d tree that can be later used for nearest neighbor searches. The smart pointer must NOT be manually deleted.
kNN_search(kd_tree, k, query, pc) std::pair<
  std::vector<vertex_descriptor>,   std::vector<double>
>
Looks for the 'k' nearest neighbors of the point 'query' in the point cloud 'pc' using the previously created k-d tree 'kd_tree'. Returns a pair of vectors: the first vector contains the vertex descriptors of the k nearest neighbors, the second vector contains the distance of each nearest neighbor to the 'query' point. The 'query' point is given by its geometry and do not need to be an existing point of the point cloud.
radius_search(kd_tree, radius, query, pc) std::pair<
  std::vector<vertex_descriptor>,   std::vector<double>
>
Looks for the neighbors of the point 'query' in the given 'radius' in the point cloud 'pc' using the previously created k-d tree 'kd_tree'. Returns a pair of vectors: the first vector contains the vertex descriptors of the neighbors, the second vector contains the distance of each neighbor to the 'query' point. The 'query' point is given by its geometry and do not need to be an existing point of the point cloud.