instant-ngp复现
数据集准备
数据结构如下
1 | -fox |
通过 scripts/colmap2nerf.py
处理视频或者一序列的图像,图像应避免动态模糊和虚焦。对于大型场景可能训练几分钟来增加锐度
锐度,即图像边缘对比度,在边缘部分增加白色和黑色边缘增加对比度
经过 COLMAP 稀疏重建后在 sphare/0
下生成三个 .txt
文件。
camera.txt
包含相机内参
以下为实例
1 | # Camera list with one line of data per camera: |
CAMERA_ID :对应每张图片的序号
MODEL : 相机的模型选择具体参考详见官方文档主要给出了几种建议, 无畸变时采用 simple model.
SIMPLE_PINHOLE
,PINHOLE
: 小孔相机模型,在图像未畸变时使用,在此情况下,也可以通过更复杂的相机模型改进参数SIMPLE_RADIAL
:对于在内参都不知道的情况下,每张图像有不同的相机校准。e.g internet photos??(从网络获取的图片?)OPENCV
: 已知校准参数的情况下
具体的每个模型的参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48// Simple Pinhole camera model.
// f, cx, cy
CAMERA_MODEL_DEFINITIONS(0, "SIMPLE_PINHOLE", 3)
// Pinhole camera model.
// fx, fy, cx, cy
CAMERA_MODEL_DEFINITIONS(1, "PINHOLE", 4)
// Simple camera model with one focal length and one radial distortion
// parameter.
// f, cx, cy, k
CAMERA_MODEL_DEFINITIONS(2, "SIMPLE_RADIAL", 4)
// Simple camera model with one focal length and two radial distortion
// parameters.
// f, cx, cy, k1, k2
CAMERA_MODEL_DEFINITIONS(3, "RADIAL", 5)
// OpenCV camera model.
// fx, fy, cx, cy, k1, k2, p1, p2
CAMERA_MODEL_DEFINITIONS(4, "OPENCV", 8)
// OpenCV fish-eye camera model.
// fx, fy, cx, cy, k1, k2, k3, k4
CAMERA_MODEL_DEFINITIONS(5, "OPENCV_FISHEYE", 8)
// Full OpenCV camera model.
// fx, fy, cx, cy, k1, k2, p1, p2, k3, k4, k5, k6
CAMERA_MODEL_DEFINITIONS(6, "FULL_OPENCV", 12)
// FOV camera model.
// fx, fy, cx, cy, omega
CAMERA_MODEL_DEFINITIONS(7, "FOV", 5)
// Simple camera model with one focal length and one radial distortion
// parameter, suitable for fish-eye cameras.
// f, cx, cy, k
CAMERA_MODEL_DEFINITIONS(8, "SIMPLE_RADIAL_FISHEYE", 4)
// Simple camera model with one focal length and two radial distortion
// parameters, suitable for fish-eye cameras.
// f, cx, cy, k1, k2
CAMERA_MODEL_DEFINITIONS(9, "RADIAL_FISHEYE", 5)
// Camera model with radial and tangential distortion coefficients and
// additional coefficients accounting for thin-prism distortion.
// fx, fy, cx, cy, k1, k2, p1, p2, k3, k4, sx1, sy1
CAMERA_MODEL_DEFINITIONS(10, "THIN_PRISM_FISHEYE", 12)images.txt
images.txt
示例:
1 | # Image list with two lines of data per image: |
`Q` 表示的旋转的四个参数?与 `Eigen::Quaterniond `格式相同 `T` 表示平移参数。第二行表示一个特征点在图像中的二维坐标。
points3D.txt
1 | # 3D point list with one line of data per point: |
如果需要进一步 rectify, 可以把参数输入到 OpenCV 的 stereoRectify() 函数中,之后 initUndistortRectifyMap() , 最后使用 remap() 函数进行重映射 从而得到矫正的结果。
transform.json
1 | "camera_angle_x": 1.2433395001651382, |
camera_angle_x
是 angle_y = math.atan(h / (fl_y * 2)) * 2
,即光心到边缘的最大角度。
fl_x
是相机的焦距大小,看了代码之后发现取的是最后一个图像得到的焦距,实际上在·1300-1496
之间进行浮动,据通过手机厂商的数据发现是 26.8mm
等效焦距,实际焦距 5.4mm
??
现有数据集
Nerf: 将near plane 和 far plane 的空间转化成 NDC [-1,1],渲染时光线只截用该空间中的。
ngp: 没有采用NDC, unit cube ? 似乎没什么影响, aabb_scale
的作用就是为了限制渲染范围。
实验
- 对云雾的消除。推测原因:上方缺乏光线穿过,因此需要增加相机的视角。上中下 和 上。 如果我们增加相机上方视角更多的图片呢:预测应该不会有很大改善。
- 增加桌面的特征值
- 勾选
train extrinces、
等