Blender 格式与 Nerfstudio poster 格式的区别

发布于:2025-08-13 ⋅ 阅读:(16) ⋅ 点赞:(0)

一个典型的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 字段 有(旋转步长) 没有
外参矩阵


网站公告

今日签到

点亮在社区的每一天
去签到