3DGS中的相机模型
主要参考scene.camera.py部分代码,使用的是标准的针孔相机模型(pinhole camera model),将3DGS投射到2D图像,主要涉及到两个步骤:
- 视图变换(view transformation):世界坐标系转换到相机坐标系->视图矩阵
- 投影变换(projection transformation):相机坐标系投影到二维裁剪空间,映射到屏幕
Camera的核心参数
相机内参
FoVx, FoVy:水平和垂直视场角(Field of View),角度越大所看到的范围越广;
resolution:图像分辨率,图像的长与宽的像素数量;
znear, zfar:近裁剪平面和远裁剪平面,相机只渲染这两个平面之间的物体。
视场角和这两个平面共同定义了视锥体。
相机外参
R:旋转矩阵,对应相机的朝向,即相机的三个轴对于世界坐标系的旋转关系
T:平移向量,定义了相机在世界坐标系的位置
变换矩阵的计算
self.world_view_transform = torch.tensor(getWorld2View2(R, T, trans, scale)).transpose(0, 1).cuda()
获得视图矩阵,由R\T\tans\scale确定。
self.projection_matrix = getProjectionMatrix(znear=self.znear, zfar=self.zfar, fovX=self.FoVx, fovY=self.FoVy).transpose(0,1).cuda()
投影变换矩阵,由相机的内参确定。
视图矩阵与投影矩阵的乘积,获得MVP矩阵,从而实现一步变换。
获得相机中心坐标
已知在相机坐标系中相机坐标在(0, 0, 0, 1),由视图矩阵的逆矩阵将相机坐标变换到世界坐标。
3DGS相机模型解析
1315

被折叠的 条评论
为什么被折叠?



