-
Notifications
You must be signed in to change notification settings - Fork 25
Confusion with alignment matrix #31
Comments
Hi Tiago, The variable names are a bit ambiguous here, and I see how this can be confusing. The function trajectory_alignment() aligns the "source" camera trajectory with our known "target" trajectory and in addition puts it in real-world coordinates (LiDAR coordinates). This target trajectory (gt_traj_col = e.g. Ignatius_COLMAP_SfM.log) still lives in an arbitrary COLMAP outputted reference frame, therefore we transform it to the LiDAR reference frame using "gt_trans" and do the ICP between the camera positions to get the final trajectory alignment afterwards (its a precursor for the final refinement with the dense point cloud later). The GT in the name gt_traj_col here just means that it is the camera trajectory we want to get our traj_to_register aligned to, so its basically the camera trajectory, where we know how it aligns to the GT reconstruction.
let me know if there are still questions, |
Hi Arno, Thank you for the detailed reply! Does this mean that – besides
And so, |
Exactly: |
Awesome, thank you for the replies! |
Hi, while I was going through the code in
python_toolbox/evaluation/
to better understand how the evaluation metrics are computed I got a little confused by the way alignment / transformation matrices are applied.From what I understand, the adopted convention is that the matrices align the reconstructed pose to the ground-truth (as mentioned in #12 (comment) and on section 3-1. of the tutorial), i.e., using Open3D's parameter names: "source = reconstructed / estimate" and "target = ground-truth".
Hence, in
run_evaluation()
the transformation matrixgt_trans
should align the reconstruction to the ground-truth (right?).However, in
trajectory_alignment()
the transformation is applied to the ground-truth trajectory:https://github.com/intel-isl/TanksAndTemples/blob/90cd206d6991acec775cf8a2788517d7ecc30c2f/python_toolbox/evaluation/registration.py#L65-L69
Does it make sense to apply a "reference to ground-truth" transform to data in the ground-truth coordinate frame? Shouldn't this use the inverse transform, effectively taking "ground-truth to reference" (i.e.
traj_pcd_col.transform(np.linalg.inv(gt_trans))
)? Or instead, apply the transformation to the reference data (traj_to_register_pcd
in this case)?Thank you.
The text was updated successfully, but these errors were encountered: