PCL点云轮廓提取

1.创建一个pcllktq文件夹,创建一个pcllktq.cpp源文件

#include <iostream>
#include <pcl/range_image/range_image.h>//深度图有关文件
#include <pcl/visualization/pcl_visualizer.h>//点云可视化头文件
#include <pcl/io/pcd_io.h>//pcd文件输入/输出
#include <pcl/visualization/range_image_visualizer.h>//rangeImage可视化头文件
#include <pcl/common/common_headers.h>
#include <pcl/console/parse.h>//命令行参数解析
#include <boost/thread/thread.hpp>//多线程文件
#include <pcl/visualization/common/float_image_utils.h>//保存深度图像
#include <pcl/io/png_io.h>//保存深度图像
 
int main (int argc, char** argv) {
 
    //读入点云数据
   // pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in(new pcl::PointCloud<pcl::PointXYZ>);
   // pcl::io::loadPCDFile("room_scan1.pcd",*cloud_in);
 
  pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in(new pcl::PointCloud<pcl::PointXYZ>);
 //生成数据
  for (float y=-0.5f; y<=0.5f; y+=0.01f) {
    for (float z=-0.5f; z<=0.5f; z+=0.01f) {
      pcl::PointXYZ point;
      point.x = 2.0f - y;
      point.y = y;
      point.z = z;
      cloud_in->points.push_back(point);
    }
  }
  cloud_in->width = (uint32_t) cloud_in->points.size();
  cloud_in->height = 1;
 
 
 
//以1度为角分辨率,从上面创建的点云创建深度图像。
  float angularResolution = (float) (  1.0f * (M_PI/180.0f));  
// 1度转弧度
  float maxAngleWidth     = (float) (360.0f * (M_PI/180.0f));  
// 360.0度转弧度
  float maxAngleHeight    = (float) (180.0f * (M_PI/180.0f)); 
// 180.0度转弧度
  Eigen::Affine3f sensorPose = (Eigen::Affine3f)Eigen::Translation3f(0.0f, 0.0f, 0.0f);
  pcl::RangeImage::CoordinateFrame coordinate_frame = pcl::RangeImage::CAMERA_FRAME;
  float noiseLevel=0.00;
  float minRange = 0.0f;
  int borderSize = 1;
  pcl::RangeImage rangeImage;
  rangeImage.createFromPointCloud(*cloud_in, angularResolution, maxAngleWidth, maxAngleHeight, sensorPose, coordinate_frame, noiseLevel, minRange, borderSize);
std::cout << rangeImage << "\n";//重载运算符<<
 
pcl::visualization::PCLVisualizer::Ptr viewer(new pcl::visualization::PCLVisualizer("CloudPointView"));
viewer->initCameraParameters();
 
int v1(0);
//viewer->createViewPort(0,0,0.5,1,v1);
viewer->setBackgroundColor(255,255,255,v1);
pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> color1(cloud_in->makeShared(),255,0,0);
viewer->addPointCloud(cloud_in->makeShared(),color1,"pointCloud",v1);
 
viewer->addCoordinateSystem();
//viewer->spin();//这句话不注释掉会导致只显示点云图而不显示深度图的窗口
 
 
 
//save depth picture
    float *ranges = rangeImage.getRangesArray();
    unsigned char* rgb_image = pcl::visualization::FloatImageUtils::getVisualImage(ranges,rangeImage.width,rangeImage.height);
    pcl::io::saveRgbPNGFile("saveRangeImageRGB.png",rgb_image,rangeImage.width,rangeImage.height);
    std::cerr << "Picture Saved!" << std::endl;
 
//可视化深度图像rangeImage
pcl::visualization::RangeImageVisualizer range_image_widget("Range image");//创建Range image显示的对象
range_image_widget.setWindowTitle("RangeImage");
range_image_widget.showRangeImage(rangeImage);
    while (!range_image_widget.wasStopped ()&& !viewer->wasStopped())
    {
        range_image_widget.spinOnce ();
        viewer->spinOnce();
 
        pcl_sleep (0.01);
 
 
    }
 
    return  0 ;
}

同文件夹下编写CMakeLists.txt,内容如下

cmake_minimum_required(VERSION 2.6)
project(pclfive)
 
find_package(PCL 1.2 REQUIRED)
 
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
 
add_executable(pclfive pcllktq.cpp)
 
target_link_libraries (pclfive ${PCL_LIBRARIES})
 
install(TARGETS pclfive RUNTIME DESTINATION bin)

