Point Cloud Library (PCL)  1.14.1-dev
List of all members | Classes | Public Types | Public Member Functions | Protected Member Functions | Protected Attributes
pcl::search::OrganizedNeighbor< PointT > Class Template Reference

OrganizedNeighbor is a class for optimized nearest neighbor search in organized projectable point clouds, for instance from Time-Of-Flight cameras or stereo cameras. More...

#include <pcl/search/organized.h>

+ Inheritance diagram for pcl::search::OrganizedNeighbor< PointT >:
+ Collaboration diagram for pcl::search::OrganizedNeighbor< PointT >:

Classes

struct  Entry
 

Public Types

using PointCloud = pcl::PointCloud< PointT >
 
using PointCloudPtr = typename PointCloud::Ptr
 
using PointCloudConstPtr = typename PointCloud::ConstPtr
 
using Ptr = shared_ptr< pcl::search::OrganizedNeighbor< PointT > >
 
using ConstPtr = shared_ptr< const pcl::search::OrganizedNeighbor< PointT > >
 

Public Member Functions

 OrganizedNeighbor (bool sorted_results=false, float eps=1e-4f, unsigned pyramid_level=5)
 Constructor. More...
 
 ~OrganizedNeighbor () override=default
 Empty deconstructor. More...
 
bool isValid () const
 Test whether this search-object is valid (input is organized AND from projective device) User should use this method after setting the input cloud, since setInput just prints an error if input is not organized or a projection matrix could not be determined. More...
 
void computeCameraMatrix (Eigen::Matrix3f &camera_matrix) const
 Compute the camera matrix. More...
 
bool setInputCloud (const PointCloudConstPtr &cloud, const IndicesConstPtr &indices=IndicesConstPtr()) override
 Provide a pointer to the input data set, if user has focal length he must set it before calling this. More...
 
int radiusSearch (const PointT &p_q, double radius, Indices &k_indices, std::vector< float > &k_sqr_distances, unsigned int max_nn=0) const override
 Search for all neighbors of query point that are within a given radius. More...
 
bool estimateProjectionMatrix ()
 estimated the projection matrix from the input cloud. More...
 
int nearestKSearch (const PointT &p_q, int k, Indices &k_indices, std::vector< float > &k_sqr_distances) const override
 Search for the k-nearest neighbors for a given query point. More...
 
bool projectPoint (const PointT &p, pcl::PointXY &q) const
 projects a point into the image More...
 

Protected Member Functions

bool testPoint (const PointT &query, unsigned k, std::vector< Entry > &queue, index_t index) const
 test if point given by index is among the k NN in results to the query point. More...
 
void clipRange (int &begin, int &end, int min, int max) const
 
void getProjectedRadiusSearchBox (const PointT &point, float squared_radius, unsigned &minX, unsigned &minY, unsigned &maxX, unsigned &maxY) const
 Obtain a search box in 2D from a sphere with a radius in 3D. More...
 

Protected Attributes

Eigen::Matrix< float, 3, 4, Eigen::RowMajor > projection_matrix_
 the projection matrix. More...
 
Eigen::Matrix< float, 3, 3, Eigen::RowMajor > KR_
 inveser of the left 3x3 projection matrix which is K * R (with K being the camera matrix and R the rotation matrix) More...
 
Eigen::Matrix< float, 3, 3, Eigen::RowMajor > KR_KRT_
 inveser of the left 3x3 projection matrix which is K * R (with K being the camera matrix and R the rotation matrix) More...
 
const float eps_
 epsilon value for the MSE of the projection matrix estimation More...
 
const unsigned pyramid_level_
 using only a subsample of points to calculate the projection matrix. More...
 
std::vector< unsigned char > mask_
 mask, indicating whether the point was in the indices list or not, and whether it is finite. More...
 

Detailed Description

template<typename PointT>
class pcl::search::OrganizedNeighbor< PointT >

OrganizedNeighbor is a class for optimized nearest neighbor search in organized projectable point clouds, for instance from Time-Of-Flight cameras or stereo cameras.

Note that rotating LIDARs may output organized clouds, but are not projectable via a pinhole camera model into two dimensions and thus will generally not work with this class.

Author
Radu B. Rusu, Julius Kammerl, Suat Gedikli, Koen Buys

Definition at line 65 of file organized.h.

Member Typedef Documentation

◆ ConstPtr

template<typename PointT >
using pcl::search::OrganizedNeighbor< PointT >::ConstPtr = shared_ptr<const pcl::search::OrganizedNeighbor<PointT> >

Definition at line 76 of file organized.h.

◆ PointCloud

template<typename PointT >
using pcl::search::OrganizedNeighbor< PointT >::PointCloud = pcl::PointCloud<PointT>

Definition at line 70 of file organized.h.

◆ PointCloudConstPtr

template<typename PointT >
using pcl::search::OrganizedNeighbor< PointT >::PointCloudConstPtr = typename PointCloud::ConstPtr

Definition at line 73 of file organized.h.

◆ PointCloudPtr

template<typename PointT >
using pcl::search::OrganizedNeighbor< PointT >::PointCloudPtr = typename PointCloud::Ptr

