- 已知相机在不同的位置拍摄了一组目标场景的照片。(如果你是手机拍摄的一段视频可以用colormap转)
- 从相机中心开始,沿着某个像素方向发射一条光线。(注意:跟真实的相机成像模型光线方向是相反的,但不影响)。
- 建立一个神经网络FΘ,输入(x,y,z,θ,φ)是空间位置和观察方向,输出RGBσ颜色和密度。就能算出场景中每个位置的颜色和密度。
- 把这条光线上所有位置上的颜色和密度合成,就能算出图上的像素RGB值。
- 根据输入的一组图像上的像素RGB值,生成无数条光线,不断去优化可微函数FΘ。当优化次数足够,就可以直接使用FΘ算出所有视角下图像的像素RGB值。
- 知道每个位置的颜色和密度,就用marching cube算法转换为三角网三维模型。完成三维重建。
可见,求得FΘ就实现了三维重建,后面都是合成新视角和转换。
根据上面的流程,大致看出其基本原理:
- 作者首先把重建过程FΘ用深度学习替代。FΘ(x,y,z,θ,φ)=RGBσ从(空间位置,观察方向)到(颜色,密度)的过程。
- 作者对光线成像的光学模型做了一些假设,建立一个数学模型。
- 根据光线成像与输入图像像素不同不断优化,进而优化得出FΘ。
- 算法的关键:光线成像模型。
- 在计算机图形学里面,有一种三维渲染叫:体渲染。这个渲染过程可以用来三维重建。
- nerf整个过程就是:实现基于神经网络的体渲染方法的三维重建。
- 什么是体渲染(体素渲染/光线投射/光线步进):博客+视频连接:https://zhuanlan.zhihu.com/p/491364937