【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeuS(DTU格式)数据集

news2025/1/17 1:33:46

【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeuS(DTU格式)数据集

提示:最近开始在【三维重建】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。


文章目录

  • 【三维重建】【深度学习】【数据集】基于COLMAP制作自己的NeuS(DTU格式)数据集
  • 前言
  • 下载安装colmap软件
  • 下载LLFF源码
  • 采集图片,使用colmap获取相机位姿
    • 采集图像
    • 位姿计算
  • 转成LLFF数据的格式
  • 转成DTU数据的格式
  • 总结


前言

DTU格式是NeuS网络模型训练使用的数据集格式之一,本文基于COLMAP软件展示从DTU格式数据集的制作到开始模型训练的完整流程。NeuS通过输入同一场景不同视角下的二维图片和相机位姿,对场景进行三维隐式建模,使用一种新的一阶近似无偏差的公式,从而即使没有掩模监督,也能进行更精确的表面重建。


下载安装colmap软件

下载COLMAP软件【下载地址】,本文使用的是Windows下的CUDA版本:

解压后双击打开COLMAP.bat,出现如下界面:

软件安装成功。


下载LLFF源码

# 可能需要科学上网从Github上直接git下载,博主下载到neus下
git clone https://github.com/Fyusion/LLFF.git
# 激活虚拟环境
conda activate XXX
# eg: activate neus
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-image
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple imageio

采集图片,使用colmap获取相机位姿

采集图像

本文制作数据集所需要的图片是用手机拍摄视频后抽帧获取的

# 激活虚拟环境
conda activate XXX
# eg: activate neus
# 安装opencv
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

新建文件Video_to_frame.py,通过执行以下代码完成抽帧(自定义抽帧的间隔)。

import os
import cv2
def extract_images(video_path, output_folder):
    # 获取视频文件名
    video_name = os.path.splitext(os.path.basename(video_path))[0]
    # 新建文件夹
    output_path = os.path.join(output_folder, video_name)
    if not os.path.exists(output_path):
        os.makedirs(output_path)
    # 打开视频
    cap = cv2.VideoCapture(video_path)
    # 设置帧间隔
    frame_interval = int(2)
    # 逐帧提取并保存满足间隔要求的帧
    count = 0
    while cap.isOpened():
        ret, frame = cap.read()
        if ret:
            print(frame_interval)
            if count % frame_interval == 0:
                image_name = os.path.join(output_path, f"{video_name}_{count//frame_interval}.jpg")
                cv2.imwrite(image_name, frame)
            count += 1
        else:
            break
    cap.release()

if __name__ == '__main__':
    video_path = 'C:/Users/XXX/Desktop/test_video/test.mp4'  # 视频文件路径
    output_folder = 'C:/Users/XXX/Desktop/test_frame'  # 输出文件夹路径
    extract_images(video_path, output_folder)

在这里插入图片描述

位姿计算

创建⼯程: 点击File -> New project 以新建一个项目。
1.点击New,选择一个文件夹(博主与测试图片放置在同一目录),设置工程名以新建工程数据文件。

2.点击Select,选择刚才图像所在的⽂件夹,点击Save。

新建工程项目并配置完毕。

特征提取与匹配
1.图片特征提取,点击Processing -> Feature extraction,Camera model选择SIMPLE_PINHOLE,其他配置使用默认配置即可,点击Extract后,自动开始提取图片特征。

待特征提取完毕后关闭窗口。

2.图片特征匹配,点击Processing -> Feature matching,使用默认配置直接点击Run进行特征匹配。

待特征匹配完毕后关闭窗口。

在右侧Log一栏中可以查看特征提取与匹配的进度,请确保过程中没有Erro报错

稀疏重建
点击Reconstruction -> Start reconstruction进行重建,在窗口中可以看到重建过程,此过程可能会持续一段时间。

重建完毕后,得到如下图,通过右下角Images和Points可以大致判断是否重建成功。

注意:匹配的位姿和图片数目不同在后续的步骤中会导致报错,博主会在下文中详细说明解决这个问题的方法,暂时继续跟着步骤走。

保存位姿和稀疏点
点击File -> Export model 以导出模型,在保存图像的文件夹所在的目录下新建/sparse/0/文件夹,选择该文件夹将模型导入到该目录下。

在/sparse/0/目录下得到如下文件,成功保存图像位姿。


转成LLFF数据的格式

进入LLFF目录下,打开imgs2poses.py文件,新增如下内容,default=‘里面是sparse所在目录的绝对路径’,并将参数’scenedir’修改为是’- -scenedir’。

存放照片的文件夹名称必须是images,否则会出错,博主这里是test,所以需要修改成images。
在运行imgs2poses.py代码

# 注意要在imgs2poses.py所在目录执行命令
python imgs2poses.py
# 或者附带imgs2poses.py的路径
python XXXX\imgs2poses.py
# eg: python LLFF\imgs2poses.py

