3d激光雷达开发(PassThrough滤波器)
2023-09-27 14:27:10 时间
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
这个滤波器可能是最简单的那一类滤波器。有点类似于opencv里面的roi,也就是感兴趣区域。简单来说,这个滤波器就是对点云数据做一个裁剪,把某一个轴上面的数据段保留下来,或者剔除。原来的代码链接在这,https://pcl.readthedocs.io/projects/tutorials/en/master/passthrough.html#passthrough
1、准备passthrough.cpp文件
#include <iostream>
#include <pcl/point_types.h>
#include <pcl/filters/passthrough.h>
int
main ()
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered (new pcl::PointCloud<pcl::PointXYZ>);
// Fill in the cloud data
cloud->width = 10;
cloud->height = 1;
cloud->points.resize (cloud->width * cloud->height);
for (auto& point: *cloud)
{
point.x = 1024 * rand () / (RAND_MAX + 1.0f);
point.y = 1024 * rand () / (RAND_MAX + 1.0f);
point.z = 1024 * rand () / (RAND_MAX + 1.0f);
}
std::cerr << "Cloud before filtering: " << std::endl;
for (const auto& point: *cloud)
std::cerr << " " << point.x << " "
<< point.y << " "
<< point.z << std::endl;
// Create the filtering object
pcl::PassThrough<pcl::PointXYZ> pass;
pass.setInputCloud (cloud);
pass.setFilterFieldName ("z");
pass.setFilterLimits (0.0, 10.0);
//pass.setFilterLimitsNegative (true);
pass.filter (*cloud_filtered);
std::cerr << "Cloud after filtering: " << std::endl;
for (const auto& point: *cloud_filtered)
std::cerr << " " << point.x << " "
<< point.y << " "
<< point.z << std::endl;
return (0);
}
2、代码分析
整个代码段里面,最重要的部分就是pass.setFilterFieldName和pass.setFilterLimits这两句话。前者是说面对哪一个方向的数据进行处理,后面一句设置处理的范围。后面还有一句,pass.setFilterLimitsNegative是说保留范围内的数据,还是保留范围之外的数据。
3、准备CMakeLists.txt
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
project(passthrough)
find_package(PCL 1.2 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable (passthrough passthrough.cpp)
target_link_libraries (passthrough ${PCL_LIBRARIES})
4、编译生成sln工程,开始链接
cmake之后,应该可以正常编译成功
5、执行passthrough.exe
执行过程中,可能出现dll不全的情况,补全就好了。
此外,执行过程中还可能出现filter之后,没有数据的情况,这主要是因为setFilterLimits过小的原因,可以设置的再大一点,另外随机生成的数据再多一点,效果也会好很多。
相关文章
- 【虹科案例】基于3D相机组装家具
- Boom 3D免费版音效增强软件怎么使用-非注册机-注册码-密钥下载版
- 带伪3d的类型的流程画图工具
- Civil 3D API二次开发学习指南
- 一种实时轻量级3D人脸对齐方法
- 【3D视觉创新应用竞赛作品系列】牲畜体表信息的三维重建,代码详尽
- Unity 3D使用GameObject创建一个简单的可移动物体
- 3d激光雷达开发(ransac的思想)
- 3d激光雷达开发(字符串输出和实体绘制)
- 3d激光雷达开发(点云数据显示)
- 2022-04-21 Unity基础1——3D数学
- unity 3D里有两种动态加载机制
- matplotlib绘制李萨如图(三) 静态3D李萨如图
- 37.qt quick- 高仿微信实现局域网聊天V3版本(添加登录界面、UDP校验登录、皮肤更换、3D旋转)
- 2018-12-29-WPF-如何建立自己的-3d-gis-程序