如何生成漂亮的点云渲染图?

1. 背景介绍

之前笔者已经介绍过一种基于blender的点云渲染方法,利用blender软件以及一款对应的PCD插件,能够实现对点云的渲染。原文:https://blog.csdn.net/aliexken/article/details/118356716

使用该渲染流程,能够利用blender强大的渲染工具,完成对点云的可视化渲染任务。但是,该方法在操作层面存在一些小问题,即渲染流程略显繁琐。通常我们在做论文的渲染图时,仅仅是处理一些比较简单的渲染任务,使用如此繁琐的渲染操作,有点杀鸡用牛刀。那么,有没有比较简单易用的点云渲染方法,来实现对点云的渲染工作呢?

NTU同事推荐了一个点云渲染项目,即pointflow,github项目链接:

https://github.com/zekunhao1995/PointFlowRenderer

Yang G, Huang X, Hao Z, et al. Pointflow: 3d point cloud generation with continuous normalizing flows[C]. International Conference on Computer Vision (ICCV). 2019.

Pointflow用于建立一个基于点云数据的渲染管线,处理点云的可视化问题。其原理是将点云变成一组球形对象,然后对这组球形对象进行渲染,并最终得到渲染图像。如下图所示:

 接下来,笔者将带大家一起学习一下,如何使用Pointflow工具获得点云渲染图。

2. 准备工作

首先我们需要下载Pointflow对应的工具;

1)模型处理程序:https://github.com/zekunhao1995/PointFlowRenderer

2)Mitsuba渲染软件: http://www.mitsuba-renderer.org/

模型处理程序的py文件为pointflow_fig_colorful.py,具体功能就是将一个npy点云文件处理为一个尺度与点数归一化的xml文件,以方便渲染软件操作。

使用Mitsuba渲染软件载入在之前获得的xml文件后,就能够启动渲染操作流程。

这里需要注意的是,pointflow_fig_colorful.py文件的源代码没有提供直接读取模型文件并转换为np的代码,为了方便起见,笔者增加了相关代码,以方便读者使用,如下:

import numpy as np
from plyfile import PlyData, PlyElement
import pandas as pd

file_dir = 'F:/Download/3D_Tools/Point_Cloud_Rendering/ply/Lion2.ply'  #文件的路径
plydata = PlyData.read(file_dir)  # 读取文件
data = plydata.elements[0].data  # 读取数据
data_pd = pd.DataFrame(data)  # 转换成DataFrame, 因为DataFrame可以解析结构化的数据
pcl = np.zeros(data_pd.shape, dtype=np.float)  # 初始化储存数据的array
property_names = data[0].dtype.names  # 读取property的名字
for i, name in enumerate(property_names):  # 按property读取数据,这样可以保证读出的数据是同样的数据类型。
    pcl[:, i] = data_pd[name]

注意,在使用时,需要安装对应的包:panda,plyfile。

3. 具体步骤

通过运行pointflow_fig_colorful.py,得到了可以载入程序的xml文件。我们首先看一下这个xml文件里边都由什么内容:

<shape type="sphere">
    <float name="radius" value="0.025"/>
    <transform name="toWorld">
    <translate x="-0.0035684" y="-0.30678" z="-0.024441"/>
        </transform>
        <bsdf type="diffuse">
             <rgb name="reflectance" value="0.703327,0.27374,0.65604"/>
        </bsdf>
</shape>

其他关于纹理,颜色的内容,可以参看文档:

https://mitsuba2.readthedocs.io/en/latest/src/getting_started/file_format.html

值得注意的是上述代码,即sphere。这里需要解释一下,就是点云之所以能够被渲染,是因为程序将点云中的每一个点用球体代替。xml文件中的这段sphere就是声明对应一个点的球体,包括颜色,半径以及坐标。

将xml文件导入到Mitsuba渲染软件,结果如下:

 

有一些基本的操作可以使用,已调整渲染的一些参数,这里建议是使用默认设置。

最后,点击左上角绿色执行按钮,完成渲染:

完成渲染后,导出最终的渲染结果:

Guess you like

Origin blog.csdn.net/aliexken/article/details/120112684