1.介绍
1.1 背景
(1)本文主要内容是将三维点云(离散的三维点)进行表面重建生成Mesh网格,之前有篇关于开源软件-Cars-Mesh使用,它是对开源软件-Cars使用生成的点云进行处理得到Mesh网格结构,由于使用cars-mesh需要的配置文件较多,深入其内部涉及到点云mesh构建部分,得出如下结论:
cars-mesh主要有三种mesh构建方法:
- 泊松表面重建(poisson_reconstruction)
- Delaunay 三角剖分(delaunay_2d_reconstruction)
- ball_pivoting_reconstruction
此外还有移动立方体(Marching Cubes Algorithm)、贪婪投影三角化(Greedy Triangulation)等方法。
(2)由于基于卫星影像生成的建筑物点云往往只有建筑物屋顶点云,建筑物立面几乎没有点云,因此充分考虑这种特点,选取了Delaunay三角剖分的方法进行重建,能够保持建筑物立面垂直以及屋顶有棱有角。
1.2 效果示意
如下效果是在meshlab中呈现的:
2 算法实现
2.1 依赖库
本算法依赖三维点云处理库open3d以及在二维上进行三角剖分的Delaunay实现函数,这里在scipy和matplotlib均有实现,本文选择了scipy中的。
2.2 实验数据
vertices.ply,其只包含点的xyz信息,点云对应的颜色无。实验数据见资源绑定,包含原始点云和mesh构建后的数据,效果在cloudcompare中按照高程渲染效果如下:
2.3 代码实现
import open3d as o3d
import numpy as np
from scipy.spatial import Delaunay
import matplotlib.tri as mtri
class Mesh:
def __init__(self,