三维视觉--基于PCL已知点和位姿信息的点云分割(C++)实现

本文介绍了如何在点云数据处理中,通过已知点的法向和半径滤波技术,实现点云的分割剔除,保留或删除距离直线点云一定条件的点。给出了使用C++和PCL库的基本代码示例。
摘要由CSDN通过智能技术生成

上一篇分享了如何在点云上生成直线点云,可以用来画坐标系和进行点云的筛选剔除。这篇文章用来介绍如何进行点云的分割剔除部分。

上一篇文章链接如下:

三维视觉--基于PCL的等距离点云直线生成(C++)实现-CSDN博客

本文的原理是已知三维空间一点和该点法向,我们可以根据这一信息生成直线点云并结合半径滤波,实现整体点云的筛选。当然,也可以结合其他方法,本文以半径滤波为例。

    
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloudOut(new pcl::PointCloud<pcl::PointXYZRGB>);
    //遍历整体点云和直线点云
    for (size_t i = 0; i < cloud->points.size(); ++i) {
        double distance = 0.0;
        for (size_t j = 0; j < cloud_Line->points.size(); ++j) {
            //对遍历的点,求三个轴上的距离
            double dx = cloud_Line->points[j].x - cloud->points[i].x;
            double dy = cloud_Line->points[j].y - cloud->points[i].y;
            double dz = cloud_Line->points[j].z - cloud->points[i].z;
            distance = std::sqrt(dx * dx + dy * dy + dz * dz); 
            //整体点云到直线点云的距离小于2的,保留
            if (distance < 2.0) { 
                cloudOut->points.push_back(cloud->points[i]);
                break; 
            }
        }
    }
    pcl::io::savePLYFileBinary("cloudOut.ply", *cloudOut);

其中,直线点云的实现代码已经在上一篇给出,这里不做赘述。

这样就能实现将整体点云中,距离直线点云一定条件的点云保留或删除。当然,这样的用法还可以实现很多其他功能。

草稿代码可能不是很严谨,但运行起来问题不大。

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值