pclltq同文件夹下,建立build文件

文件编译步骤:

mkdir build
cd build
cmake ..
make
./pclfive

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 点云轮廓提取是一种基于点云数据的轮廓分割方法,主要用于三维模型的识别、测量、建模和应用等方面。matlab是一种高级数学软件,同时也是点云处理和分析的重要工具之一。 在matlab中进行点云轮廓提取需要使用相关的工具箱或库,例如Point Cloud Library (PCL)或MATLAB Computer Vision Toolbox等。使用这些工具可以通过读取点云数据文件,对点云进行预处理、集群化、分割等操作,以获得需要的轮廓、边缘或物体等信息。 在实际操作过程中,可以使用matlab的相关函数或控件来实现点云数据的可视化、交互和处理等操作,如PointCloud、pcshow、pcmerge、pcfitplane等。在轮廓提取的过程中,可以基于深度学习、机器学习或传统算法等方法来进行特征提取、分类、聚类和分割等操作,从而提高提取的精度和效率。 总的来说,在matlab中进行点云轮廓提取需要有相关的知识和技能,同时需要根据具体应用场景和数据特点选择合适的算法和工具,以实现优质的点云数据处理和应用。 ### 回答2: Matlab点云轮廓提取是一种用于从点云数据中提取对象轮廓的技术。点云数据一般是由3D扫描设备或三维建模软件生成的大量点的集合。点云轮廓提取可以有效的提取出点云数据中的边界信息,进而用于建立物体模型、对象识别等应用。 点云轮廓提取主要分为两种方法,一种是基于体素的方法,另一种是基于点云的方法。基于体素的方法是将点云数据离散化为一系列立方体,通过分析每个立方体中的点的分布情况来进行轮廓提取。基于点云的方法则是直接对点云数据进行处理,通过对点云中的点之间的关系和密度进行计算,提取出对象边缘轮廓。 在Matlab中可以通过调用点云处理工具箱实现点云轮廓提取。该工具箱提供了各种算法,包括基于基础几何和高级统计分析的方法。其中,常用的算法包括region growing、ransac和分水岭算法等。这些算法的主要作用是通过点云数据中点之间的距离信息,得到对象表面精确的边界轮廓点云轮廓提取有许多应用场景。例如在自动驾驶、人机交互、智能机器视觉等领域中非常重要。例如,点云轮廓提取技术可以用于自动驾驶中的障碍物检测、人机交互中的手势识别以及智能机器视觉中的物体识别。总之,Matlab点云轮廓提取是一项非常有价值的技术,有着广泛的应用前景。 ### 回答3: 点云轮廓提取,是指从三维点云数据中提取出边缘轮廓信息的过程。在实际应用中,点云轮廓提取是非常重要的,它可以在三维建模、物体识别和机器人导航等领域中被广泛应用。而MATLAB作为一款专业的科学计算软件,也提供了丰富的工具和算法来处理点云数据,并实现点云轮廓提取算法。 MATLAB中常用的点云轮廓提取方法主要包括投影法、几何法、局部曲率法等。其中,投影法是一种比较简单且常用的方法,它可以将三维点云数据投影到二维平面上,然后通过轮廓提取算法得到点云轮廓信息。在MATLAB中,可以使用pcproj函数将点云数据投影到平面上,然后使用boundary函数进行轮廓提取。 几何法是一种基于点云数据的几何特征进行分析的方法,它可以通过计算点云表面的法向量、曲率等特征,来得到点云轮廓信息。在MATLAB中,可以使用pcnormals函数计算点云表面的法向量,然后通过计算法向量差异和曲率等指标,来得到点云轮廓信息。 局部曲率法是一种基于点云数据的局部特征进行分析的方法,它可以通过计算局部曲率值和曲率变化率等指标,来得到点云轮廓信息。在MATLAB中,可以使用pclfit函数计算点云的曲率信息,然后通过计算曲率变化率和曲率值进行轮廓提取。 除了以上几种常用方法外,MATLAB还提供了其他一些点云轮廓提取算法,如基于深度学习的方法、基于随机采样一致性算法等。这些算法都能实现点云轮廓提取,并在实际应用中有广泛的应用。 综上所述,MATLAB可以通过多种算法来实现点云轮廓提取,为三维建模、物体识别等领域的研究提供了强有力的工具。同时,在使用MATLAB进行点云轮廓提取时,需要根据具体需求选择适合的算法,以获得更好的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值