如何用 COLMAP 制作 Blender 格式的數據集并劃分出 transforms_train.json
、transforms_val.json
和 transforms_test.json
。
一、什么是 Blender 格式數據集?
Blender 格式數據集是 Nerf 和 Nerfstudio 常用的輸入格式,其核心是包含了相機內外參的 JSON 文件,一般命名為:
-
transforms_train.json
—— 訓練用幀信息 -
transforms_val.json
—— 驗證用幀信息(可選) -
transforms_test.json
—— 測試用幀信息(可選)
每個 JSON 文件結構類似,包含以下關鍵信息:
-
camera_angle_x
:相機水平方向視角(弧度) -
frames
:數組,每個元素代表一幀圖像信息,包含圖像路徑和相機位姿矩陣(4x4變換矩陣)
二、如何用 COLMAP 生成 Blender 格式數據集
詳細的可見:
用 COLMAP GUI 在 Windows 下一步步完成 相機位姿估計(SfM) 和 稀疏點云重建的詳細步驟:-CSDN博客
1. 運行 COLMAP 稀疏重建(SfM)
-
打開 COLMAP GUI
-
新建項目,導入圖片
-
運行 Feature Extraction 和 Feature Matching
-
運行 Sparse Reconstruction(SfM)
-
SfM 完成后,
sparse/0/
目錄下會生成cameras.txt
、images.txt
、points3D.txt
三個文件
這些文本文件中包含相機內參(焦距、畸變等)、相機外參(旋轉、平移)和三維點信息。
或者使用命令行完成以上步驟:
colmap feature_extractor --database_path database.db --image_path ./images
colmap exhaustive_matcher --database_path database.db
mkdir sparse
colmap mapper --database_path database.db --image_path ./images --output_path sparse
sparse/0
文件夾下會有 cameras.txt
(內參),images.txt
(位姿)和 points3D.txt
2. 解析 COLMAP 導出的文件,生成 Blender 格式的 JSON 文件
-
內參信息一般在
cameras.txt
中:-
焦距 (focal length)
-
主點 (cx, cy)
-
圖像尺寸(寬、高)
-
-
外參在
images.txt
中:-
每張圖的旋轉四元數 + 平移向量
-
需轉換為 4x4 的相機變換矩陣(world-to-camera 或 camera-to-world)
-
COLMAP 坐標系是右手坐標系,Nerf / Blender 格式使用的坐標系和矩陣定義和 COLMAP 有差異,需要做轉換:
-
COLMAP 的旋轉是圖像到世界坐標的變換(或者相反,需看具體定義)
-
Nerf 需要的是相機到世界(camera-to-world)4x4矩陣
-
通常需要對旋轉矩陣和位移向量做轉置和坐標軸調整(比如 z 軸正方向)
生成的 transforms_train.json
結構示例:
{"camera_angle_x": 0.6911112070083618, // 水平視場角,單位弧度"frames": [{"file_path": "./train/r_0", // 圖片相對路徑(不帶后綴)"rotation": 0.012566370614359171, <--- 額外字段,可能是額外角度信息"transform_matrix": [ // 4x4相機變換矩陣,表示從世界坐標到相機坐標的變換[-0.9250140190124512,0.2748899757862091,-0.2622683644294739,-1.0572376251220703],[-0.3799331784248352,-0.6692678928375244,