#读PCL源码#关键点检测
keypoint的类:
有这么多种keypoint
susan keypoint :需要intensity, normal
主要的方法和函数在susan.hpp
有openMP接口
\brief SUSANKeypoint implements a RGB-D extension of the SUSAN detector inluding normal
* directions variation in top of intensity variation.
* It is different from Harris in that it exploits normals directly so it is faster.
* Original paper "SUSAN — A New Approach to Low Level Image Processing", Smith,
* Stephen M. and Brady, J. Michael traijkovic keypoint 3d:需要normal(normal的求法是用的积分图,所以应该需要有序点云)
有openMP接口
** \brief TrajkovicKeypoint3D implements Trajkovic and Hedley corner detector on
* point cloud using geometric information.
* It uses first order statistics to find variation of normals.
* This work is part of Nizar Sallem PhD thesis.
traijkovic keypoint 2d:需要intensity,也需要有序点云
** \brief TrajkovicKeypoint2D implements Trajkovic and Hedley corner detector on
* organized pooint cloud using intensity information.
* It uses first order statistics to find variation of intensities in horizontal
* or vertical directions.
有openMP接口
iss-3d keypoint:
\brief ISSKeypoint3D detects the Intrinsic Shape Signatures keypoints for a given
* point cloud. This class is based on a particular implementation made by Federico
* Tombari and Samuele Salti and it has been explicitly adapted to PCL.
*
* For more information about the original ISS detector, see:
*
*\par
* Yu Zhong, “Intrinsic shape signatures: A shape descriptor for 3D object recognition,”
* Computer Vision Workshops (ICCV Workshops), 2009 IEEE 12th International Conference on ,
* vol., no., pp.689-696, Sept. 27 2009-Oct. 4 2009有示例程序
pcl::ISSKeypoint3D<pcl::PointXYZRGBA, pcl::PointXYZRGBA> iss_detector;
需要XYZRGBA点云
* Code example:
*
* \code
* pcl::PointCloud<pcl::PointXYZRGBA>::Ptr model (new pcl::PointCloud<pcl::PointXYZRGBA> ());;
* pcl::PointCloud<pcl::PointXYZRGBA>::Ptr model_keypoints (new pcl::PointCloud<pcl::PointXYZRGBA> ());
* pcl::search::KdTree<pcl::PointXYZRGBA>::Ptr tree (new pcl::search::KdTree<pcl::PointXYZRGBA> ());
*
* // Fill in the model cloud
*
* double model_resolution;
*
* // Compute model_resolution
*
* pcl::ISSKeypoint3D<pcl::PointXYZRGBA, pcl::PointXYZRGBA> iss_detector;
*
* iss_detector.setSearchMethod (tree);
* iss_detector.setSalientRadius (6 * model_resolution);
* iss_detector.setNonMaxRadius (4 * model_resolution);
* iss_detector.setThreshold21 (0.975);
* iss_detector.setThreshold32 (0.975);
* iss_detector.setMinNeighbors (5);
* iss_detector.setNumberOfThreads (4);
* iss_detector.setInputCloud (model);
* iss_detector.compute (*model_keypoints);
* \endcode有序和无序点云都行
agast keypoint:
** \brief Abstract detector class for AGAST corner point detectors.
*
* Adapted from the C++ implementation of Elmar Mair
* (http://www6.in.tum.de/Main/ResearchAgast).PointUV 类型的点
还需要是有序点云
brisk_2d keypoint:
/** \brief Detects BRISK interest points based on the original code and paper
* reference by
*
* \par
* Stefan Leutenegger,Margarita Chli and Roland Siegwart,
* BRISK: Binary Robust Invariant Scalable Keypoints,
* in Proceedings of the IEEE International Conference on Computer Vision (ICCV2011).
*
* Code example:
*
* \code
* pcl::PointCloud<pcl::PointXYZRGBA> cloud;
* pcl::BriskKeypoint2D<pcl::PointXYZRGBA> brisk;
* brisk.setThreshold (60);
* brisk.setOctaves (4);
* brisk.setInputCloud (cloud);
*
* PointCloud<pcl::PointWithScale> keypoints;
* brisk.compute (keypoints);
* \endcode
*还是需要XYZRGBA点云,还需要有序
Harris_2d keypoint:
有序点云,但没有感觉到对点其他格式有要求
Harris_3d keypoint:
是否有序都OK 点云格式没有要求
只是需要先求法向量
除了harris的方法,还有lowe, nobel, curvature等方法
* \brief HarrisKeypoint3D uses the idea of 2D Harris keypoints, but instead of using image gradients, it uses
* surface normals.试验:
Harris_6d keypoint:
\brief Keypoint detector for detecting corners in 3D (XYZ), 2D (intensity) AND mixed versions of these.
* \author Suat Gedikli
* \ingroup keypoints需要XYZI点云,有序和无序都可以
IntensityGradientEstimation
narf_keypoint:
* \brief @b NARF (Normal Aligned Radial Feature) keypoints. Input is a range image,
* output the indices of the keypoints
* See B. Steder, R. B. Rusu, K. Konolige, and W. Burgard
* Point Feature Extraction on 3D Range Scans Taking into Account Object Boundaries
* In Proc. of the IEEE Int. Conf. on Robotics &Automation (ICRA). 2011.
* \author Bastian Steder针对深度图 这个可以试验
sift_keypoint:
* \brief @b SIFTKeypoint detects the Scale Invariant Feature Transform
* keypoints for a given point cloud dataset containing points and intensity.
* This implementation adapts the original algorithm from images to point
* clouds.
*
smoothed_surfaces_keypoint:
流程都是:
initCompute ----> detectKeypoints
pcl_example_get_keypoints_indices_release.exe
用的是harris检测
但是这个需要注意的是Harris3D输出的角点是包含I信息的
而且例程中没有setRadius的话,是很难得到keypoints的
整体来说,这个检测不是很好,也没觉得检测出来的是多么有关键的点
可能包含normals之后会更好
pcl_example_sift_keypoint_estimation_release.exe
XYZRGB点云
pcl_example_sift_normal_keypoint_estimation_release.exe
这个可以用XYZ的点云,利用估计的normal gradient,而不是intensity gradient
求取法向量真的很关键,而且需要各种调参
pcl_example_sift_z_keypoint_estimation_release.exe
/* This examples shows how to estimate the SIFT points based on the
* z gradient of the 3D points than using the Intensity gradient as
* usually used for SIFT keypoint estimation.
*/总体感觉sift特征点意义不可控