CloudViewer
CloudViewer 简介
CloudViewer (点云可视化软件)是一款面向三维点云数据处理、点云开发专业人员及爱好者的三维点云可视化软件,该软件具备以下功能:
点云 IO。常见点云格式文件(如 ply, pcd 和 obj)的读取、保存、删除清空及可视化。
点云的基本操作。设置点云颜色,合并多个点云,点云格式转换等。
可视化的基本操作。设置视图窗口背景颜色,设置点云的可视化尺寸,设置坐标系的显示,设置视图方位(Main view, Left view, Top view),网格面片显示,网格线框显示等。
模型生成。生成简单立方排布的点云以及基本三维模型,该功能主要用于测试。
软件界面基本功能。软件由: [1] 菜单栏、[2] 工具栏、[3] 资源管理树、[4] 属性管理器、[5] 输出窗口、[6] 状态栏、[7] 视图窗口以及 [8] RGB 窗口组成。其中部分都是停靠窗口,可以在菜单栏的视图选项设置是否显示,方便用户自定义软件界面。软件还提供 Windows 和 Darcula 两大主题,其中 Darcula 主题为默认主题,仿照 Visual Studio 和 Android Studio 相应暗系主题设计,极具极客风范。不过为了适应大部分用户,本手册中的示例都是在 Windows 主题下操作的。
CloudViewer 下载及声明
- 软件下载:CloudViewer 下载 (软件大小 23.7 MB,目前仅支持 Windows 系统)。
- Github 源码:https://github.com/nightn/CloudViewer (欢迎 Star 和 Fork)
- 使用手册:http://nightn.com/2017/04/15/cloudviewer
- 开发环境:CloudViewer 是用 Windows 10 (64 位) 系统下的 Mircosoft Visual Studio Professional 2013,结合使用 Qt 5.7.0 (64 位) 及 PCL 1.8.0 (64 位) 等开源库进行开发的。
- 资源使用:软件所使用的图片资源均来源于 www.easyicon.net。
- 声明:本软件用作分享与学习,若转载请注明出处,勿作任何商业用途。
CloudViewer 使用
1. 点云 IO
点云 IO 操作主要包括 Open
, Add
, Save
, Clear
和 Change
等。
1.1 打开点云
[重要说明] 点云存放路径不能有中文字符,否则点云不能正常打开!
点云是由很多个具有三维坐标 x, y, z 的点组成的数据格式,除了位置信息外,点云还可以包含颜色信息(点云的 RGB 值)、透明信息、法线信息等。目前常用的点云格式有 pcd, ply 以及 obj 格式。打开这三种格式的点云主要通过 Qt 库的文件对话框和 PCL 库中载入点云数据的相关 API 实现。
点云 IO 的常用操作可以在 File
菜单及工具栏中找到:
打开动作 Open
的实现效果如下图,支持多选进行批量打开。
1.2 添加点云
点云处理中,有时需要同时对多个点云在同一视图窗口进行可视化和处理。添加点云 Add
每次可以添加一个或多个点云文件,而不会清空后台已经缓存的点云数据,也不会清空视图窗口已经显示的点云模型。理论上,添加点云的数量没有限制。Add
实现效果如下图(为了便于区分,将点云设置成了不同颜色):
1.3 保存点云
保存点云 Save
有两个特点:
多类型保存。
Open
可以实现对 pcd, ply 和 obj 等格式文件的多类型打开,Save
也可以将文件保存成 pcd, ply 等多种类型,这样也就实现了点云的格式转换功能:
- 多文件保存。CloudViewer 还能将视图窗口显示的所有点云保存为同一个文件,实现了多文件的合并保存。
1.4 清空点云
清空点云 Clear
可将视图窗口中的所有点云模型及后台缓存数据清空。
1.5 点云格式转换
格式转换 Change
暂时未做实现。因为通过 Open
和 Save
就可以完成点云格式转换。
2. 点云基本操作
点云基本操作会直接影响点云文件的内容,基本功能包括改变点云颜色、点云格式转换、点云合并等。
2.1 改变点云颜色
点云中的点不但具有三维信息(x, y, z 坐标),还具有颜色信息(R, G, B),为了更形象地描述点云模型,抑或是为了区分不同点云模型,出于这样的目的,我们需要对点云模型的颜色进行修改。具体包括的功能为:
调整RGB值改变单一点云文件颜色。
在多个点云同时显示时,通过在资源管理树的item进行选择,实现对某一个选定的点云进行颜色变换。
既可以通过滑块控件设置RGB,又可以通过颜色对话框来选择具体颜色。
随机上色功能。
2.2 点云格式转换
点云文件的格式种类非常多,常见的能用 PCL 库直接处理的包括 ply, pcd 等,三维扫描仪保存的 wrl 格式。我们往往需要对点云格式进行转换,但是目前存在的主流点云软件,如 Geomagic Studio,Rapidform,MeshLab 等对点云格式转换的支持并不令人满意(比如 Geomagic Studio 能够导入ply文件并对其进行操作,但却不能保存为 ply,只能保存为 wrl。然后需要利用 MeshLab 将 wrl 转换为 ply,最后还需要利用自己写的程序将 ply 转为 pcd,过程非常麻烦!)
CloudViewer 目前实现了多种点云格式的相互转换(wrl文件的转换还有待进一步开发),通过打开并另存为即可实现三种不同点云格式之间的相互转换,打开和保存的实现可以参见上述部分。如下图:
2.3 合并点云
点云合并 = “多点云打开” + “多点云保存”。上述打开和保存功能已经实现了点云合并功能,在此不再赘述。
3. 可视化基本操作
可视化基本操作主要包括设置背景颜色,设置点云的可视化尺寸,设置视图方位(Main view, Left view, Top view),网格面片显示以及网格线框显示等。
3.1 设置背景颜色
视图窗口中的点云颜色可以更改,背景颜色亦然,效果如下:
3.2 设置点云可视化尺寸
点云由很多点构成,每个点本身具有颜色信息,但是没有尺寸大小的信息。但需要以不同大小进行显示,这是可视化的任务,不涉及对点云本身的修改。设置点云可视化尺寸功能效果如下,分别对应size = 1, 2, 3时点云的大小,为了不影响点云操作,允许的最大尺寸为10(因为点的尺寸越大,渲染速度越慢,对点云的操作也不方便)。
3.3 设置视图方位
设置可视化的视图方位提供了三种不同的视图,主视图(Main View),左视图(Left View)和俯视图(Top View),通过选择相应的视图方位,实现对点云更加快捷的操作。设置视图方位效果如下:
3.4 网格面片显示及网格线框显示
PCL库中提供了非常强大的点云处理功能。在CloudViewer中,实现了点云的网格面片显示和网格线框显示,实现分为三步:点云法线估计,曲面重建和网格显示。显示效果如下:
网格面片显示:
网格线框显示:
4. 模型生成
4.1 立方点云生成
这是一个非常简单但很实用的功能,当你没有点云数据时,可以通过这个功能,生成一个由50000个点随机排布成的立方,如下图所示:
4.2 基本三维模型生成
仅实现了球体的生成。球体生成效果如下图所示:
5. 其他功能
5.1 停靠窗口的显示与隐藏
CloudViewer 包含四个停靠窗口:资源管理树(Data Manager)、属性管理器(Property Manager)、输出窗口(Console)以及RGB窗口(RGB Manager)。通过 View 菜单的选项可以实现停靠窗口的显示及隐藏。
5.2 Console 窗口
输出窗口提供了记录你的操作日志,方便查看,通过右击选择 Clear
可以进行清空,如果你觉得输出窗口没有必要,也可以通过右击选择 Disable console
和 Enable console
来禁用或使用输出窗口。
5.3 资源管理树
资源管理树显示了当前打开的所有点云,可以通过单选或多选,然后右键,进行点云的隐藏、显示、删除设置颜色等操作,非常快捷。
5.4 属性管理器
属性管理器记录了选中点云的一些属性:选中点云的点的数量、RGB 信息,还包括打开的点云的总个数,及所有点云点的数量等。
5.5 关于
通过 Help
可以访问我的博客,查看 CloudViewer 的使用手册(后续会出开发手册)。About
界面记录了 CloudViewer 的版本信息和开发者信息。
CloudViewer 总结
CloudViewer 作为一款点云可视化软件,提供了多点云类型,多文件的读取和写入,并实现了点云类型的转换及点云模型的合并。在此基础上,还提供了丰富的可视化操作,如设置点云颜色及尺寸,设置显示背景颜色,点云的网格面片显示,点云的网格线框显示等;此外,还提供了简单的模型生成及绘制功能,如生成立方随机排布的点云模型,绘制基本三维模型如球体和圆柱体等。在界面上,综合运用了 VTK 显示窗口,停靠窗口,文件树窗口,列表窗口,菜单栏,工具栏,状态栏等一系列 Qt 控件,并建立了功能丰富的多种信号槽联系。
在实际测试中,点云的读取和处理速度也非常快,在本机打开包含 50000 个点的点云文件,耗时不超过1秒,打开包含 170000 个点的点云文件,耗时 3 秒左右。而且在程序设计中,综合考虑了各种用户可能会执行的违规操作,为了防止软件崩溃,对多种错误操作进行了合理反馈。
CloudViewer 还有进一步提升的空间。作为一款点云可视化软件,在后期开发中应该会加入少量三维点云处理的功能,如多角度拍摄的点云进行拼接,点云三角化及光学渲染等。最后,比较重要的一点是,软硬件结合,由于实验室常用微软的 Kinect2.0 获取点云数据,但是微软自带的 SDK 采集到的数据不能很好的反应点云的颜色信息(颜色是根据深度信息来确定的,而不是物体的实际颜色),因此,还可以考虑增加 CloudViewer 与 Kinect 连接及实时可视化的功能。相信随着更多功能的添加,CloudViewer 能够更加胜任在实际实验中的点云获取,点云可视化和点云处理的方方面面。