Definition at line 71 of file organized.h.

◆ Ptr

template<typename PointT >
using pcl::search::OrganizedNeighbor< PointT >::Ptr = shared_ptr<pcl::search::OrganizedNeighbor<PointT> >

Definition at line 75 of file organized.h.

Constructor & Destructor Documentation

◆ OrganizedNeighbor()

template<typename PointT >
pcl::search::OrganizedNeighbor< PointT >::OrganizedNeighbor ( bool  sorted_results = false,
float  eps = 1e-4f,
unsigned  pyramid_level = 5 
)
inline

Constructor.

Parameters
[in]sorted_resultswhether the results should be return sorted in ascending order on the distances or not. This applies only for radius search, since knn always returns sorted results
[in]epsthe threshold for the mean-squared-error of the estimation of the projection matrix. if the MSE is above this value, the point cloud is considered as not from a projective device, thus organized neighbor search can not be applied on that cloud.
[in]pyramid_levelthe level of the down sampled point cloud to be used for projection matrix estimation

Definition at line 90 of file organized.h.

◆ ~OrganizedNeighbor()

template<typename PointT >
pcl::search::OrganizedNeighbor< PointT >::~OrganizedNeighbor ( )
overridedefault

Empty deconstructor.

Member Function Documentation

◆ clipRange()

template<typename PointT >
void pcl::search::OrganizedNeighbor< PointT >::clipRange ( int &  begin,
int &  end,
int  min,
int  max 
) const
inlineprotected

Definition at line 254 of file organized.h.

◆ computeCameraMatrix()

template<typename PointT >
void pcl::search::OrganizedNeighbor< PointT >::computeCameraMatrix ( Eigen::Matrix3f &  camera_matrix) const

Compute the camera matrix.

Parameters
[out]camera_matrixthe resultant computed camera matrix

Definition at line 326 of file organized.hpp.

References pcl::getCameraMatrixFromProjectionMatrix().

◆ estimateProjectionMatrix()

template<typename PointT >
bool pcl::search::OrganizedNeighbor< PointT >::estimateProjectionMatrix

estimated the projection matrix from the input cloud.

Definition at line 333 of file organized.hpp.

References pcl::projectPoint(), pcl::PointXY::x, and pcl::PointXY::y.

Referenced by pcl::search::OrganizedNeighbor< PointT >::setInputCloud().

◆ getProjectedRadiusSearchBox()

template<typename PointT >
void pcl::search::OrganizedNeighbor< PointT >::getProjectedRadiusSearchBox ( const PointT point,
float  squared_radius,
unsigned &  minX,
unsigned &  minY,
unsigned &  maxX,
unsigned &  maxY 
) const
protected

Obtain a search box in 2D from a sphere with a radius in 3D.

Parameters
[in]pointthe query point (sphere center)
[in]squared_radiusthe squared sphere radius
[out]minXthe min X box coordinate
[out]minYthe min Y box coordinate
[out]maxXthe max X box coordinate
[out]maxYthe max Y box coordinate

Definition at line 269 of file organized.hpp.

◆ isValid()

template<typename PointT >
bool pcl::search::OrganizedNeighbor< PointT >::isValid ( ) const
inline

Test whether this search-object is valid (input is organized AND from projective device) User should use this method after setting the input cloud, since setInput just prints an error if input is not organized or a projection matrix could not be determined.

Returns
true if the input data is organized and from a projective device, false otherwise

Definition at line 109 of file organized.h.

References pcl::search::Search< PointT >::input_, pcl::search::OrganizedNeighbor< PointT >::KR_, and pcl::search::OrganizedNeighbor< PointT >::KR_KRT_.

Referenced by pcl::search::OrganizedNeighbor< PointT >::setInputCloud().

◆ nearestKSearch()

template<typename PointT >
int pcl::search::OrganizedNeighbor< PointT >::nearestKSearch ( const PointT p_q,
int  k,
Indices k_indices,
std::vector< float > &  k_sqr_distances 
) const
overridevirtual

Search for the k-nearest neighbors for a given query point.

Note
limiting the maximum search radius (with setMaxDistance) can lead to a significant improvement in search speed
Parameters
[in]p_qthe given query point (setInputCloud must be given a-priori!)
[in]kthe number of neighbors to search for (used only if horizontal and vertical window not given already!)
[out]k_indicesthe resultant point indices (must be resized to k beforehand!)
[out]k_sqr_distances
Note
this function does not return distances
Returns
number of neighbors found
Todo:
still need to implements this functionality

Implements pcl::search::Search< PointT >.

Definition at line 114 of file organized.hpp.

References pcl::isFinite().

◆ projectPoint()

template<typename PointT >
bool pcl::search::OrganizedNeighbor< PointT >::projectPoint ( const PointT p,
pcl::PointXY q 
) const

projects a point into the image

Parameters
[in]ppoint in 3D World Coordinate Frame to be projected onto the image plane
[out]qthe 2D projected point in pixel coordinates (u,v)
Returns
true if projection is valid, false otherwise

