PCL体素滤波(在windows+vs2017下实现)

体素滤波器(下采样):

体素滤波器可以达到向下采样同时不破坏点云本身几何结构的功能,但是会移动点的位置。 此外体素滤波器可以去除一定程度的噪音点及离群点。主要功能是用来进行降采样。

(1)它的原理是根据输入的点云,首先计算一个能够刚好包裹住该点云的立方体,然后根据设定的分辨率,将该大 立方体分割成不同的小立方体。对于每一个小立方体内的点,计算他们的质心,并用该质心的坐标来近似该立方体内的若干点。

(2)ApproximateVoxelGrid的不同在于这种方法是利用每一个小立方体的中心来近似该立方体内的若干点。相比于 VoxelGrid,计算速度稍快,但也损失了原始点云局部形态的精细度。

#include <iostream>
#include <pcl/filters/voxel_grid.h>//体素滤波器头文件
#include <pcl/io/pcd_io.h> //PCD 读写类相关的头文件
#include <pcl/point_types.h>  //点类型相关定义
#include <pcl/visualization/cloud_viewer.h>  //点云可视化相关定义 可视化支持头文件
#include <pcl/common/common.h>  //common模块,common.h的函数有pcl::getMinMax3D 
int main (int argc, char** argv)
{
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>());
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>());
  // 填入点云数据
    pcl::PCDReader reader;
  // 把路径改为自己存放文件的路径

    reader.read ("D:\\pclcode\\filter\\voxel_grid\\source\\scan_003.pcd", *cloud); //读取文件夹里面的scan_003.pcd点云文件
 
  //pcl::visualization::CloudViewer viewer("cloud viewer");//显示
  //viewer.showCloud(cloud);//显示cloud
  std::cerr << "PointCloud before filtering: " << cloud->width * cloud->height
	  << " data points (" << pcl::getFieldsList(*cloud) << ").";//输出滤波前点的总个数
  //system("pause");//暂停
  // 创建滤波器对象
  pcl::VoxelGrid<pcl::PointXYZ> sor;//创建滤波器对象
  sor.setInputCloud (cloud);//设置输入点云
  sor.setLeafSize (0.03f, 0.03f, 0.03f); //体素大小设置为3*3*3cm
  sor.filter (*cloud_filtered);//执行滤波,保存过滤结果在cloud_filtered
  std::cerr << "PointCloud after filtering: " << cloud_filtered->width * cloud_filtered->height 
       << " data points (" << pcl::getFieldsList (*cloud_filtered) << ").";//输出滤波后的总个数
  pcl::PCDWriter writer;//pcd写操作
  writer.write ("scan_003_filter.pcd", *cloud_filtered);//将滤波后的点云存储在build文件夹里,并命名为2f.pcd
  //pcl::visualization::CloudViewer viewer("cloud viewer");//显示
  //viewer.showCloud(cloud_filterd);//显示cloud
  system("pause");//暂停
  return (0);
}
//请按任意键继续. . .
//there are 2057209 points before filtering.
//there are 395805 points after filtering.
//请按任意键继续. . .

CmakeLists文件如下:具体的点云文件可以根据自己的需要自行选择

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(voxel_grid)
find_package(PCL 1.2 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable (voxel_grid voxel_grid.cpp)
target_link_libraries (voxel_grid ${PCL_LIBRARIES})




具体的颜色信息可以自己用可视化进行修改,这里我就不进行修改了

滤波前

滤波后

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长沙有肥鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值