首页 > 其他分享 >3d激光雷达开发(平面分割)

3d激光雷达开发(平面分割)

时间:2022-11-23 23:01:06浏览次数:67  
标签:分割 segmentation planar seg 激光雷达 pcl include cloud 3d


        平面分割是点云数据经常需要处理的一个功能。在很多场景下面,平面数据都是没有用的。这个时候需要考虑的,就是怎么把平面数据从点云当中分割出去。鉴于此,pcl库给我们提供了一种这样的分割处理方法,​​https://pcl.readthedocs.io/projects/tutorials/en/master/planar_segmentation.html#planar-segmentation​

1、准备planar_segmentation.cpp文件

#include <iostream>
#include <pcl/ModelCoefficients.h>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl/sample_consensus/method_types.h>
#include <pcl/sample_consensus/model_types.h>
#include <pcl/segmentation/sac_segmentation.h>

int
main ()
{
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

// Fill in the cloud data
cloud->width = 15;
cloud->height = 1;
cloud->points.resize (cloud->width * cloud->height);

// Generate the data
for (auto& point: *cloud)
{
point.x = 1024 * rand () / (RAND_MAX + 1.0f);
point.y = 1024 * rand () / (RAND_MAX + 1.0f);
point.z = 1.0;
}

// Set a few outliers
(*cloud)[0].z = 2.0;
(*cloud)[3].z = -2.0;
(*cloud)[6].z = 4.0;

std::cerr << "Point cloud data: " << cloud->size () << " points" << std::endl;
for (const auto& point: *cloud)
std::cerr << " " << point.x << " "
<< point.y << " "
<< point.z << std::endl;

pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients);
pcl::PointIndices::Ptr inliers (new pcl::PointIndices);
// Create the segmentation object
pcl::SACSegmentation<pcl::PointXYZ> seg;
// Optional
seg.setOptimizeCoefficients (true);
// Mandatory
seg.setModelType (pcl::SACMODEL_PLANE);
seg.setMethodType (pcl::SAC_RANSAC);
seg.setDistanceThreshold (0.01);

seg.setInputCloud (cloud);
seg.segment (*inliers, *coefficients);

if (inliers->indices.size () == 0)
{
PCL_ERROR ("Could not estimate a planar model for the given dataset.\n");
return (-1);
}

std::cerr << "Model coefficients: " << coefficients->values[0] << " "
<< coefficients->values[1] << " "
<< coefficients->values[2] << " "
<< coefficients->values[3] << std::endl;

std::cerr << "Model inliers: " << inliers->indices.size () << std::endl;
for (const auto& idx: inliers->indices)
std::cerr << idx << " " << cloud->points[idx].x << " "
<< cloud->points[idx].y << " "
<< cloud->points[idx].z << std::endl;

return (0);
}

2、准备CMakeLists.txt文件

cmake_minimum_required(VERSION 3.5 FATAL_ERROR)

project(planar_segmentation)

find_package(PCL 1.2 REQUIRED)

include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

add_executable (planar_segmentation planar_segmentation.cpp)
target_link_libraries (planar_segmentation ${PCL_LIBRARIES})

3、生成sln文件,准备编译

3d激光雷达开发(平面分割)_数据

4、执行exe文件

        主要是查看非平面数据有没有被算法剔除。

3d激光雷达开发(平面分割)_#include_02

 

 

标签:分割,segmentation,planar,seg,激光雷达,pcl,include,cloud,3d
From: https://blog.51cto.com/feixiaoxing/5881894

相关文章

  • 3d激光雷达开发(圆柱分割)
        和平面分割一样,pcl也支持圆柱分割。使用的方法和平面分割也差不多,都是基于ransac的基本原理。在pcl官方库当中,也给出了参考代码,注意关联的pcd文件,https://pcl.r......
  • 3d激光雷达开发(ndt匹配)
        除了icp匹配之外,ndt匹配也是使用比较多的一种方法。相比较icp而言,ndt匹配花的时间要少一些。此外,ndt匹配还需要输入估计的yaw、pitch、roll、x、y、z,这个可以根......
  • 3d激光雷达开发(icp匹配)
        所谓匹配,其实就是看两个点云数据里面,哪些关键点是一样的。这样就可以把一个点云移动到另外合适的位置,组成一个新的点云。一般来说,单个机器人上面,3d激光扫描到的......
  • #yyds干货盘点# 动态规划专题:分割等和子集
    1.简述:描述给定一个只包含正整数的数组nums,请问能否把这个数组取出若干个数使得取出的数之和和剩下的数之和相同。数据范围:  ,数组中的元素满足 输入描述:第一行输入一......
  • ASW3642pin√pin替代TS3DV642无需更改电路
    TS3DV642是一种12通道1:2或2:1双向多路替代器/多路解复用器。TS3DV642接入2.6V至4.5V的电源供电,适用于电池供电。电阻(RON)最小和I/O电容较小,能够实现典型值高达7.5GHz的带宽......
  • Oracle对一个字符串中的数字与非数字进行分割
    Oracle对一个字符串中的数字与非数字进行分割Oracle中对一个字符串中的数字与非数字进行分割思路很简单,就是将字符串分成数字与非数字则只要将字符串中的数字全部换成空......
  • 3DMAX2018安装
    1.下载3DMAX2018安装包并解压2.打开解压后的文件点击Setup选择语言和安装位置点击下一步安装完成后点击enteraserialnumber输入序列号066-66666666,密钥128J1后点......
  • 图像处理技术:数字图像分割 ------ 图像分割、边界分割(边缘检测)、区域分割
    图像处理技术相关知识目录(顺序):图像处理技术DigitalImageProcessing:导论-----初始图像-slowlydance2me-博客园(cnblogs.com)图像处理技术:导论-----图像工程......
  • 大咖说·先临三维|技术入云塑造3D视觉行业新模式
    高精度3D视觉技术主要的工作原理是什么?它的开发难度在哪里?数字化技术对其有何助力?本期大咖说,看先临三维副总裁兼研究院副院长江腾飞如何分享。嘉宾介绍江腾飞:先......
  • Matplotlib数据可视化——3D视图
    """绘制三维图形"""importnumpyasnpimportmatplotlib.pyplotaspltfrommpl_toolkits.mplot3dimportAxes3Dfig=plt.figure()ax=Axes3D(fig)X=np.ara......