一个典型的blender格式的json文件内容如下:
{
"camera_angle_x": 0.6911112070083618,
"frames": [
{
"file_path": "./train/r_0",
"rotation": 0.012566370614359171,
"transform_matrix": [
[
-0.9250140190124512,
0.2748899757862091,
-0.2622683644294739,
-1.0572376251220703
],
[
-0.3799331784248352,
-0.6692678928375244,
0.6385383605957031,
2.5740303993225098
],
[
0.0,
0.6903012990951538,
0.7235219478607178,
2.9166102409362793
],
[
0.0,
0.0,
0.0,
1.0
]
]
},
{
"file_path": "./train/r_1",
"rotation": 0.012566370614359171,
"transform_matrix": [
[
0.6858149766921997,
-0.7249027490615845,
0.06460536271333694,
0.26043257117271423
],
[
0.7277759909629822,
0.6831074357032776,
-0.060880452394485474,
-0.24541696906089783
],
[
3.725290298461914e-09,
0.08877081423997879,
0.9960520267486572,
4.015214443206787
],
[
0.0,
0.0,
0.0,
1.0
]
]
},
{
"file_path": "./train/r_2",
"rotation": 0.012566370614359171,
"transform_matrix": [
与Nerfstudio poster 数据集 JSON 有点不同:Blender 格式通常没有直接存储相机内参(焦距、畸变系数等),而是用 camera_angle_x
记录视角,然后由宽度计算焦距。
1. 全局参数
"camera_angle_x": 0.6911112070083618,
camera_angle_x
水平方向的视场角(Horizontal Field of View, HFOV),单位:弧度。
对应 OpenGL/Blender 渲染时的相机参数。
由此可推算相机的焦距:
f_x = \frac{0.5 \times w}{\tan(\frac{\text{camera_angle_x}}{2})}在 Nerfstudio 中,加载 Blender 数据集时会用这个值结合图像宽度计算出
fl_x
。
2. frames 列表
frames
数组中每个对象表示一帧图像(通常是一张渲染图或真实照片)及对应的相机位姿。
2.1 file_path
"file_path": "./train/r_0",
当前帧图像文件路径(不带扩展名,通常是
.png
或.jpg
,加载时会自动加上后缀)。路径是相对于 transforms.json 文件的。
2.2 rotation
"rotation": 0.012566370614359171,
单位:弧度。
表示相邻帧之间的旋转角度步长(Blender 渲染时常用来设置相机轨迹的旋转间隔)。
这里 0.01256637 ≈ 2π / 500,说明总共采样了 500 张图像时的每步旋转角度。
在 Nerfstudio 里,这个字段通常不直接参与训练,但有助于生成相机路径。
2.3 transform_matrix
"transform_matrix": [
[ -0.9250, 0.2749, -0.2623, -1.0572 ],
[ -0.3799, -0.6693, 0.6385, 2.5740 ],
[ 0.0, 0.6903, 0.7235, 2.9166 ],
[ 0.0, 0.0, 0.0, 1.0 ]
]
4×4 齐次变换矩阵,描述该帧相机从 相机坐标系 → 世界坐标系 的变换。
前 3×3:旋转矩阵
R
(相机朝向)。第 4 列前三个值:平移向量
t
(相机位置,单位:Blender 世界坐标单位,通常对应米)。最后一行
[0, 0, 0, 1]
:齐次坐标补位。
在训练时,Nerfstudio 会反过来用它计算世界点投影到相机坐标系的坐标。
例子解释:
第一行
[-0.9250, 0.2749, -0.2623, -1.0572]
表示相机的 x 轴方向 和世界坐标的关系,以及相机在世界中的 X 坐标(-1.0572
)。第二行对应 y 轴方向,第三行对应 z 轴方向。
Blender 格式与 Nerfstudio poster 格式的区别
项目 | Blender 格式 | Nerfstudio poster 格式 |
---|---|---|
内参记录方式 | camera_angle_x 推算 |
直接存储 fl_x , fl_y , cx , cy , k1 , p1 等 |
畸变系数 | 没有 | 有(k1, k2, p1, p2) |
图像路径 | 无扩展名 | 有扩展名 |
rotation 字段 | 有(旋转步长) | 没有 |
外参矩阵 | 有 | 有 |