怎样可视化深度图像

博客转载自: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

 

 

 

posted @ 2018-03-18 23:29  采男孩的小蘑菇  阅读(2766)  评论(0编辑  收藏  举报