zoukankan      html  css  js  c++  java
  • 怎样可视化深度图像

    博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=155

    本小节讲解如何可视化深度图像的两种方法,在3D视窗中以点云形式进行可视化(深度图像来源于点云),另一种是,将深度值映射为颜色,从而以彩色图像方式可视化深度图像。

    代码

    首先,在PCLPoint Cloud Learning)中国协助发行的书提供光盘的第7章例2文件夹中,打开名为range_image_visualization.cpp的代码文件,同文件夹下可以找到相关的测试点云文件room_scan1.pcd

     

    解释说明

    首先,解析命令行并从磁盘上读取点云(如果没有点云文件,自行创建一个),并构造深度图像。

    pcl::visualization::PCLVisualizer viewer ("3D Viewer");  //定义初始化可视化对象
    viewer.setBackgroundColor (1, 1, 1);                       //设置背景为白色
    pcl::visualization::PointCloudColorHandlerCustom<pcl::PointWithRange> range_image_color_handler (range_image_ptr, 0, 0, 0);    //设置自定义颜色
    viewer.addPointCloud (range_image_ptr, range_image_color_handler, "range image");
    viewer.setPointCloudRenderingProperties (pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 1, "range image");
    //viewer.addCoordinateSystem (1.0f);
    //pcl::visualization::PointCloudColorHandlerCustom<PointType> point_cloud_color_handler (point_cloud_ptr, 150, 150, 150);
    //viewer.addPointCloud (point_cloud_ptr, point_cloud_color_handler, "original point cloud");
    viewer.initCameraParameters ();
    setViewerPose(viewer, range_image.getTransformationToWorldSystem ());

    这段代码创建了3D视窗对象,将背景颜色设置为白色,添加黑色的、点云大小为1的深度图像(点云),并使用main函数上面定义的setViewerPose函数设置深度图像的视点参数。上面程序中被注释的部分用于添加坐标系,并对原始点云进行可视化,下面的程序用于以图像显示的方式可视化深度图像,图像颜色取决于深度值。

    pcl::visualization::RangeImageVisualizer range_image_widget ("Range image");
    range_image_widget.setRangeImage (range_image);            //图像可视化方式显示深度图像

    现在,我们可以启动主循环以保证可视化代码的有效性,直到可视化窗口关闭才结束该循环。

    while (!viewer.wasStopped ())
    {
      range_image_widget.spinOnce ();
      viewer.spinOnce ();
      pcl_sleep (0.01);

    range_image_widget.spinOnce()处理深度图像可视化类的当前事件,viewer.spinOnce()处理3D窗口的当前事件,此外,还可以随时更新2D深度图像,以响应可视化窗口中的当前视角,这通过命令行的参数-l来激活。

    if (live_update)
      {
        scene_sensor_pose =viewer.getViewerPose();
        range_image.createFromPointCloud (point_cloud, angular_resolution, pcl::deg2rad (360.0f), pcl::deg2rad (180.0f),scene_sensor_pose, pcl::RangeImage::LASER_FRAME, noise_level, min_range, border_size);
        range_image_widget.setRangeImage (range_image);
      }
    }

    在这里,我们首先从视窗中得到当前的观察位置,然后创建对应视角的深度图像,并在图像显示插件中进行显示。

    编译并运行程序

    利用光盘提供的CMakeLists.txt文件,在cmake中建立工程文件,并生成相应的可执行文件,生成执行文件后,就可以运行了,在cmd中键入命令:

    ...>range_image_visualization.exe

    这一步将使用自动生成的矩形空间点云。在此,打开两个窗口,一个是点云的3D可视化窗口,另一个是深度图像的可视化窗口,在该窗口图像的颜色由深度决定。用户可使用自己硬盘中的点云数据进行可视化测试。

    ...>range_image_visualization <point_cloud.pcd>

    用户也可尝试使用-l参数,根据当前的视角更新深度图像

    ...>range_image_visualization -l <point_cloud.pcd>
    

    运行结果类似,如图1所示为深度图像点云可视化,2为深度图像图像可视化窗口,图中,不可视区域(范围无穷远)用浅绿色表示,远距离区域(范围无穷远,激光扫描时可获取信息)用淡蓝色表示,注意两者虽然都是无穷远,但前者是在激光扫描不可见区域,后者是在可见区域的无穷远。

     图1 深度图像可视化运行结果

     图2 深度图像可视化实例运行结果

    敬请关注PCL(Point Cloud Learning)中国更多的点云库PCL(Point Cloud Library)相关官方教程。

    参考文献:

    1.朱德海、郭浩、苏伟.点云库PCL学习教程(ISBN 978-7-5124-0954-5)北京航空航天出版社2012-10

     

     

  • 相关阅读:
    poj2431 Expedition 题解报告
    poj1017 Packets 题解报告
    UVA714 Copying books 题解报告
    poj3040 Allowance 题解报告
    CH134 双端队列 题解报告
    poj2259 Team Queue 题解报告
    CH128 Editor 题解报告
    基本数据结构专题笔记
    CH109 Genius ACM 题解报告
    线段树总结
  • 原文地址:https://www.cnblogs.com/flyinggod/p/8598281.html
Copyright © 2011-2022 走看看