• 大小: 5.71MB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2023-11-07
  • 语言: 其他
  • 标签: PCL  体积  

资源简介

利用PCL库,通过滤波,分割,求长宽高,计算物体的体积,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。

资源截图

代码片段和文件信息

#include 
#include 

#include          //OpenNI采集头文件

#include 
#include .
#include 

#include 

#include                     //直通滤波器头文件
#include                      //体素滤波器头文件
#include     //统计滤波头文件
#include                 //索引提取滤波器头文件
#include                 //映射相关头文件

#include   //基于采样一致性分割的类的头文件
#include           //采样一致性模型相关类头文件

#include   //随机参数估计方法头文件
#include    //模型定义头文件

#include            //提取凸(凹)多边形的头文件.

#include 
#include “opencv2/highgui/highgui.hpp“
#include “opencv2/imgproc/imgproc.hpp“

using namespace std;
using namespace cv;

class VolumDetectViewer
{
public:
boost::mutex cloud_mutex;
pcl::visualization::PCLVisualizer viewer;

// 直通滤波器对象
pcl::PassThrough XpassFilter;
pcl::PassThrough YpassFilter;

// 下采样 VoxelGrid 滤波对象
pcl::VoxelGrid VoxlFilter;

// 统计滤波器
pcl::StatisticalOutlierRemoval statisFilter;

// 分割对象
pcl::SACSegmentation segPlane;

// 提取索引滤波器
pcl::ExtractIndices extractPlane;

// 点云投影滤波对象
pcl::ProjectInliers projec;

VolumDetectViewer():viewer(“PCLVIEW“)
{
// 1. 初始化 new viewer
//pcl::visualization::PCLVisualizer viewer(“PCLVIEW“);
viewer.setBackgroundColor(0 0 0);
viewer.addCoordinateSystem(0.6);
viewer.initCameraParameters();
viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE 1 “cloud“);
//viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_OPACITY 0.15 “cloud“);

// 2. 直通滤波设置
// 滤波字段设为x轴方向.
XpassFilter.setFilterFieldName(“x“);
// 设定可接受范围,将不在范围内的点过滤掉或者保留(由setFilterLimitsNegative决定).
XpassFilter.setFilterLimits(-0.25 0.05);  // TODO: X方向裁剪阈值需要调试 实际是0.44m.
// 滤波字段设为y轴方向.
YpassFilter.setFilterFieldName(“y“);
// 设定可接受范围,将不在范围内的点过滤掉或者保留(由setFilterLimitsNegative决定).
YpassFilter.setFilterLimits(-0.25 0.18);  // TODO: Y方向裁剪阈值需要调试 实际是0.69m.

// 3. 体素滤波设置
// 设置体素滤波时创建的体素体积为0.5*0.5*0.5cm的立方体
VoxlFilter.setLeafSize(0.005f 0.005f 0.005f);

// 4. 统计滤波初始设置
statisFilter.setMeanK(50);  // 对每个点分析的临近点个数设为50
statisFilter.setStddevMulThresh(1.0);   // 将标准差倍数设为1,意味着一个点的距离超出平均距离1个标准差以上,就会被标记为离群点,并被移除。

// 5. 设置分割对象
// 可选:设置模型系数需要优化
segPlane.setOptimizeCoefficients(true);
// 必选:设置分割的模型类型、所用的随机参数估计方法、距离阈值、迭代次数上限
segPlane.setModelType(pcl::SACMODEL_PLANE);
segPlane.setMethodType(pcl::SAC_RANSAC);
segPlane.setDistanceThreshold(0.01);    // TODO: 距离阈值需要调试
segPlane.setMaxIterations(1000);

// 6. 设置投影模型为SACMO

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2020-05-06 08:37  imgRecord\
     文件     5054181  2018-06-11 20:28  imgRecord\GIF.gif
     文件      330706  2018-06-11 20:28  imgRecord\originCloud.png
     文件      239551  2018-06-11 20:28  imgRecord\passThrough.png
     文件      160249  2018-06-11 20:28  imgRecord\PlaneSeg.png
     文件      145220  2018-06-11 20:28  imgRecord\statisFiltered.png
     文件      135432  2018-06-11 20:28  imgRecord\voxelFiltered.png
     目录           0  2020-05-06 08:04  source\
     文件         411  2020-05-06 08:04  source\CMakeLists.txt
     文件       12822  2020-05-06 08:01  source\volDetectVisualizer.cpp

评论

共有 条评论