基本概念
一个NeRF神经网络只能存储一个三维物体或者三维场景的信息
在沿光线射线的路径上都有对应的RGBA值
加位置编码,通过concat方式
全连接层得到最终结果
位置编码为什么是20*3?
相当于做了特征增强
T(t)不透光率,关注近边界,不关注远边界
密度高的地方多采样一些点,密度低的地方少采样一些点
instant-ngp
代码
源数据
手机拍摄的多角度图像集
数据处理
多角度图像集 -> colmap特征提取,特征匹配,sfm -> sparse文件夹,转换为.npy格式的文件供读取
数据准备
- 每一张图片有17个参数,前面15个参数包含旋转平移矩阵、图像的H,W和焦距f
- 后两个参数用于表示场景的范围,是该相机视角下场景点离相机中心最近和最远的距离
- 坐标系转换
- colmap坐标系 -> LLFF坐标系
- LLFF坐标系 -> NeRF坐标系
- 场景缩放
- recenter,把平均相机位姿作为世界坐标系原点
- 场景缩放为小视场
- 得到一个圆,在圆上的位置作为新的视角
模型训练
数据集比较难理解,模型比较简单
输入的是光线上的采样点
像素坐标 -> 图像坐标 -> 相机坐标 -> 世界坐标
体渲染:光线的每个点都有一个权重,积分得到这个点的RGB应该是什么样子
粗网络 -> 精细网络
均匀采样会出问题,物体只在某一个位置才多一些采样点,精细网络采样的方式不一样