【环境搭建】使用openSfM+MVSNet重建稠密点云

本帖详细介绍了如何使用openSfM+MVSNet对真实采集的数据进行稀疏重建与稠密重建,并针对一些真实场景下可能遇到的问题进行了整理。

目录

  • 1. 背景
  • 2. 数据采集
  • 3. 使用openSfM进行稀疏重建
    • 3.1 输入文件
    • 3.2 稀疏重建
  • 4. 使用MVSNet进行稠密重建
  • 5. Q&A:为什么我的重建效果不好?

1. 背景

随着近年来深度学习在3D视觉中的应用,传统的三维重建软件如colmap、openSfM、openMVS,都无时无刻不面临着新兴算法的挑战。传统算法虽然在应对不同数据集时的可靠性有一定保障,但在弱纹理区域、重复纹理区域一直表现不佳,同时,大规模场景重建的时间开销也逐渐被人所不容忍(尤其在深度学习的方法被引入之后)。因此,一个靠谱的pipeline是先使用传统算法进行稀疏重建,对所输入的图像进行位姿估计,然后将结果交给基于深度学习的算法,比如MVSNet系列,来进行深度图估计和稠密重建。

在此,我们不对重建算法本身进行介绍,只教大家如何一步一步跑通这个pipeline。

2. 数据采集

数据采集方面,我们只需要使用相机、手机、无人机,甚至遥感卫星,对想要重建的物体拍照就可以了。注意以下方面,有助于提升最终的重建质量:

  • 拍摄的照片尽可能清晰。
  • 照片与照片重叠的区域要大一些,如果场景很大,就尽可能多拍。
  • 如果设备是无人机之类的,可以获取相机参数,这对于稀疏重建很重要,省去了算法重新估算的麻烦。

3. 使用openSfM进行稀疏重建

环境搭建方面,硬件上无特殊要求,软件上可以参考openSfM的官方文档。

3.1 输入文件

交给openSfM的时候,image is all you need,把所有拍摄的一个场景的图片都放到一个images的文件夹里,就可以开始重建了。为了对后续稠密重建更友好,建议先对照片文件重新命名,因为openSfM会给文件直接加后缀jpg,也就是说如果你的图片是JPG,稀疏重建的记录会把文件名记录成JPG.jpg,所以不如我们先自己改好名字。

import osdef rename_files_to_jpg(folder_path):# Loop through all files in the folderfor filename in os.listdir(folder_path):# Split the filename and extensionname, ext = os.path.splitext(filename)# Remove any periods from the namename = name.replace('.', 

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

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

相关文章

检索增强生成Retrieval-Augmented Generation(RAG)简介

检索增强生成Retrieval-Augmented Generation(RAG)简介 引言 在自然语言处理领域,生成式任务(如文本生成、机器翻译等)一直备受关注。传统的生成模型如GPT、BERT等虽然取得了显著成果,但在处理长文本、知…

C#数组复习

