关于colmap+nerf对数据集进行预处理的使用总结

2023-11-03

前言

零零碎碎的东西太多,有必要统一记录一下,因为是回忆步骤,所以可能有不准确的地方

Colmap的使用

1. 下载

下载链接:colmap,下载之后直接解压就能使用,点击COLMAP.bat
在这里插入图片描述

2. colmap

这里到处都是很详细的操作步骤,可以自行搜索,顺序是:
File→New project:选择一个路径存放数据库,生成database.db
Processing→Feature extraction:提取图像特征。提取特征后,可以选择要不要修改相机内参,如果你的相机内参已知,可以使用如下链接修改相机内参,此处记录方法名为blender_camera2colmap.py,修改之后选择Processing→Database management→camera看到内参修改成功。
在这里插入图片描述

Processing→Feature matching:匹配图像特征
Reconstraction→Start reconstruction(这里不要选Auto):稀疏重建
重建后 File→Export model得到文件,参考链接,此处我与他的命名方式保持一致,获得的目录如下:

+── E:\test\scene78-3+── images			#用于重建的图像
│   +── sparse
	|	+── 0
		|	+── cameras.bin
		|	+── images.bin
		|	+── points3Ds.bin
		|	+── project.ini
│   +── dataset.db

此处用于nerf预处理的colmap已经结束,但是如果想用于稠密重建或者其他问题的还需额外的步骤,以下放出我的一些应用:

应用1 稠密重建

经历完上述步骤后:
Reconstraction→Dense reconstruction

  1. 选择路径
  2. 去畸变
    在这里插入图片描述
  3. 立体匹配
  4. 融合,融合后可以获得fused.ply,应该是点云可视化文件
  5. Poisson后获得mesh文件meshed-poisson.ply
  6. 最后一个Delaunay应该是几何模型?反正不太好看meshed-delaunay.ply

在这里插入图片描述
在这里插入图片描述

从左到右依次是fusion, poission, delaunay
在这里插入图片描述在这里插入图片描述在这里插入图片描述
此处再列一下最终获得的目录,可能不完全准确,但大概是这样

+── images # 对应重建图片数据集
│   +── image1.jpg
│   +── image2.jpg
│   +── ...
+── sparse # 稀疏重建结果
│   +── 0
│   │   +── cameras.bin
│   │   +── images.bin
│   │   +── points3D.bin
│   │   +── 对应的.txt  #如果保存了的话
│   +── ...
+── dense # 稠密重建结果
│   +── 0
│   │   +── images # 去畸变图像
│   │   +── sparse
│   │   +── stereo
│   │   +── fused.ply # 稠密点云
│   │   +── meshed-poisson.ply
│   │   +── meshed-delaunay.ply
│   +── ...
+── database.db # 图像提取的特征相关信息
+── project.ini # 项目信息文件

应用2:获得外参文件和深度图

外参文件: File→txt,这时就可以获取一些参数文件,这一步在稠密重建前就可以用
使用的时候要注意两点:这里的外参是w2c,坐标轴的转换

cameras.txt 内参
images.txt 外参(轨迹数据)
Points3D.txt

每幅图像对应的外参有两行,但是我只需要用到第一行的七元组,所以使用如下代码提取外参,文件名storetxt2othertxt.py

# 从一个.txt文件读取并保存到另一个.txt文件中
import os
import numpy as np

path1 = 'E:/test/dense_pc/images.txt'
path2 = 'E:/test/dense_pc/output_file.txt'

# 读取相机外参文件
with open(path1, 'r') as f_in, open(path2, 'w') as f_out:
    for num,line in enumerate(f_in):
        if num<4:
            f_out.write(line)
        else:
            if num%2!=0:
                continue
            else:
                f_out.write(line)

深度图: 在稠密重建后(stereo)获得深度图,这时在stereo文件夹下有两种深度图(我也不知道哪种好),任选一种放在目标文件夹F:/code1/nice-slam-master/Datasets/dist3.6-2/depth_colmap下的代码。