Definition at line 394 of file organized.hpp.

References pcl::PointXY::x, and pcl::PointXY::y.

Referenced by pcl::visualization::ImageViewer::addMask(), pcl::visualization::ImageViewer::addPlanarPolygon(), and pcl::visualization::ImageViewer::addRectangle().

◆ radiusSearch()

template<typename PointT >
int pcl::search::OrganizedNeighbor< PointT >::radiusSearch ( const PointT p_q,
double  radius,
Indices k_indices,
std::vector< float > &  k_sqr_distances,
unsigned int  max_nn = 0 
) const
overridevirtual

Search for all neighbors of query point that are within a given radius.

Parameters
[in]p_qthe given query point
[in]radiusthe radius of the sphere bounding all of p_q's neighbors
[out]k_indicesthe resultant indices of the neighboring points
[out]k_sqr_distancesthe resultant squared distances to the neighboring points
[in]max_nnif given, bounds the maximum returned neighbors to this value. If max_nn is set to 0 or to a number higher than the number of points in the input cloud, all neighbors in radius will be returned.
Returns
number of neighbors found in radius

Implements pcl::search::Search< PointT >.

Definition at line 49 of file organized.hpp.

References pcl::isFinite().

◆ setInputCloud()

template<typename PointT >
bool pcl::search::OrganizedNeighbor< PointT >::setInputCloud ( const PointCloudConstPtr cloud,
const IndicesConstPtr indices = IndicesConstPtr () 
)
inlineoverridevirtual

Provide a pointer to the input data set, if user has focal length he must set it before calling this.

Parameters
[in]cloudthe const boost shared pointer to a PointCloud message
[in]indicesthe const boost shared pointer to PointIndices

Reimplemented from pcl::search::Search< PointT >.

Definition at line 130 of file organized.h.

References pcl::search::OrganizedNeighbor< PointT >::estimateProjectionMatrix(), pcl::search::Search< PointT >::indices_, pcl::search::Search< PointT >::input_, pcl::isFinite(), pcl::search::OrganizedNeighbor< PointT >::isValid(), and pcl::search::OrganizedNeighbor< PointT >::mask_.

Referenced by pcl::visualization::ImageViewer::addMask(), pcl::visualization::ImageViewer::addPlanarPolygon(), and pcl::visualization::ImageViewer::addRectangle().

◆ testPoint()

template<typename PointT >
bool pcl::search::OrganizedNeighbor< PointT >::testPoint ( const PointT query,
unsigned  k,
std::vector< Entry > &  queue,
index_t  index 
) const
inlineprotected

test if point given by index is among the k NN in results to the query point.

Parameters
[in]queryquery point
[in]knumber of maximum nn interested in
[in,out]queuepriority queue with k NN
[in]indexindex on point to be tested
Returns
whether the top element changed or not.

Definition at line 223 of file organized.h.

References pcl::search::Search< PointT >::input_, and pcl::search::OrganizedNeighbor< PointT >::mask_.

Member Data Documentation

◆ eps_

template<typename PointT >
const float pcl::search::OrganizedNeighbor< PointT >::eps_
protected

epsilon value for the MSE of the projection matrix estimation

Definition at line 283 of file organized.h.

◆ KR_

template<typename PointT >
Eigen::Matrix<float, 3, 3, Eigen::RowMajor> pcl::search::OrganizedNeighbor< PointT >::KR_
protected

inveser of the left 3x3 projection matrix which is K * R (with K being the camera matrix and R the rotation matrix)

Definition at line 277 of file organized.h.

Referenced by pcl::search::OrganizedNeighbor< PointT >::isValid().

◆ KR_KRT_

template<typename PointT >
Eigen::Matrix<float, 3, 3, Eigen::RowMajor> pcl::search::OrganizedNeighbor< PointT >::KR_KRT_
protected

inveser of the left 3x3 projection matrix which is K * R (with K being the camera matrix and R the rotation matrix)

Definition at line 280 of file organized.h.

Referenced by pcl::search::OrganizedNeighbor< PointT >::isValid().

◆ mask_

template<typename PointT >
std::vector<unsigned char> pcl::search::OrganizedNeighbor< PointT >::mask_
protected

mask, indicating whether the point was in the indices list or not, and whether it is finite.

Definition at line 289 of file organized.h.

Referenced by pcl::search::OrganizedNeighbor< PointT >::setInputCloud(), and pcl::search::OrganizedNeighbor< PointT >::testPoint().

◆ projection_matrix_

template<typename PointT >
Eigen::Matrix<float, 3, 4, Eigen::RowMajor> pcl::search::OrganizedNeighbor< PointT >::projection_matrix_
protected

the projection matrix.

Either set by user or calculated by the first / each input cloud

Definition at line 274 of file organized.h.

◆ pyramid_level_

template<typename PointT >
const unsigned pcl::search::OrganizedNeighbor< PointT >::pyramid_level_
protected

using only a subsample of points to calculate the projection matrix.

pyramid_level_ = use down sampled cloud given by pyramid_level_

Definition at line 286 of file organized.h.


The documentation for this class was generated from the following files: