【激光雷达点云障碍物检测】(一)滤波部分

processPointClouds.cpp中滤波部分我单独拿出进行学习,滤波后只考虑每一帧点云中汽车周围部分点云

原始点云如下:

滤波后点云如下:

之后在对其进行分割检测等操作,滤波代码如下:

#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/filters/passthrough.h>
#include <pcl/filters/extract_indices.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/filters/crop_box.h>
#include <pcl/visualization/cloud_viewer.h>

int main()
{
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::PCDReader reader;
	reader.read("D:\\SFND_Lidar_Obstacle_Detection\\SFND_Lidar_Obstacle_Detection\\data\\pcd\\data_1\\0000000000.pcd", *cloud);

	pcl::VoxelGrid<pcl::PointXYZ> vg;   //滤波对象
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloudFiltered(new pcl::PointCloud<pcl::PointXYZ>);
	vg.setInputCloud(cloud);
	vg.setLeafSize(0.4, 0.4, 0.4);
	vg.filter(*cloudFiltered);

	//过滤掉在用户给定立方体内的点云数据
	//理解:将自身车辆作为坐标轴的中心点,然后在身边自身为中心 ,圈出范围,成为每一次运动时候的感兴趣区域,也就是只关心区域内点的聚类等后续操作
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloudRegion(new pcl::PointCloud<pcl::PointXYZ>);
	pcl::CropBox<pcl::PointXYZ> region(true);
	//Eigen::Vector4f minpoint(-10, -6.5, -2, 1);
	//Eigen::Vector4f maxpoint(30, 6.5, 1, 1);
	region.setMin(Eigen::Vector4f(-10, -6.5, -2, 1));
	region.setMax(Eigen::Vector4f(30, 6.5, 1, 1));
	region.setInputCloud(cloudFiltered);
	region.filter(*cloudRegion);

	//提取车身周围范围内的所有的点,并将提取到的所有点保存在indices中
	std::vector<int> indices;
	pcl::CropBox<pcl::PointXYZ> roof(true);
	roof.setMin(Eigen::Vector4f(-1.5, -1.7, -1, 1));
	roof.setMax(Eigen::Vector4f(2.6, 1.7, -0.4, 1));
	roof.setInputCloud(cloudRegion);
	roof.filter(indices);
	pcl::PointIndices::Ptr inliers{ new pcl::PointIndices }; //创建一个内点对象,将提取到车身周围点,放到内点对象中
	for (int point : indices) 
	{
		inliers->indices.push_back(point);
	}

	//创建点云提取函数
	pcl::ExtractIndices<pcl::PointXYZ> extract;
	extract.setInputCloud(cloudRegion);
	extract.setIndices(inliers);
	extract.setNegative(true);  //false 提取内点也就是提取车身周围的几个点,, true提取出了车身周围的点
	extract.filter(*cloudRegion);

	/*pcl::PCDWriter writer;
	writer.write("C:\\Users\\Administrator\\Downloads\\求助\\求助\\tree-2-Rend.pcd", *cloud_filtered1);*/

	pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("显示窗口"));  //窗口显示点云
	viewer->addPointCloud(cloudRegion, "*cloud");
	viewer->resetCamera();		//相机点重置
	viewer->spin();
	system("pause");
	return (0);
}

 

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值