相机参数转换随笔
·
相机外参
opencv<-->opengl
参考链接:https://github.com/mmatl/pyrender/issues/228

首先需要确定当前外参是w2c还是c2w,一般数据集中提供的都是w2c矩阵,因为这个矩阵是用于将世界坐标系的网格投影到相机坐标系中。
确定好了是w2c之后,由于opencv和opengl的y轴和z轴的方向是相反的,因此只需要将对应坐标轴反过来即可。
方法一:
camera_pose[[1, 2]] *= -1
方法二:
F = torch.diag(torch.tensor([1., -1., -1.], device=R_gl.device))
R_cv = F @ R_gl # 左乘 = 翻行
t_cv = F @ t_gl # 同时翻平移
opencv-->pytorch3d
参考链接:https://github.com/facebookresearch/pytorch3d/issues/522

可以看到pytorch3d的相机坐标系和opencv,opengl都不一样,因此需要额外转换。但是pytorch3d中提供了很方便的函数,可以直接基于opencv相机参数构建透视相机。
cameras_p3d = pytorch3d.utils.cameras_from_opencv_projection(
R_tensor[None],
T_tensor[None],
K_tensor[None],
torch.tensor([[TARGET_SIZE, TARGET_SIZE]], dtype=torch.float32, device=device)
)
R_tensor = cameras_p3d.R[0]
T_tensor = cameras_p3d.T[0]
注意
相机的位移参数T需要注意一下单位对不对,是以毫米为单位还是以米为单位,有时候需要乘以或者除以1000。
更多推荐



所有评论(0)