【卫星影像三维重建-全流程代码实现】点云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 mtriclass Mesh:def __init__(self, vertices, triangles, vertex_colors=None):self.vertices = vertices		self.triangles = trianglesself.vertex_colors = vertex_colorsdef delaunay_2d_reconstruction(pcd_file: str, method: str = "scipy") -> Mesh:"""2.5D Delaunay triangulation: Delaunay triangulation on the planimetricpoints and add afterwards the z coordinates.Parameters----------pcd_file: strPath 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: MeshMesh object containing vertices, triangles, and vertex colors."""# Load point cloud from PLY filepcd = o3d.io.read_point_cloud(pcd_file)# Get points, colors, and z coordinates from point cloudpoints = np.asarray(pcd.points)[:, :2]  # Project points to XY planecolors = np.asarray(pcd.colors)# Perform 2D Delaunay triangulationif method == "scipy":mesh_data = Delaunay(points)elif method == "matplotlib":mesh_data = mtri.Triangulation(points[:, 0], points[:, 1])# Construct meshmesh_vertices = np.hstack([points, np.zeros((len(points), 1))])mesh_triangles = mesh_data.simplices# Set z coordinates based on the original point cloudz_coordinates = np.asarray(pcd.points)[:, 2]mesh_vertices[:, 2] = z_coordinates# Create Mesh object with vertex colorsmesh = Mesh(mesh_vertices, mesh_triangles, vertex_colors=colors)return meshdef save_mesh_as_ply(mesh: Mesh, filename: str):"""Save mesh as a PLY file.Parameters----------mesh: MeshMesh object containing vertices, triangles, and vertex colors.filename: strPath to save the PLY file."""# Create Open3D TriangleMesh objectmesh_o3d = o3d.geometry.TriangleMesh()mesh_o3d.vertices = o3d.utility.Vector3dVector(mesh.vertices)mesh_o3d.triangles = o3d.utility.Vector3iVector(mesh.triangles)# Set vertex colorsif mesh.vertex_colors is not None:mesh_o3d.vertex_colors = o3d.utility.Vector3dVector(mesh.vertex_colors)# Save TriangleMesh object to PLY fileo3d.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)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IP跳变是什么,有什么作用?

IP跳变,简单来说,就是用户在使用网络时,不固定使用一个IP地址,而是定期或根据需求切换到另一个IP地址。这种技术为用户在网络环境中提供了一定的灵活性和安全性。 首先,我们来看看IP跳变的具体实现方式。当用户需要切…

UML快速入门篇

目录 1. UML概述 2. 类的表示 2.1. 类的表示 2.2. 抽象类的表示 2.3. 接口的表示 3. 类的属性,方法,访问权限的表示 3.1. 类的属性 3.2. 类的方法 3.3. 类的权限 4. 类的关联 4.1. 单向关联 4.2. 双向关联 4.3. 自关联 4.4. 类的聚合 4.5.…

Lists.partition用法详解

文章目录 一、引入依赖二、用法三、输出 一、引入依赖 依赖于谷歌的guava 包 <!-- guava --><dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>28.1-jre</version></dependency&…

仿照el-upload 封装自己的上传控件(el-upload 移动端无法吊起相机)

input选择图片的那个选择在h5的时候在去年下半年突然无法无法出现唤醒相机的选项 不知道出现的原因 发现el-upload作为h5的时候无法吊起相机 又因为需要对服务端地址图片进行回显&#xff08;处于编辑功能的情况下 非新增 新增el-upload 可以实现回显&#xff09; 两个功…

如文所示:

影响 ConnectWise 的 ScreenConnect 远程桌面访问产品的严重漏洞已被广泛利用来传播勒索软件和其他类型的恶意软件。 ConnectWise 于 2 月 19 日通知客户&#xff0c;它已发布针对关键身份验证绕过缺陷和高严重性路径遍历问题的补丁。该安全漏洞当时没有 CVE 标识符。第二天&am…

绘唐3启动器怎么启动一键追爆款3正式版

绘唐3启动器怎么启动一键追爆款3正式版 工具入口 一.文案助手&#xff1a; 【注意&#xff01;&#xff01;】如果图片无显示&#xff0c;一般情况下被杀毒拦截&#xff0c;需关闭杀毒软件或者信任文件路径。 win10设置排除文件&#xff1a; 1.【新建工程】使用前先新建工程…

谷歌Gboard应用的语言模型创新:提升打字体验的隐私保护技术

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

blender cell fracture制作破碎效果,将一个模型破碎成多个模型

效果&#xff1a; 1.打开编辑-》偏好设置。搜索cell&#xff0c;勾选上如下图所示的&#xff0c;然后点击左下角菜单里的保存设置。 2.选中需要破碎的物体&#xff0c;按快捷键f3&#xff08;快速搜索插件&#xff09;&#xff0c;搜索cell fracture。 3.调整自己需要的参数配置…

广东省网络安全竞赛部分web,misc wp

