資源簡介
BoundaryEstimation測試代碼,有比較詳細的注釋。另外是附加了相關算法的一篇文獻,對于理解這個函數比較有幫助

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
using?namespace?std;
#define?M_PI?3.14159
int?main()
{
pcl::PointCloud::Ptr?cloud(new?pcl::PointCloud);
//?if?(pcl::io::loadPCDFile(“/home/yxg/pcl/pcd/mid.pcd“*cloud)?==?-1)
if?(pcl::io::loadPCDFile(“E:\\program_study\\C++\\pcd_data\\table_scene_lms400.pcd“?*cloud)?==?-1)
{
PCL_ERROR(“COULD?NOT?READ?FILE?mid.pcl?\n“);
return?(-1);
}
std::cout?<“points?sieze?is:“?<size()?< pcl::PointCloud::Ptr?normals(new?pcl::PointCloud);
pcl::PointCloud?boundaries;
pcl::BoundaryEstimation?est;
pcl::search::KdTree::Ptr?tree(new?pcl::search::KdTree());
/*
pcl::KdTreeFLANN?kdtree;??//創建一個快速k近鄰查詢查詢的時候若該點在點云中,則第一個近鄰點是其本身
kdtree.setInputCloud(cloud);
int?k?=2;
float?everagedistance?=0;
for?(int?i?=0;?i?size()/2;i++)
{
vector?nnh?;
vector?squaredistance;
//??pcl::PointXYZ?p;
//???p?=?cloud->points[i];
kdtree.nearestKSearch(cloud->points[i]knnhsquaredistance);
everagedistance?+=?sqrt(squaredistance[1]);
//???cout< }
everagedistance?=?everagedistance/(cloud->size()/2);
cout<<“everage?distance?is?:?“<
*/
pcl::NormalEstimation?normEst;??//其中pcl::PointXYZ表示輸入類型數據,pcl::Normal表示輸出類型且pcl::Normal前三項是法向,最后一項是曲率
normEst.setInputCloud(cloud);
normEst.setSearchMethod(tree);
//?normEst.setRadiusSearch(2);??//法向估計的半徑
normEst.setKSearch(9);??//法向估計的點數
normEst.compute(*normals);
cout?<“normal?size?is?“?<size()?<
//normal_est.setViewPoint(000);?//這個應該會使法向一致
est.setInputCloud(cloud);
est.setInputNormals(normals);
est.setAngleThreshold(M_PI/1.2?);//默認是M_PI/2
//???est.setSearchMethod?(pcl::search::KdTree::Ptr?(new?pcl::search::KdTree));
est.setSearchMethod(tree);
est.setKSearch(30);??//一般這里的數值越高,最終邊界識別的精度越好
//??est.setRadiusSearch(everagedistance);??//搜索半徑
est.compute(boundaries);
//??pcl::PointCloud?boundPoints;
pcl::PointCloud::Ptr?boundPoints(new???pcl::PointCloud);
pcl::PointCloud?noBoundPoints;
int?countBoundaries?=?0;
for?(int?i?=?0;?isize();?i++){
uint8_t?x?=?(boundaries.points[i].boundary_point);
int?a?=?static_cast(x);?//該函數的功能是強制類型轉換
if?(a?==?1)
{
//??boundPoints.push_back(cloud->points[i]);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????4588??2018-01-02?19:27??新建文件夾\PCL_BoundaryPoint.cpp
?????文件??????295165??2015-10-13?18:59??新建文件夾\散亂數據點云邊界特征自動提取算法.pdf
?????目錄???????????0??2018-01-02?20:46??新建文件夾\
評論
共有 條評論