huangjh-pub / di-fusion

[CVPR'21] [Jittor & Pytorch] DI-Fusion: Online Implicit 3D Reconstruction with Deep Priors
122 stars 13 forks source link

About the setting of the coordinate system #9

Open LongruiDong opened 2 years ago

LongruiDong commented 2 years ago

Hi: when testing the given ICL-NUIM example, I am confused about the setting of the coordinate in class_ ICLNUIMSequence.

Specifically, therer are two code segments that confusing me:

1) at https://github.com/huangjh-pub/di-fusion/blob/merged/pytorch/dataset/production/icl_nuim.py#L45

            cur_q[1] = -cur_q[1]
            cur_q[:, 1] = -cur_q[:, 1]
            cur_t[1] = -cur_t[1]
            cur_iso = motion_util.Isometry(q=Quaternion(matrix=cur_q), t=cur_t)
            camera_ext[cur_p[0]] = cano_quat.dot(cur_iso)

2) at https://github.com/huangjh-pub/di-fusion/blob/merged/pytorch/dataset/production/icl_nuim.py#L32

            change_iso = self.first_iso.dot(self.gt_trajectory[0].inv())
            self.gt_trajectory = [change_iso.dot(t) for t in self.gt_trajectory]

I have check the local camera coordinate of ICL data, which is a regular coordinate: (z: forward, x: right, y: downward).:

the local coordiante of a image

so why do we need to adjust the axis orientation by above 1) and 2) and what is the meaning of them?

Since I am writing api to test on other benchmark data, your detailed explanation will be very helpful to me~

Thanks in advance!

LongruiDong commented 2 years ago

Hi: when testing the given ICL-NUIM example, I am confused about the setting of the coordinate in class_ ICLNUIMSequence.

Specifically, therer are two code segments that confusing me:

  1. at https://github.com/huangjh-pub/di-fusion/blob/merged/pytorch/dataset/production/icl_nuim.py#L45
            cur_q[1] = -cur_q[1]
            cur_q[:, 1] = -cur_q[:, 1]
            cur_t[1] = -cur_t[1]
            cur_iso = motion_util.Isometry(q=Quaternion(matrix=cur_q), t=cur_t)
            camera_ext[cur_p[0]] = cano_quat.dot(cur_iso)
  1. at https://github.com/huangjh-pub/di-fusion/blob/merged/pytorch/dataset/production/icl_nuim.py#L32
            change_iso = self.first_iso.dot(self.gt_trajectory[0].inv())
            self.gt_trajectory = [change_iso.dot(t) for t in self.gt_trajectory]

I have check the local camera coordinate of ICL data, which is a regular coordinate: (z: forward, x: right, y: downward).:

the local coordiante of a image

so why do we need to adjust the axis orientation by above 1) and 2) and what is the meaning of them?

Since I am writing api to test on other benchmark data, your detailed explanation will be very helpful to me~

Thanks in advance!

i have written api for other dataset, and I also set the world coordinate is the same as the given config yaml of ICL-Nuim(y: up ward)

however I met a issue when test much larger indoor scene: areas of the scene that are farther from the camera are missing.

I have decrease prune_min_vox_obs in mapping parameters but that issue still arise. I don't know if I am missing other parameters?

heiwang1997 commented 2 years ago

Hi, if I remembered correctly, the original ICL-NUIM data is in POV-ray's left-hand system. That's why I changed it to a standard SLAM coordinate system. If you don't do them, the back-projected point cloud would be falsely flipped.

For your second question, could you please try increasing the bound of the scene, i.e., the mapping.bound_min and mapping.bound_max parameter?

LongruiDong commented 2 years ago

Hi, if I remembered correctly, the original ICL-NUIM data is in POV-ray's left-hand system. That's why I changed it to a standard SLAM coordinate system. If you don't do them, the back-projected point cloud would be falsely flipped.

For your second question, could you please try increasing the bound of the scene, i.e., the mapping.bound_min and mapping.bound_max parameter?

about the bound of scene, I have back-projected the depth using gt pose, and then output the min&max to be mapping.bound_min & mapping.bound_max, I believe this bound is enough, however the voxel map in visualization window is still uncomplete...

heiwang1997 commented 2 years ago

This is weird, do you see a purple bounding box in the visualizer? That should be the scene bound you've set. Does the point cloud exist within that bound?