Closed Fanqyu closed 1 year ago
这里是cam_xyz是相机坐标系下,需要转换到世界坐标系下
我明白了,之前忽视了permute把rot转置即求逆了,那我理解的pose中存储的是相机在base坐标下的姿态和相机镜头(i.e. 光线发射点)在cam坐标系中的位置,这样理解对吗?
嗯嗯,是的,我这里用的是opencv习惯下的坐标系,旋转平移都是表示从世界坐标系转换到相机坐标系的。x_cam = R @ x_wrd + t
好的,谢谢学长
好的,我不是学姐哈,我是男生
hello同学你好,我想请问一下,NeRF Synthetic数据集在获取外参矩阵的时候,为什么还要乘上一个diag[1, -1, -1]呢? 在database.py下的类class NeRFSyntheticDatabase(BaseDatabase)的parse_info函数,读取pose文件: ` for frame in img_info['frames']: img_ids.append('-'.join(frame['file_path'].split('/')[1:]))
pose=np.asarray(frame['transform_matrix'], np.float32)
R = pose[:3,:3].T
t = -R @ pose[:3,3:]
R = np.diag(np.asarray([1,-1,-1])) @ R
t = np.diag(np.asarray([1,-1,-1])) @ t
poses.append(np.concatenate([R,t],1))`
正常来说,c2w到w2c就R = $R^T$, T = -RT就行,为什么要多乘一个呢?
学长你好,在这个函数中,我个人理解pose中是存放的相机在世界坐标系下的位置与姿态,那么第一个cam_xyz应该就是相机坐标系下的坐标了吧,为什么还要经历一次从世界坐标系到相机坐标系的转换呢(cam_xyz = rot @ cam_xyz + trans),或者说是我的理解有问题,想请学姐帮我讲解一下