DRosemei / RoMe

213 stars 25 forks source link

about __opencv_camera2pytorch3d in dataset/base.py #21

Closed lcc815 closed 10 months ago

lcc815 commented 10 months ago

Hi, dear author,

As #15 already asked, why does the rotation matrix need to be tranposed ? Even though you have given the link, I still don't get it. what does the comment of We also transpose R (opencv multiplies points from the opposite=left side). mean?

thanks.

DRosemei commented 10 months ago

Hi, as it says "opencv multiplies points from the opposite=left side", so R denotes "world2camera" transform and R need to be transposed to "camera2world". You can see here in our repo.

lcc815 commented 10 months ago

谢谢回复。我用中文请教可以吗?感觉中文表达得更清楚一点。 我问了一下chatgpt,它是这样说的 image 请问是它说这样吗? 另外我没明白这个地方为什么会涉及到opencv——pytorch3d中的PerspectiveCameras需要传入的R应该是world2camera吧,所以这个地方是不是只需要把数据集(nuScenes or kitti)中定义的camera坐标系和pytorch3d中定义的camera坐标系统一就可以了呢?为什么会和opencv有关系呢? 谢谢~

DRosemei commented 10 months ago
  1. 原始链接中,是从opencv坐标系转,opencv是左乘,所以P_camera = P_world @ W2C,它的输入时W2C变换,所以在传入pytorch_3D前需要先转置,变成C2W,也就是R_pytorch3d = R.clone().permute(0, 2, 1)。同时opencv坐标系x,y是和screen坐标系相反,所以需要反转一下,也就是R_pytorch3d[:, :, :2] = -1, T_pytorch3d[:, :2] = -1。
  2. 本文直接传的W2C进来,所以直接做变换就好了 image
  3. 所以PerspectiveCameras传入的是C2W+xy轴转换,本文是套了官方的函数做了转换,你也可以提前转换好
lcc815 commented 10 months ago

懂了,感谢!!