Until now I have been using the ICP registration between point clouds (PointToPoint and PointToPlane). I recently got access to a mesh of the data I use and I load it with
o3d.io.read_triangle_mesh() as explained here.
Now it would seem natural to use the ICP with the point to plane registration method with a point cloud as the source and the mesh as the target since it is made of planes, but it doesn’t work since
o3d.pipelines.registration.registration_icp(source, target[, ...]) only takes point clouds as input…
So my only workaround (which isn’t really one) is to load the mesh, create a
o3d.geometry.PointCloud with the vertices of the mesh, estimate the normals of the points and use it as the target point cloud in the ICP.
By doing so I lose all the information of the surfaces of my mesh while they are sort of re-estimated during the registration, which is absurd. So would it be possible to allow the use of a target mesh with the ICP registration ?