import shutil
import os
import re
from ntpath import join


def sorted_alphanum(file_list_ordered):
    convert = lambda text: int(text) if text.isdigit() else text
    alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)]
    return sorted(file_list_ordered, key=alphanum_key)

def get_file_list(path, extension=None,a=None):
    if extension is None:
        file_list = [path + f for f in os.listdir(path) if os.path.isfile(join(path, f))]
    else:
        file_list = [
            path + f
            for f in os.listdir(path)
            if os.path.isfile(os.path.join(path, f)) and os.path.splitext(f)[1] == extension and a in os.path.splitext(f)[0]
        ]

    file_list = sorted_alphanum(file_list)
    return file_list


depth_image_path = get_file_list(os.path.join('E:/test/dense_pc_78/stereo/depth_maps/'),
                                     extension=".bin",a='geometric')  # geometric  photometric

print(depth_image_path)

for i in range(len(depth_image_path)):
    c = '%s'%(depth_image_path[i][38:])

    shutil.copyfile(depth_image_path[i],
                    'F:/code1/nice-slam-master/Datasets/dist3.6-2/depth_colmap/%s'%c)

应用3:验证colmap的外参到底是什么,有多准确

很庆幸无意间发现colmap生成的外参是w2c,此处本来也想用来验证自己的深度图有多大误差,使用show_cube_with_extrinsic.py文件选择几张位姿差距较大的图像,重建场景,用到open3d包

使用LLFF处理为NeRF能用的格式

依旧参考链接 下载LLFF代码并配置环境,这里不要听他的使用python3.8,因为没有tensorflow1.*版本,我使用的python3.6。接着把你刚刚生成的文件copy到llff文件夹下(图方便),激活环境后就运行如下命令,其中cube就是scene78-3,下面包含了images和sparse等。

python imgs2poses.py cube

获得如下结果:
在这里插入图片描述
于是就能在该路径下看到:poses_bounds.npy文件,把它移动到nerf目录下并修改nerf配置文件,还是参考那个链接。

在这里插入图片描述
最后放一个colmap文档网址

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于colmap+nerf对数据集进行预处理的使用总结 的相关文章

