【卫星影像三维重建-全流程代码实现】点云Mesh重构

点云—>Mesh模型

  • 1.介绍
    • 1.1 背景
    • 1.2 效果示意
  • 2 算法实现
    • 2.1 依赖库
    • 2.2 实验数据
    • 2.3 代码实现
    • 2.4 实验效果
  • 3.总结

1.介绍

1.1 背景

(1)本文主要内容是将三维点云(离散的三维点)进行表面重建生成Mesh网格,之前有篇关于开源软件-Cars-Mesh使用,它是对开源软件-Cars使用生成的点云进行处理得到Mesh网格结构,由于使用cars-mesh需要的配置文件较多,深入其内部涉及到点云mesh构建部分,得出如下结论:

cars-mesh主要有三种mesh构建方法:

  1. 泊松表面重建(poisson_reconstruction)
  2. Delaunay 三角剖分(delaunay_2d_reconstruction)
  3. 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, vertices, triangles, vertex_colors=None):
        self.vertices = vertices		
        self.triangles = triangles
        self.vertex_colors = vertex_colors

def delaunay_2d_reconstruction(pcd_file: str, method: str = "scipy") -> Mesh:
    """
    2.5D Delaunay triangulation: Delaunay triangulation on the planimetric
    points and add afterwards the z coordinates.

    Parameters
    ----------
    pcd_file: str
        Path to the PLY file containing point cloud data.
    method: str, default='scipy'
        Method to use for Delaunay 2.5D triangulation. Available methods are
        'scipy' and 'matplotlib'.

    Returns
    -------
    mesh: Mesh
        Mesh object containing vertices, triangles, and vertex colors.
    """

    # Load point cloud from PLY file
    pcd = o3d.io.read_point_cloud(pcd_file)

    # Get points, colors, and z coordinates from point cloud
    points = np.asarray(pcd.points)[:, :2]  # Project points to XY plane
    colors = np.asarray(pcd.colors)

    # Perform 2D Delaunay triangulation
    if method == "scipy":
        mesh_data = Delaunay(points)
    elif method == "matplotlib":
        mesh_data = mtri.Triangulation(points[:, 0], points[:, 1])

    # Construct mesh
    mesh_vertices = np.hstack([points, np.zeros((len(points), 1))])
    mesh_triangles = mesh_data.simplices

    # Set z coordinates based on the original point cloud
    z_coordinates = np.asarray(pcd.points)[:, 2]
    mesh_vertices[:, 2] = z_coordinates

    # Create Mesh object with vertex colors
    mesh = Mesh(mesh_vertices, mesh_triangles, vertex_colors=colors)
    
    return mesh

def save_mesh_as_ply(mesh: Mesh, filename: str):
    """
    Save mesh as a PLY file.

    Parameters
    ----------
    mesh: Mesh
        Mesh object containing vertices, triangles, and vertex colors.
    filename: str
        Path to save the PLY file.
    """
    # Create Open3D TriangleMesh object
    mesh_o3d = o3d.geometry.TriangleMesh()
    mesh_o3d.vertices = o3d.utility.Vector3dVector(mesh.vertices)
    mesh_o3d.triangles = o3d.utility.Vector3iVector(mesh.triangles)

    # Set vertex colors
    if mesh.vertex_colors is not None:
        mesh_o3d.vertex_colors = o3d.utility.Vector3dVector(mesh.vertex_colors)

    # Save TriangleMesh object to PLY file
    o3d.io.write_triangle_mesh(filename, mesh_o3d)

# Example usage:
pcd_file = "vertices.ply"
method = "scipy"  # or "matplotlib"
mesh = delaunay_2d_reconstruction(pcd_file, method)
save_mesh_as_ply(mesh, "vertices_result_mesh.ply")


2.4 实验效果

整体效果在前面已经有呈现了,以下呈现几栋比较高的建筑效果:首先是mesh网格结构:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.总结

