当前位置: 首页 > news >正文

Leaf size is too small for the input dataset 解决办法

问题描述

在使用PCL的voxelgrid filter时,若点云过大,而设置的voxel比较小,可能会导致voxel的数量超过int32的上限,从而会出现警告:“Leaf size is too small for the input dataset”。

通用解决办法

  • 此文提出了几个解决办法:
  1. 对精度要求没那么高的话,可以将leaf size大小设置大一些。
  2. 将要降采样的点云先分割成几块、在做降采样。
  3. 使用 OctreeVoxelGridFilter,参考PCL论坛。

My solution

但上述解决办法我觉得并不好用,因此,我通过更改VoxelGrid的代码,实现了对比较大点云的降采样支持。
具体思路为若voxel数目溢出,则使用二分法将点云分成两块,然后递归调用voxelgrid即可。

  • 方案一
    更改PCL原始代码,找到“Leaf size is too small for the input dataset. Integer indices would overflow”所在位置,并将if中余下部分更改为以下代码:
pcl::PointCloud<PointT>cloud1,cloud2,cloud1f,cloud2f;pcl::PassThrough<PointT>pass;if(dx>dy&&dx>dz){pass.setInputCloud(input_);pass.setFilterFieldName("x");pass.setFilterLimits(min_p[0],min_p[0]+(max_p[0]-min_p[0])/2);pass.filter(cloud1);pass.setFilterLimitsNegative(true);pass.filter(cloud2);}elseif(dy>dx&&dy>dz){pass.setInputCloud(input_);pass.setFilterFieldName("y");pass.setFilterLimits(min_p[1],min_p[1]+(max_p[1]-min_p[1])/2);pass.filter(cloud1);pass.setFilterLimitsNegative(true);pass.filter(cloud2);}else{pass.setInputCloud(input_);pass.setFilterFieldName("z");pass.setFilterLimits(min_p[2],min_p[2]+(max_p[2]-min_p[2])/2);pass.filter(cloud1);pass.setFilterLimitsNegative(true);pass.filter(cloud2);}VoxelGrid voxelGrid=*this;voxelGrid.setInputCloud(cloud1.makeShared());voxelGrid.filter(cloud1f);voxelGrid.setInputCloud(cloud2.makeShared());voxelGrid.filter(cloud2f);output=cloud1f+cloud2f;return;
  • 方案二
    使用我写好的VoxelGridLarge代码。

由于不同的人的遇到的问题往往不一样,如何往工程中应用建议参考我之前的代码(虽然不是解决leafsize的代码,但往工程中应用的思路和写法是一样的):github仓库 或者 gitee仓库

http://www.jsqmd.com/news/1281758/

相关文章:

  • linux shell 各种括号作用详解()、(())、[]、[[]]、{}
  • 惠州惠城漏水检测维修一站式服务 - 本地正规防水补漏公司精选推荐(2026 最新)全域上门:卫生间 / 厨房 / 阳台 / 屋顶渗漏水免砸砖检测维修补漏全攻略 - 吉林同城获客
  • SpringBoot+Vue构建问卷调查系统的技术实践
  • 如何快速搭建私有搜索引擎:SearXNG Docker终极部署指南
  • NBM7100A芯片在低功耗物联网设备中的应用与优化
  • 暗黑2存档编辑器完全手册:零基础掌握角色与装备修改
  • Java微服务的七个常见架构错误:从超时配置到异常处理的生产级反例
  • SpringBoot拦截器读取流后不能再读取(详解)
  • 【第一章04】MQTT控制报文
  • Unity-XLua中Lua异常处理:构建跨语言稳定性的工程实践
  • Windows 11 添加网络打印机总是连接失败:从设备发现到 TCP/IP 端口的排查记录
  • 01 准备你的开发环境
  • 编写程序对比一帆风顺和历经波折两种状态下的作品风格,利用低谷心境打造差异化创意。
  • 量化交易策略可视化与实战复盘
  • Vosk-Browser:浏览器端离线语音识别的革命性解决方案
  • 思源宋体TTF:7种粗细的免费开源中文字体终极指南
  • 数字沟通的时光守护者:RevokeMsgPatcher如何为你的对话留下永恒印记
  • 现代网络诊断工具Trippy:从架构设计到实战应用的完整指南
  • 职场压力监测:汗液生物指标与可穿戴设备的技术解析
  • 使用Spring实现权限控制动态为注解赋值
  • Git 快速极简图文教程 第一篇
  • 物联网设备硬件级安全方案:PIC18与SE050集成实践
  • 企业私域流量团队搭建与高效运营指南
  • HFS文件服务器:轻松搭建个人云存储与文件共享平台
  • M9A技术深度解析:基于MaaFramework的《重返未来:1999》自动化引擎
  • Serverless安全实战:从TAR依赖漏洞到10步纵深防御体系构建
  • 【C++】 unordered_map 与unordered_set
  • URP水体渲染:动态生成渐变纹理实现数据驱动颜色控制
  • hdu 5458 Stability (并查集+线段树+树链剖分(边权))
  • JavaScript笔记:BOM--event