liuyuan-pal / NeuRay

[CVPR2022] Neural Rays for Occlusion-aware Image-based Rendering
GNU General Public License v3.0
409 stars 32 forks source link

finished #30

Closed Fanqyu closed 1 year ago

Fanqyu commented 1 year ago

学长你好,在这个函数中,我个人理解pose中是存放的相机在世界坐标系下的位置与姿态,那么第一个cam_xyz应该就是相机坐标系下的坐标了吧,为什么还要经历一次从世界坐标系到相机坐标系的转换呢(cam_xyz = rot @ cam_xyz + trans),或者说是我的理解有问题,想请学姐帮我讲解一下

liuyuan-pal commented 1 year ago

这里是cam_xyz是相机坐标系下,需要转换到世界坐标系下

Fanqyu commented 1 year ago

我明白了,之前忽视了permute把rot转置即求逆了,那我理解的pose中存储的是相机在base坐标下的姿态和相机镜头(i.e. 光线发射点)在cam坐标系中的位置,这样理解对吗?

liuyuan-pal commented 1 year ago

嗯嗯,是的,我这里用的是opencv习惯下的坐标系,旋转平移都是表示从世界坐标系转换到相机坐标系的。x_cam = R @ x_wrd + t

Fanqyu commented 1 year ago

好的,谢谢学长

liuyuan-pal commented 1 year ago

好的,我不是学姐哈,我是男生

SYSUykLin commented 1 year ago

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就行,为什么要多乘一个呢?