整体而言,针对基于卫星影像生成的点云,Delaunay 三角剖分mesh构建效果良好:
(1)mesh重构本质上还是依赖于点云生成效果好坏,Delaunay 三角剖分在高建筑效果比较突出,但在低矮建筑效果差一些;
(2)在建筑物楼顶棱角细节层面以及与地面接触的部分有待进一步优化;
(3)TODO:尝试更多的mesh重构方法以及优化(2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/623220.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Day27

回溯算法part01 回溯算法 回溯算法的本质:本质是穷举,穷举所有可能,然后选出我们想要的答案 更高效的回溯算法:加入剪枝操作 回溯算法可以解决的问题类型 组合问题:N个数里面按一定规则找出k个数的集合切割问题&…

VRRP协议-负载分担配置【分别在路由器与交换机上配置】

VRRP在路由器与交换机上的不同配置 一、使用路由器实现负载分担二、使用交换机实现负载分担一、使用路由器实现负载分担 使用R1与R2两台设备分别进行VRRP备份组 VRRP备份组1,虚拟pc1的网关地址10.1.1.254 VRRP备份组2,虚拟pc2的网关地址10.1.1.253 ①备份组1的vrid=1,vrip=…

叉车AGV销量19.5万台,订单暴增46%,这10家公司展开激烈厮杀~

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 在2023年的中国,无人叉车市场迎来了爆炸性的增长。根据CMR产业联盟和新战略移动机器人产业研究所的统计,全年销量达到了惊…

java 使用hh或者HH异常

故障描述 使用了HH或者hh使用时间format、DatetimeFormat注解时序列化失败 故障原因 当使用hh的时候,小时只能是1-24 使用KK的时候,小时只能是0-23 比如:凌晨0:30,使用hh就是0:30 am, kk就是12:30 24小时制的话,使…

PyQt:界面无边框+实现窗口最小化(任务栏图标隐藏+托盘图标显示)

一、整体实现效果 诸如WX、各种管家的桌面显示方式。窗口关闭后,往往是任务栏图标消失,保持右下角托盘图标显示,保持后台运行。双击托盘图标后,窗口显示。 二、代码实现 from PyQt5.QtWidgets import * from ato_upgrade impo…

Backend - 数据分析 Pandas

目录 一、作用 二、基础环境 (一)执行虚拟环境的终端命令 (二)代码中导包 三、应用:一维数组 (一)Series对象 1. 含义 2. 常用属性和方法 (1)属性 (…

【精读Yamamoto】方向性连接如何丰富神经网络的功能复杂度 | 体外神经元培养实验 | 脉冲神经元模型(SNN) | 状态转移模型

探索大脑的微观世界:方向性连接如何丰富神经网络的功能复杂度 在神经科学领域,理解大脑如何通过其复杂的网络结构实现高级功能一直是一个核心议题。最近,一项由Nobuaki Monma和Hideaki Yamamoto博士领导的研究为我们提供了新的视角&#xff…

【java-数据结构-栈和队列】

上篇文章,我们已经完成链表的收尾工作,从本篇文章开始,将进入栈和队列的学习,j觉得小编写的还可以的可以留个关注支持一下~话不多说,上正文~ 1.栈 概念:一种特殊的线性表,其只允许在固定的一端…

信创应用软件之协同办公(OA)

信创应用软件之协同办公(OA) 概述 办公 “办公”一词源于历史上对公事、公务处理的简称,现代办公有了更先进的诠释,指在特定时间、特定空间中人互相协作、共同运作的过程, 即围绕以“人”为主的办公主体与其关联的一…

zabbix监控mariadb

zabbix 服务端安装请参阅:红帽 9 zabbix 安装流程_红帽安装zabbix-CSDN博客 源码包安装mariadb请参阅:源码包安装mariadb_mariadb 11 源码编译安装-CSDN博客 在MariaDB中,你需要创建一个专门的用户,用于Zabbix进行监控。这个用户…

百度云内容审核

百度云内容审核介绍 百度智能云内容审核平台:是一款针对多媒体内容进行智能审核的服务平台。支持对图像、文本、音频、视频、直播等内容进行安全审核,具有精准的审核模型、丰富的审核维度、灵活的规则配置等特点。通过可视化界面选择审核维度、个性化调整…

疯狂学英语

我上本科的时候,学校出国留学的气氛不浓厚,我们班只有一名同学有出国留学的倾向,我们宿舍八个人没有一个考虑过留学。 只有小昊,在本校上了研究生之后,不知道受到什么影响,想出国留学。那时候小昊利用一切…

单文件EXE绿色软件制作工具​Enigma Virtual Box​利用 EnigmaVB 打包 Qt 应用程序

功能描述:详细介绍如何利用 EnigmaVB 打包 Qt 应用程序,从 EnigmaVB 软件下载、安装,到如何使用,一步步教你走进 EnigmaVB 软件,最后还介绍了一款针对 Enigma Virtual Box 制作的单文件程序进行解包的工具 EnigmaVBUnp…

【启明智显技术分享】SSD201/SSD202D核心板UI界面开发全攻略:LVGL使用指南

提示:作为Espressif(乐鑫科技)大中华区合作伙伴及sigmastar(厦门星宸)VAD合作伙伴,我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考。同时也用心整理了乐鑫及星宸…

数字化信息协同助力智能巡查,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建无人机数字侦查场景下智能靶标检测识别系统

无人机的快速发展与普及,使得其进入千家万户各行各业,发挥着越来越重要的作用。随着科技的飞速发展,未来的数字信息化战场正逐渐展现出其独特的作战形态。在这个以数据和信息为主导的新战场上,无人机侦查手段与人工智能目标智能检…

Django图书馆综合项目-学习

图书馆项目 一 前期准备 安装好所需的环境 我这边用的IDE是VScode 操作系统是MACOS 二 先创建一个虚拟环境 python3 -m venv myenvbook source myenvbook/bin/activate 三 安装 Django pip3 install django4.2 四 创建 Django 项目 django-admin startproject bookp…

二叉树的前序、中序、后序遍历

二叉树的前序、中序、后序 1.二叉树的前序遍历 题目: 二叉树的前序遍历 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3]示例 2: 输入&#xff…

LLM应用-文档解析 AI大模型总结分析文档

1)https://notegpt.io/pdf-summary 支持总结,思维导图、对话 2)chatdoc https://chatdoc.com/ 3)chatpdf https://www.chatpdf.com/ https://www.chatpdfs.cn/ 4)kimi https://kimi.moonshot.cn/

004.可观察对象与观察者

Rx非常适合事件驱动的应用程序。这是有意义的,因为事件(作为)(如前所述)是创建时变值的命令式方法。从历史上看,事件驱动编程主要出现在客户端技术中,因为作为事件实现的用户交互。例如,你可能工作过使用OnMouseMove或OnKeyPressed事件。正因…

构建滴滴业务中台:系统架构设计探索

在当今数字化时代,滴滴作为中国领先的出行平台,承载着数亿用户的出行需求,业务规模庞大且复杂多样。为了更好地支撑业务发展和提升服务质量,滴滴不断探索和构建业务中台,以实现业务的快速响应、灵活运营和持续创新。在…