我的队伍只做了5题&#xff0c;还是太菜了&#xff0c;本来不想发的&#xff0c;但是写都写了&#xff0c;还是水一篇博客吧 这里是我们队的wp misc1 给了一个压缩包&#xff0c;解压需要密码&#xff0c;用纯数字密码没跑出来&#xff0c;感觉可能不是要强跑&#xff0c;看…

今天开发了一款软件,我竟然只用敲了一个字母(文末揭晓)

软件课题&#xff1a;Python实现打印100内数学试题软件及开发过程 一、需求管理&#xff1a; 1.实现语言&#xff1a;Python 2.打印纸张&#xff1a;A4 3.铺满整张纸 4.打包成exe 先看效果&#xff1a; 1. 2.电脑打印预览 3.打印到A4纸效果&#xff08;晚上拍的&#x…

Java后端的接口参数两个interger 类型情况解决

get请求 &#xff0c;对应请求头 RequestParm, post请求&#xff0c; 对应请求体 &#xff0c;RequestBody 两个Integer参数情况 GetMapping("/insertStaffClass")public R<Void> insertStaffClass(RequestParam Integer staffId,RequestParam List<Integ…

Node.js全栈:从一个简单的例子开始

第一章&#xff1a;从一个简单的例子开始第二章&#xff1a;看官方文档的艺术第三章&#xff1a;浏览器显示一个网页 首先&#xff0c;在VSCode编辑器中打开一个没有任何文件的空目录&#xff0c;然后创建一个package.json文件。 为了方便大家复制&#xff0c;我把文件内容放到…

Pytorch的torch.nn.functional.cross_entropy的ignore_index细解

作用 ignore_index用于忽略ground-truth中某些不需要参与计算的类。假设有两类{0:背景&#xff0c;1&#xff1a;前景}&#xff0c;若想在计算交叉熵时忽略背景(0)类&#xff0c;则可令ignore_index0&#xff08;同理忽略前景计算可设ignore_index1&#xff09;。 代码示例 i…

使用Flask的send_file方法实现文件下载功能

文章目录 什么是send_file方法&#xff1f;如何在Flask应用中使用send_file方法&#xff1f;示例拓展处理文件不存在的情况设置下载文件的名称实现文件下载的权限控制 结论 在Web开发中&#xff0c;经常需要实现文件下载功能&#xff0c;而Python的Flask框架提供了方便的send_f…

华为手机恢复出厂设置后怎么还原数据?该如何预防数据丢失?

华为手机恢复出厂设置是将手机恢复到出厂时的初始状态&#xff0c;同时会删除所有用户数据和个人设置。如果不做任何预防措施&#xff0c;在恢复出厂设置后&#xff0c;您将丢失手机上的所有数据。那华为手机恢复出厂设置后怎么还原数据呢&#xff1f;以下是关于如何在华为手机…

新的语言学习系统: 记忆镶嵌

摘要 记忆镶嵌是由多个关联记忆网络协同工作来完成感兴趣的预测任务。与transformer类似,记忆镶嵌具有组合能力和上下文学习能力。与transformer不同,记忆镶嵌以相对透明的方式实现这些能力。该研究在玩具示例上展示了这些能力,并且还表明记忆镶嵌在中等规模语言建模任务上的表…

头歌(EduCoder):数据挖掘算法原理与实践 -- 决策树

【头歌】机器学习实训代码 第一关&#xff1a;决策树算法思想 1、下列说法正确的是&#xff1f;&#xff08; AB &#xff09; A、训练决策树的过程就是构建决策树的过程B、ID3算法是根据信息增益来构建决策树C、C4.5算法是根据基尼系数来构建决策树D、决策树模型的可理解性不…

YOLOv9全网最新改进系列::YOLOv9完美融合双卷积核(DualConv)来构建轻量级深度神经网络,目标检测模型有效涨点神器!!!

YOLOv9全网最新改进系列&#xff1a;&#xff1a;YOLOv9完美融合双卷积核&#xff08;DualConv&#xff09;来构建轻量级深度神经网络,目标检测模型有效涨点神器&#xff01;&#xff01;&#xff01; YOLOv9原文链接戳这里&#xff0c;原文全文翻译请关注B站Ai学术叫叫首er …

Docker 的 Busybox 操作系统镜像

BusyBox是一个遵循GPL协议、以自由软件形式发行的应用程序。 Busybox在单一的可执行文件中提供了精简的Unix工具集&#xff0c;可运行于多款POSIX环境的操作系统&#xff0c;例如Linux&#xff08;包括Android&#xff09;、Hurd、FreeBSD等等。 由于BusyBox可执行文件的文件…

石墨烯材料商汉烯科技授权世强硬创,代理产品具备高导热/导电特点

近日&#xff0c;武汉汉烯科技有限公司&#xff08;下称“汉烯科技”&#xff0c;英文&#xff1a;HANXI TECH&#xff09;与世强先进&#xff08;深圳&#xff09;科技股份有限公司&#xff08;下称“世强先进”&#xff09;达成授权代理合作&#xff0c;面向锂电新能源、电子…