《点云处理》 去除点云无效点(Nah值)

前言

在使用3D相机,例如结构光相机和线扫相机(线结构光相机、线激光传感器)时,采集得到的点云中可能存在一些无效点,有可能x、y、z都为无效值,或者其中一个坐标值为无效值。那么在进行其他点云处理之前,则需要先剔除点云中无效点,仅保留有效点。

代码:

bool cpRemoveInfPoints(pcl::PointCloud<pcl::PointXYZ>& cloud)
{
    if (cloud.empty())
    {
        std::cout << "Error in [cpRemoveInfPoints]: Input cloud is empty" << std::endl;
        return false;
    }

    int ProfileSize = cloud.size();

    std::vector<int> indices;
    pcl::removeNaNFromPointCloud(cloud, cloud, indices);

    int PointSize = cloud.size();
    pcl::PointCloud<pcl::PointXYZ> cloud_temp;
    for (int j = 0; j < PointSize; ++j)
    {
        //pcl_isfinite
        if (isfinite(cloud.points[j].x) && isfinite(cloud.points[j].y) && isfinite(cloud.points[j].z))
        {
            cloud_temp.emplace_back(cloud.points[j]);
        }
    }
    cloud = cloud_temp;

    return true;
}

上述代码中,pcl::removeNaNFromPointCloud(cloud, cloud, indices);是PCL库内部实现的去除Nan值的方法。在此之后又多做了一层处理。需要包含头文件#include <pcl/filters/filter.h>。有关于这个方法的说明可以点击。

这种方法的问题是它不会保持点云仍然是有序点云。所有的点云都存储一个“宽度”和“高度”变量。在无序点云,总数为宽度相同,而高度设置为1。在有序的点云(像从相机拍摄像传感器如Kinect或Xtion的),宽度和高度都相同的像素的图像分辨率传感器的工作。点云分布在深度图像的行中,每一个点对应一个像素。成员函数”isorganized()”如果高度大于1时返回真。
由于移除NaNs无效点会改变点云的点的数量,它不再能保持组织与原来的宽高比,所以函数将设置高度1。这不是一个大问题,只有少数的PCL的算法工作明确要求是有序的点云(大多这样情况下会使用在优化上),但你必须考虑其中的影响。

### Matlab 中显示 'nah' 的错误原因及解决方案 当遇到 Matlab 显示 'nah' 这种情况时,通常意味着出现了未定义变量或函数调用失败等问题。具体来说: - 如果程序试图访问不存在的数组索引或者尝试执行非法操作,可能会返回类似的提示信息[^1]。 为了有效解决问题,可以采取以下措施来排查并修复该问题: #### 诊断方法 通过调试工具逐步跟踪代码逻辑,定位到实际发生异常的位置。也可以利用 `try-catch` 结构捕获潜在的运行时错误。 ```matlab try % 可能引发错误的代码片段 catch ME disp(['Error occurred: ',ME.message]); end ``` #### 常见修正策略 1. **检查输入参数** 确认传递给函数的所有参数都是有效的,并且符合预期的数据类型和尺寸要求。 2. **初始化缺失变量** 对于可能出现但尚未赋的关键变量,在使用前应先给予合理的初始。 3. **更新软件版本** 若怀疑问题是由于特定版本中的Bug引起,则考虑升级至最新稳定版MATLAB环境。 4. **清理工作区状态** 清除当前会话的工作空间(Workspace),重新加载必要的数据文件,避免残留对象干扰正常流程。 5. **验证第三方库兼容性** 当项目依赖外部工具箱或自定义模块时,需确保这些组件能够良好协作而不冲突。 如果上述建议未能帮助识别根本原因,可能还需要更深入地分析具体的上下文背景以及完整的报错日志记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值