isl-org / Open3D

Open3D: A Modern Library for 3D Data Processing
http://www.open3d.org
Other
11.24k stars 2.28k forks source link

Run ICP Point_to_Point and Point_to Plane for my own pointclouds and KITTI dataset #6862

Open hamz1a2 opened 2 months ago

hamz1a2 commented 2 months ago

Checklist

My Question

Hello, This is my first time using and implementing ICP in open3d (0.18.0) to register two pointclouds in python. The ICP is not aligning the source and target. My own pointclouds; icp_blender_pcd KITTI pointclouds (0000000010 and 0000000011) icp_kitti

So, I changed the initial transformation matrix to identity matrix and I try for my own pcd (generated from blender). The ICP is aligning them perfectly when the distance between source and target is less: icp_blender_pcd_small_distance

Source and target having large distance icp_blender_pcd_large_distance

Similarly, for the KITTI data set, the ICP for small distance between source and target is aligned: kitt_identiy_matrix_less_ditance

But having large distance in source and target the ICP is not working: kitt_identiy_matrix_large_ditance

My question is why ICP is not working ? the initial transformation matrix in ICP is: trans_init = np.asarray([[0.862, 0.011, -0.507, 0.5], [-0.139, 0.967, -0.215, 0.7], [0.487, 0.255, 0.835, -1.4], [0.0, 0.0, 0.0, 1.0]]) I also try to checked different threshold values from 0.02 to 10 but it is also not working.

terminal_1

If someone has any clue for this issue, I shall be thankful.

rxba commented 2 months ago

Hey @hamz1a2 , ICP is a local registration method used for refinement. This is likely why you are noticing it being insufficient to register point clouds with larger distances to each other.

Have a look at the global registration methods that Open3D offers. These can be applied in a preliminary step to then allow for the refinement of the transformation with ICP.