随机推荐

  • FatFs目录访问接口中文版

    我是阿荣 关注我 在技术路上一起精进 目录访问 f opendir 打开目录 函数原型 FRESULT f opendir DIR dp OUT Pointer to the directory object structure const
  • Vue-Axios的封装---登录注册---axios(二)

    Vue cli Axios的封装 简单的的登录与注册 第一种 逻辑数据未分离 注册 登录 用户页面获取用户数据信息以及注销 第二种 逻辑数据分离 token 封装Axios 为什么封装axios 实现 调用封装完毕的Axios 并在添加所需
  • vuforia sdk及案例 (第二章)

    有过上一章了现在去看下载部分 我事先下载好了 用的Android Q版本 开发软件版本是3 5 3的 然后我看了一去升级到了3 6 1 我是最新版本来做的 这是我下载的 导入工程案例 VuforiaSamples 8 6 10 出现问题一
  • IntelliJ IDEA开发工具的安装,scala插件安装

    IntelliJ IDEA开发工具安装 scala插件安装 1 IntelliJ IDEA开发工具下载 下载官方网址 https www jetbrains com idea download other html 我下的2021 3 2
  • Pytorch Advanced(一) Generative Adversarial Networks

    生成对抗神经网络GAN 发挥神经网络的想象力 可以说是十分厉害了 参考 1 AI作家 2 将模糊图变清晰 去雨 去雾 去抖动 去马赛克等 这需要AI具有 想象力 能脑补情节 3 进行数据增强 根据已有数据生成更多新数据供以feed 可以减缓
  • modulename: loading out-of-tree module taints kernel

    问题描述 使用insmod命令加载编写的驱动模块时 出现提示信息 loading out of tree module taints kernel 不过 模块还是能够被加载 并且卸载后再次加载时 该提示信息没有再次出现 然而整个系统重启后再
  • Linux编码修改

    1 查看当前系统默认采用的字符集 locale 2 查看系统当前编码 echo LANG 如果输出为 en US UTF 8 英文 zh CN UTF 8 中文 3 查看系统是否安装中文字符集 locale a grep zh 如果出现了
  • JS的深拷贝函数

    自定义深拷贝函数 引入的赋值 指向同一个对象 相互之间会影响 对象的浅拷贝 只是浅层的拷贝 内部引入对象时 依然会相互影响 对象的深拷贝 两个对象不再有任何关系 不会相互影响 function isObject value const va
  • flask 开发Restful API :post get

    命令行安装flask pip install flask 新建脚本api py from flask import Flask from flask import request import json app Flask name app
  • 使你的IT职业生涯更上一层楼de14条建议

    摘要 升值为企业IT部门的领导者 是大部分IT技术人员职业生涯的最终追求 但从一般大众中脱颖而出 并非易事 仅仅把本职工作干好远远不够 还需要IT技术人员展示出投身于技术发展的奉献精神及伴随技术发展而发展的能力 升值为企业IT部门的领导者
  • OpenGL坐标变换及其数学原理,两种摄像机交互模型(附源程序)

    OpenGL坐标变换及其数学原理 两种摄像机交互模型 附源程序 实验平台 win7 VS2010 先上结果截图 文章最后下载程序 解压后直接运行BIN文件夹下的EXE程序 a 鼠标拖拽旋转物体 类似于OGRE中的 OgreBites Cam
  • 频繁跳槽是职场走下坡路的开始,Java程序员注意:跳槽前,你该考虑5个问题

    本文转载自 频繁跳槽是职场走下坡路的开始 Java程序员注意 跳槽前 你该考虑5个问题 职场上 跳槽是所有职场人都会遇到的问题 关于职场跳槽的理由 笔者做了以下盘点 和直接领导的矛盾导致离职 逃避问题而离职 工作压力大 挣钱少而离职 总之
  • Harbor安装及简单使用

    在虚拟机初始化的基础上 安装Docker wget O etc yum repos d CentOS Base repo http mirrors aliyun com repo Centos 7 repo wget https mirro
  • 2020-06-11

    你需要继续学习 这样一来如果有机会的话 你应该可以往前进一步
  • 【C语言】让你不再害怕指针——C指针详解(经典,非常详细)

    https blog csdn net qq 41035588 article details 79673674
  • java 读取excel数据

    本文共介绍两种方式 第一种是常规POI读取 第二种是大文件读取 依赖包
  • OpenCV3.3 + Python3.6 开发环境配置

    2018 9 6 更新 Anaconda3 5 2 0版本 Python 3 6 下OpenCV 3 安装 今天重新安装了 Python 的环境 发现在新版本 Anaconda3 下安装配置 OpenCV 3 十分简单 在 Anaconda
  • 【ubuntu虚拟机命令】+ 【mysql数据库】

    ubuntu虚拟机命令 cd 进入家目录 ll 查看文件列表 rm rf 目录名 删除目录 sudo su 从用户切换到 root su ubuntu 从 root 切换到 用户 vi bim 打开文件 i 编辑文件 退出 esc 保存退出
  • 40-400-020-运维-优化-使用MySQLTunner优化MySQL

    文章目录 1 概述 2 安装MySQL 3 下载 4 报告分析 1 概述 MySQLTuner 是一个 Perl 脚本 可以用来分析您的 MySQL 性能 并且基于收集到的信息给出相应的优化建议 这样子 您就可以调整 my cnf 从而优化
  • 关于colmap+nerf对数据集进行预处理的使用总结

    前言 零零碎碎的东西太多 有必要统一记录一下 因为是回忆步骤 所以可能有不准确的地方 Colmap的使用 1 下载 下载链接 colmap 下载之后直接解压就能使用 点击COLMAP bat 2 colmap 这里到处都是很详细的操作步骤