一、一维数组 using System.Collections; using System.Collections.Generic; using UnityEngine;public class ShuZu : MonoBehaviour {#region 知识点一 基本概念//数组是存储一组相同类型数据的集合//数组分为 一维、二维、交错数组//一般情况 一维数组 就简称为数组#en…

ACE之Proactor框架

简介 Proactor使用的是异步io,其实现与Reactor相似,也使用桥接模式 组成 #mermaid-svg-QFvK6qGqdiFGE0Le {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QFvK6qGqdiFGE0Le .error-icon{fil…

OpenAI从GPT-4V到GPT-4O,再到GPT-4OMini简介

OpenAI从GPT-4V到GPT-4O,再到GPT-4OMini简介 一、引言 在人工智能领域,OpenAI的GPT系列模型一直是自然语言处理的标杆。随着技术的不断进步,OpenAI推出了多个版本的GPT模型,包括视觉增强的GPT-4V(GPT-4 with Vision&…

PeRF: Preemption-enabled RDMA Framework——论文泛读

ATC 2024 Paper 论文阅读笔记整理 问题 远程直接内存访问(RDMA)为数据密集型应用程序提供了高吞吐量、低延迟和最小的CPU使用率。各种数据密集型应用程序,如大数据分析[4,5]、机器学习[2,11,15,33]、分布式存储[21,27,28,41]和键值存储[20,…

Maven Release Plugin 的具体用法

Maven Release Plugin(Maven 发布插件)是一个用于帮助在Maven项目中执行版本发布流程的插件。它的主要功能是简化项目版本的发布和管理,确保版本号的正确性,并自动处理与版本发布相关的任务。以下是Maven Release Plugin的具体用法…

[用AI日进斗金系列]用码上飞在企微接单开发一个项目管理系统!

今天是【日进斗金】系列的第二期文章。 先给不了解这个系列的朋友们介绍一下,在这个系列的文章中,我们将会在企微的工作台的“需求发布页面”中寻找有软件开发需求的用户 并通过自研的L4级自动化智能软件开发平台「码上飞CodeFlying」让AI生成应用以解…

基于面向对象重构模型训练器

引言 深度学习领域我们常用jupyter来演练代码,但实际生产环境中不可能像jupyter一样,所有代码逻辑都在面向过程编程,这会导致代码可复用性差,维护难度高。 前面这篇文章 基于pytorch可视化重学线性回归模型 已经封装了数据加载器…

代理模式详解

1.代理模式的作用 能通过代理对象间接实现对目标对象的访问,在不改变源代码的情况下对目标对象的方法进行增强。 什么是通过代理对象间接实现对目标对象的访问? 举个生活中的例子:例如你买车是通过4s店(代理对象),而不是直接去车工厂(目标对象)&#…

leetcode 116. 填充每个节点的下一个右侧节点指针

leetcode 116. 填充每个节点的下一个右侧节点指针 题目 给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next …

QT 关于QTableWidget的常规使用

目录 一、初始化 二、封装功能用法 三、结语 一、初始化 1、设置表头 直接在ui设计界面修改或者使用QT封装的函数修改,代码如下: QStringList recList {"第一列", "第二列", "第三列"}; ui->tableWidget->setH…

STM32 智能家居自动化控制系统教程

目录 引言环境准备智能家居自动化控制系统基础代码实现:实现智能家居自动化控制系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:家居控制与优化问题解决方案与优化收尾与总结 1. 引言 智能家…

【第一天】计算机网络 TCP/IP模型和OSI模型,从输入URL到页面显示发生了什么

TCP/IP模型和OSI模型 这两个模型属于计算机网络的体系结构。 OSI模型是七层模型,从上到下包括: 应用层,表示层,会话层,传输层,网络层,数据链路层,物理层 TCP/IP模型是四层模型&…

谷粒商城实战笔记-52~53-商品服务-API-三级分类-新增-修改

文章目录 一,52-商品服务-API-三级分类-新增-新增效果完成1,点击Append按钮,显示弹窗2,测试完整代码 二,53-商品服务-API-三级分类-修改-修改效果完成1,添加Edit按钮并绑定事件2,修改弹窗确定按…

C++学习笔记01-语法基础(问题-解答自查版)

前言 以下问题以Q&A形式记录,基本上都是笔者在初学一轮后,掌握不牢或者频繁忘记的点 Q&A的形式有助于学习过程中时刻关注自己的输入与输出关系,也适合做查漏补缺和复盘。 本文对读者可以用作自查,答案在后面&#xff0…

解决llama_index中使用Ollama出现timed out 问题

现象: File "~/anaconda3/envs/leo_py38/lib/python3.8/site-packages/httpx/_transports/default.py", line 86, in map_httpcore_exceptionsraise mapped_exc(message) from exc httpx.ReadTimeout: timed out代码: from llama_index.core …

反转链表 - 力扣(LeetCode)

206. 反转链表 - 力扣(LeetCode) /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode* reverseList(struct ListNode* head) {if(head NULL)return NULL;else{struct Lis…

【iOS】——属性关键字的底层原理

strong,retain,copy,atomic,nonatomic c源码 interface propertyTest : NSObject property (nonatomic, strong) NSString *nsstring___StrongTest; property (nonatomic, retain) NSString *nsstring___RetainTest; property (n…

STM32--HAL库--定时器篇

一:如何配置定时器 打开对应工程串口配置好的工程(上一篇博客)做如下配置: 定时器的中断溢出时间计算公式是: 由图得T100*1000/100MHz 注:100MHz100000000 所以溢出时间等于1ms 关于上图4的自动重装…

ARM功耗管理之Suspend-to-RAM实验

安全之安全(security)博客目录导读 ARM功耗管理精讲与实战汇总参见:Arm功耗管理精讲与实战 思考:睡眠唤醒实验?压力测试?Suspend-to-Idle/RAM/Disk演示? 1、实验环境准备 2、软件代码准备 3、唤醒源 4、Suspen…