假如不增加default=‘’。

# 在运行imgs2poses.py代码时,即使有默认值也必须传入路径(与scenedir参数有关)
python imgs2poses.py "XXXX/XXXX/"

出现如下的问题:

这个问题是博主之前所说的匹配的位姿和图片数目不同导致的,博主在这里解决这个问题。通过在 LLFF/llff/poses/pose_utils.py 文件的32行左右添加如下代码:

    #---------输出匹配到位姿的图片名---------
    for i in np.argsort(names):
       print(names[i],end=' ')
    #---------输出匹配到位姿的图片名---------

添加代码位置如下图所示:

显示出所有匹配到位姿的图片。

进入图像保存的目录,删除没有匹配到位姿的图像,而后重新进行 “位姿计算” 这一步骤。

解决问题后,执行结果如下图所示:

生成有关图像位姿的npy文件,格式转换步骤完毕。


转成DTU数据的格式

博主提供了LLFF数据格式转DTU数据格式的代码。
将代码解压到合适的文件夹下,这里博主是解压到NeuS路径下。

执行指令将LLFF数据格式转DTU数据格式。

# XXX表示sparse所在的路径,不包含sparse。
python tools/preprocess_llff.py XXXX
#eg: python tools/preprocess_llff.py C:\Users\AYU\Desktop\test_frame


所有准备工作都已完成。


总结

尽可能简单、详细的介绍DTU格式数据集的制作流程以及解决了制作过程中可能存在的问题。

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

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

相关文章

浅析3D打印技术

目录 1.3D打印的概念 2.3D打印的发展过程 3.3D打印的应用领域 4.3D打印带来的技术变革 1.3D打印的概念 3D打印是一种制造技术,它使用逐层堆叠材料的方式来创建物体。与传统的加工方法相比,3D打印具有很多优势。 在3D打印中,一种叫做CAD&am…

深度解读智能化编码的技术架构与实践案例

向更智能、更兼容演进。 陈高星|演讲者 大家好,我是阿里云视频云的陈高星,今天和大家分享的主题是“多”维演进:智能化编码架构的研究与实践。 本次分享分为四部分:首先是视频编码与增强方向的业界趋势,其…

Apple Watch 9和Apple Watch 8功能差异对比:预期升级浅析

每年的这个时候,我们都会想知道Apple Watch Series 9和Apple Watch Series 8之间会有什么不同。随着苹果下一代智能手表预计将于9月上市,我们渴望了解该公司即将进行的升级。 Apple Watch Series 8是目前最好的智能手表,但根据Apple Watch Series 9的改进,它可能会成为我们…

为什么C语言全局变量初始化元素必须是常量,而局部变量可以不是常量

前言 &#xff08;1&#xff09;今天看到一个有意思的问题&#xff0c;在交流群中&#xff0c;一位网友问&#xff0c;全局变量为什么不能给变量。会出现initializer element is not constant报错&#xff0c;代码如下 #include <stdio.h>int a 1; int b a1; //这里会报…

Zabbix-6.4.4 邮箱告警SMS告警配置

目录 ​------------------------- # 邮箱告警 ---------------------------------- 1.安装mailx与postfix软件包 2.修改mailx配置文件 3. 创建文件夹 4. 编写mail-send.sh脚本 5. 将该脚本赋予执行权限 6. 进入web界面进行设置—> Alerts —> Media Types 7. 添…

C++11并发与多线程笔记(3)线程传参详解,detach()大坑,成员函数做线程函数

C11并发与多线程笔记&#xff08;3&#xff09;线程传参详解&#xff0c;detach 大坑&#xff0c;成员函数做线程函数 1、传递临时对象作为线程参数1.1 要避免的陷阱11.2 要避免的陷阱21.3 总结 2、临时对象作为线程参数2.1 线程id概念2.2 临时对象构造时机抓捕 3、传递类对象…

数据结构算法--3快速排序

快速排序比冒泡排序&#xff0c;选择排序&#xff0c;插入排序速度都快 快速排序思路&#xff1a; ^取一个元素P&#xff0c;(第一个元素)&#xff0c;使元素P归位。 ^列表被P分成了两部分&#xff0c;左边都比P小&#xff0c;右边都比P大。 ^递归完成排序。 过程: 把5拿出…

FreeRTOS中断优先级测试

目录 资源配置 测试方案 易出 bug 测试代码 资源配置 1、定时器3中断优先级为3 2、定时器4中断优先级为4 3、FreeRTOS中断配置 OS系统管理不高于中断优先级4的中断。 #ifdef __NVIC_PRIO_BITS /* __NVIC_PRIO_BITS 已经在stm32f1xx.h里面定义为4 */#define configPRIO_B…

poetry add scipy || Poetry安装scipy失败

