PCL 使用setUpsamplingMethod 对点云进行上采样

标签: PCL学习

一、方法简介

上采样 :上采样是一种表面重建方法,当你有比你想象的要少的点云数据时,上采样可以帮你恢复原有的表面(S),通过内插你目前拥有的点云数据,这是一个复杂的猜想假设的过程。所以构建的结果不会百分之一百准确,但有时它是一种可选择的方案。所以,在你的点云云进行下采样时,一定要保存一份原始数据!

二、代码实现

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <boost/thread/thread.hpp>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/surface/mls.h>

int main(int argc, char** argv)
{
    
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);

    if (pcl::io::loadPCDFile<pcl::PointXYZ>("16m1.pcd", *cloud) != 0)
    {
        return -1;
    }
    // ---------------创建滤波对象-----------------
    pcl::MovingLeastSquares<pcl::PointXYZ, pcl::PointXYZ> filter;
    filter.setInputCloud(cloud);
    //----------------建立搜索对象-----------------
    pcl::search::KdTree<pcl::PointXYZ>::Ptr kdtree;
    filter.setSearchMethod(kdtree);
    //--------设置搜索邻域的半径-------------------
    filter.setSearchRadius(0.2);
  
    filter.setUpsamplingMethod(pcl::MovingLeastSquares<pcl::PointXYZ, pcl::PointXYZ>::SAMPLE_LOCAL_PLANE);
    // ----------设置采样的半径----------------
    filter.setUpsamplingRadius(0.1);
    // -------采样步长的大小-------------
    filter.setUpsamplingStepSize(0.1);

    filter.process(*cloud_filtered);
    //---------显示点云-----------------------
    boost::shared_ptr<pcl::visualization::PCLVisualizer>
        viewer(new pcl::visualization::PCLVisualizer("显示点云"));

    int v1(0), v2(0);
    viewer->createViewPort(0.0, 0.0, 0.5, 1.0, v1);
    viewer->setBackgroundColor(0, 0, 0, v1);
    viewer->addText("point clouds", 10, 10, "v1_text", v1);
    viewer->createViewPort(0.5, 0.0, 1, 1.0, v2);
    viewer->setBackgroundColor(0.1, 0.1, 0.1, v2);
    viewer->addText("filtered point clouds", 10, 10, "v2_text", v2);

    viewer->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud", v1);
    viewer->addPointCloud<pcl::PointXYZ>(cloud_filtered, "cloud_filtered", v2);
    viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 1, 0, 0, "sample cloud", v1);
    viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 0, 1, 0, "cloud_filtered", v2);
    //viewer->addCoordinateSystem(1.0);
    //viewer->initCameraParameters();
    while (!viewer->wasStopped())
    {
        viewer->spinOnce(100);
        boost::this_thread::sleep(boost::posix_time::microseconds(100000));
    }

    return 0;
}

三、结果展示

在这里插入图片描述

四、官网链接pcl::MovingLeastSquares

版权声明:本文为qq_36686437原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36686437/article/details/107151035

智能推荐

PCL 使用GICP对点云配准

一、算法原理 有时间再补充 二、代码实现 三、结果展示 四、官网链接pcl::GeneralizedIterativeClosestPoint...

PCL_使用LCCP进行点云分割

       上一篇讲了超体聚类,也就是把点云按照颜色和空间位置进行有意义的分割,将其分割成小块,分割之后看起来还是很乱,但是基于聚类之后的结果2014年CVPR上有人基于这个聚类结果提出了利用凹凸性进行物体分割的方法,这个方法好的一点是不想我之前提到过的一个点云分割的框架需要进行训练,用SVM分类然后再利用模型进行分割,这个算法可以进行直接分割,且分割效果...

ch08——8.3.1在PCL中使用直通滤波器对点云进行滤波处理

ch08——8.3.1在PCL中使用直通滤波器对点云进行滤波处理 1.本节学习如何对指定的某一维度实行一个简单滤波,即去掉在用户指定范围内部或外部的点。 2.代码 3.显示...

PCL使用RadiusOutlierRemoval进行过滤

虽然代码不多,但是还是遇到了一些坑,这里做个简单的记录,写写心得 这一块就是核心的内容了,依旧是设置点云、计算结果,不同之处就是设置了:搜索半径范围、半径内最小的点数,就是说:在设置的100的半径范围内,对于临近点少于3个的点,进行去除 这里记录一点心得,起初我是按照别人的教程来的,设置的搜索半径太小,记得是0.3吧,然后运行好几次都没有点显示,最后我就加了循环,看看生成的点的半径是什么样子,这确...

PCL下采样VoxelGrid点云滤波

VoxelGrid         PCL实现的VoxelGrid类通过输入的点云数据创建一个三维体素栅格(可把体素栅格想象为微小的空间三维立方体的集合),然后在每个体素(即,三维立方体)内,用体素中所有点的重心来近似显示体素中其他点,这样该体素就内所有点就用一个重心点最终表示,对于所有体素处理后得到过滤后的点云。 代码 原图 下采样后...

猜你喜欢

Git的简单使用教程(上)

参考博客:https://blog.csdn.net/Cheny_Yang/article/details/89047680 1. 下载git 下载链接:https://gitforwindows.org/ 大家各取所需,下载自己需要的版本,无脑式安装即可。 2. 设置邮箱和用户 安装好git后,需要设置自己的邮箱和用户名,右键在Git Bash中输入下面的命令。 设置用户名和邮箱地址的作用是: ...

260_整合版

1.JAVA中的几种基本数据类型是什么,各自占用多少字节? 答: 常见问题: 1.byte,short,int 计算自动提升类[41] 型, 2. 自动转换:byte-->short-->int-->long-->float-->double (从小到大) 强制转换:1.容易丢失精度,产生误差(小数点后面的全部舍弃) 2.赋值时容易超出取值范围 数...

自动化测试之绕过验证码登录

这几天北京下大雨了,现在的自己已经圆满的成为了“北漂”,最悲催的上班不小心滑倒了,手划到了瓷砖上,去医院缝了好几针,哇~ 那感觉feel倍爽 。最近出了新项目,做了一点自动化,在这里用单手秀了一波“走位”------绕过验证码登录。 在这里总结了常见的几种方法,仅供参考。 话不多说,开整! 方法一 去掉验证码。让开发在测试版上面的验证码注销...

寻找两个三角形重合部分的最大三角形

如图所示,两个三角形重合存在很多种情况,上图举出其中4个例子,本文要讲的是已知两个三角形三个顶点坐标,求重叠部分最大三角形的顶点坐标; 虽然已知顶点坐标,位置关系已经确定,但是编程解决的是一类问题,所以各种情况还是要考虑到。 定义变量保存结果   两个三角形的坐标变量 第一步做的是判断有没有三角形的一个顶角是否在另一个三角形内部,如果有那么这个顶角一定是内部最大三角形的一个顶点 第二步计...