基于COLMAP制作自己的Nerf数据集(LLFF格式)

一、下载colmap

下载并安装colmap软件:https://github.com/colmap/colmap/releases
在这里插入图片描述
此处下载了COLMAP-3.8-windows-cuda.zip,解压后:
在这里插入图片描述
双击打开COLMAP.bat:
在这里插入图片描述

二、图像

首先用手机拍摄一段视频,运行下列代码,抽帧

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 = 'test.mp4'  # 视频文件路径
    output_folder = 'test_frame'  # 输出文件夹路径
    extract_images(video_path, output_folder)

运行代码之后会生成图像,需将文件名修改为imags:
在这里插入图片描述

三、位姿计算

1.打开COLMAP.bat文件,点击File -> New project 以新建一个项目,会弹出以下界面
在这里插入图片描述
2.点击New,选择存放图片的images文件夹的路径,手动输入文件名为:database.db,然后点击保存
在这里插入图片描述

3.点击Select,选择images文件夹,保存
在这里插入图片描述
4.点击Save

1.特征提取与匹配

点击Processing -> Feature extraction 进行图片特征提取
1.Camera model选择:SIMPLE_PINHOLE,其他配置不用改
2.点击Extract,开始提取图片特征
在这里插入图片描述
在特征提取完毕后,关闭该窗口

2.图片特征匹配

点击Processing -> Feature matching 进行特征匹配
在这里插入图片描述
此处不用修改配置,点击Run进行特征匹配
在这里插入图片描述
在匹配结束后,关闭该窗口

3.稀疏重建

点击Reconstruction -> Start reconstruction 进行重建
重建结束后得到下图,可以通过右下角Images和Points来判断是否重建成功
(如果重建的图片较少或者点较少都会导致后续导出模型失败)
在这里插入图片描述

4. 保存位姿和稀疏点

在images目录下(即test_frame文件夹中)新建/sparse/0/文件夹
点击File -> Export model 以导出模型,选择该文件夹0
在这里插入图片描述

四、使用LLFF脚本对位姿数据进行格式转化

1.下载LLFF

链接:git clone https://github.com/Fyusion/LLFF.git
将运行环境配置好
在这里插入图片描述

imgs2poses.py,第9行修改为改为刚才的工作目录

parser.add_argument('--scenedir', type=str,
default='D:/pycharm_project/dataset_3d/test_frame/',
help='input scene directory')

LLFF/llff/poses/pose_utils.py ,30行左右添加如下代码:

    for i in np.argsort(names):
       print(names[i],end=' ')

![在这里插入图片描述](https://img-blog.csdnimg.cn/00b779e9ce324b4098bc50049b163f78.png

2.运行imgs2poses.py

输出了所有匹配到位姿的图片,然后进入图像所在文件夹,删除没有匹配到位姿的图像,再重新进行 “位姿计算”

在这里插入图片描述
同时,工作目录下生成了poses_bounds.npy文件
在这里插入图片描述

至此,格式转换步骤完毕

五、设置配置文件

将相关文件(test_frame)上传至NerF代码的相应data文件夹中

复制/nerf-pytorch/configs目录下的fern.txt文件,并重命名(建议和工作目录(test_frame)名称一致)
并修改expname和datadir为自己的内容
在这里插入图片描述

运行 run_nerf.py,成功开始训练(需要修改参数,参照nerf复现
在这里插入图片描述


遇到的问题

运行imgs2poses.py时报错:No such file or directory: ‘test_frame/sparse/colmap_output.txt’ Need to run colmap

应该是路径有问题:

  1. 写完整路径,分隔符用 “/” ,路径中不能有中文
  2. 查看路径是否正确,文件存放位置一定要放对,参考下图
    在这里插入图片描述
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