这里出现了一个使用poetry安装scipy失败的报错 poetry add scipy 大致意思是说&#xff0c;找不到需要的库和目前的python在版本上的交集&#xff0c;所以安装不了。 这可能与自己在poetry环境中已经安装的库有关。 但不管怎么说&#xff0c;我的这个3.10版本会装不了都是一…

【STM32RT-Thread零基础入门】 4. 线程介绍(理论)

文章目录 前言一、线程的概念二、线程的调度三、上下文切换四、线程的重要属性1. 线程栈2. 线程的状态3. 线程优先级4. 线程时间片5. 线程的入口函数 五、RT-Thread命令查看系统线程信息总结 前言 前文中的最后一个任务发现&#xff0c;一个main()函数很难同时实现按键功能和闪…

基于浏览器的插件sider,使用chatgpt3.5生成的连接Redis的代码

一.安装 首先在浏览器安装Sider插件&#xff0c;具体安装步骤https://www.423xz.com/gaoxiao/3949.html 收费情况&#xff1a;每天有几次的免费使用chatgpt3.5的次数&#xff0c;chatgpt4需要付费了。 二.使用步骤&#xff1a; 安装后使用&#xff0c;具体步骤&#xff1a;…

20 张图,透析HTTPs五大知识点

本文详细介绍了 HTTPS 相较于 HTTP 更安全的原因&#xff0c;包括对称加密、非对称加密、完整性摘要、数字证书以及 SSL/TLS 握手等内容&#xff0c;图文并茂、理论与实战结合、建议收藏&#xff01; 1. 不安全的 HTTP 近些年来&#xff0c;越来越多的网站使用 HTTPS 协议进行…

OpenCV-Python中的图像处理-霍夫变换

OpenCV-Python中的图像处理-霍夫变换 霍夫变换霍夫直线变换霍夫圆环变换 霍夫变换 霍夫(Hough)变换在检测各种形状的技术中非常流行&#xff0c;如果要检测的形状可以用数学表达式描述&#xff0c;就可以是使用霍夫变换检测它。即使要检测的形状存在一点破坏或者扭曲也是可以使…

【产品设计】用设计讲好故事 – JOOX 2020听歌年榜总结

JOOX是腾讯面向东南亚市场战略性的音乐App&#xff0c;作为一个国家化品牌&#xff0c;它面临着一些困难&#xff0c;但同时它通过创意的方式将自己的产品价值观传递给用户。我们在设计产品中&#xff0c;做好一个设计项目&#xff0c;就好比讲一个故事&#xff0c;但这只是一种…

基于php驾校驾驶理论考试模拟系统

驾校驾驶理论考试模拟系统&#xff0c;是基于php编程语言&#xff0c;mysql数据库进行开发&#xff0c;本系统分为用户和管理员两个角色&#xff0c;其中用户可以注册登陆系统&#xff0c;查看考试规则&#xff0c;进行驾照考试&#xff0c;查看考试得分&#xff0c;考试错题&a…

docker安装国产开源数据库tidb 单机版

docker pull pingcap/tidb 创建目录&#xff0c;然后安装tidb mkdir -p /data/tidb/data 创建容器 docker run --name tidb -d -v /data/tidb/data:/tmp/tidb --privilegedtrue -p 4000:4000 -p 10080:10080 pingcap/tidb:latest TiDB 简介 | PingCAP 文档中心

将您的 Ins 形象提升到新的水平

在当今这个社交媒体盛行的时代&#xff0c;Ins已成为人们展示个性、吸引关注的重要平台。你是否曾经想过&#xff0c;如果能够在同一个 Ins账户上展示不同的形象&#xff0c;让你的粉丝感受到更多的惊喜和乐趣呢&#xff1f;多账户登录功能正是满足这一需求的利器&#xff0c;它…

【我们常说这个pycharm里有陷阱,第三方库导入失败,看这里!】

最近有小伙伴遇到了明明安装了 python 第三方库,但是在 pycharm 当中却导入不成功的问题。 前言 一直以来,也有不少初学 python 的小伙伴,一不小心就跳进了虚拟环境和系统环境的【陷阱】中。 本文就基于此问题,来说说在 pycharm 当中如何使用系统环境、虚拟环境。 pych…

机器学习理论笔记(一):初识机器学习

文章目录 1 前言&#xff1a;蓝色是天的机器学习笔记专栏1.1 专栏初衷与定位1.2 本文主要内容 2 机器学习的定义2.1 机器学习的本质2.2 机器学习的分类 3 机器学习的基本术语4 探索"没有免费的午餐"定理&#xff08;NFL&#xff09;5 结语 1 前言&#xff1a;蓝色是天…

基于php动漫周边电商购物网站系统

动漫周边电商网站系统&#xff0c;是基于php毕业设计&#xff0c;mysql数据库进行开发&#xff0c;本系统分为用户和管理员两个角色&#xff0c;其中用户可以注册登陆系统&#xff0c;用户查看商品分类&#xff0c;商品列表&#xff0c;查看动漫周边商品详情&#xff0c;加入购…