isl-org / Open3D

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

Registration ransac based on feature matching #3222

Closed robertoruizmu closed 3 years ago

robertoruizmu commented 3 years ago

Hi everyone I´m trying this global registration method http://www.open3d.org/docs/0.7.0/tutorial/Advanced/global_registration.html#global-registration

But function execute_global_registration , which execute ransac registration does not work due to it returns identity matrix as transformation for registration. I do not know why , I also read that CorrespondenceCheckerBasedOnDistance and CorrespondenceCheckerBasedOnEdgeLength need that source and target have the same number of points . My source and target have different number of points. Could be that the problem? , IF it is , is there anyway to have the same number of points in both source and target???

satej1210 commented 3 years ago

Try setting your distance threshold (on line 55 of the link you have) to a high number, and see if that gets you another matrix (other than the identity matrix). Once you figure that out, tweak the voxel grid size so that your point clouds are able to match and produce a low RMSE and a fitness close to 1.0.

You can also try using voxel downsampling to make sure that your source and target point cloud have similar number of points and are spaced uniformly.

theNded commented 3 years ago

I also read that CorrespondenceCheckerBasedOnDistance and CorrespondenceCheckerBasedOnEdgeLength need that source and target have the same number of points . My source and target have different number of points. Could be that the problem? , IF it is , is there anyway to have the same number of points in both source and target???

This is not true. Correspondence checkers are model checkers that operate on sampled correspondences done internally.

Many reasons can cause a failure, including point cloud density, overlap ratio, and structures in the point cloud.

robertoruizmu commented 3 years ago

Try setting your distance threshold (on line 55 of the link you have) to a high number, and see if that gets you another matrix (other than the identity matrix). Once you figure that out, tweak the voxel grid size so that your point clouds are able to match and produce a low RMSE and a fitness close to 1.0.

You can also try using voxel downsampling to make sure that your source and target point cloud have similar number of points and are spaced uniformly.

I used higher numbers in dostance threshold so I get different matrix than the identity but the result is more disaligned rather than aligned .

I also did down sampling so originally source had 941334 points and target 2424135 points , and after thaht they have 122647 and 122134 respectively . I am lost , i dont know how can I continue

theNded commented 3 years ago

It would be more helpful to show your data, either in files or in figures, to analyze what is going on. RANSAC is not guaranteed to converge to the global optimal. In fact, at current, there is no global registration algorithm that works for all data. We have to judge case by case.

robertoruizmu commented 3 years ago

It would be more helpful to show your data, either in files or in figures, to analyze what is going on. RANSAC is not guaranteed to converge to the global optimal. In fact, at current, there is no global registration algorithm that works for all data. We have to judge case by case.

Ok , I can share files and the code I´m using with you . I´m using mandible file as source , initially source and target are mesh (.stl) , I aligned them by using center of meshes and then get point cloud using a function (all of these is in the code in python I´m sharing)

If ransac do not work for my files, what other methods I can use in order to do ICP registration?

https://drive.google.com/drive/folders/17pu-q8LIV_7Er5MSGDtfJR2ECmy_xkVL?usp=sharing

Thanks a lot .

theNded commented 3 years ago

I tried with different configurations and none works out. The topology of this shape is very complex, such that the FPFH features are not reliable for correspondence and RANSAC.

If manual registration is acceptable, I would recommend using manual registration for this specific task: http://www.open3d.org/docs/release/tutorial/visualization/interactive_visualization.html?highlight=manual#manual-registration

If you are more comfortable with software interfaces, CloudCompare provides similar functionalities: https://www.danielgm.net/cc/

robertoruizmu commented 3 years ago

I tried with different configurations and none works out. The topology of this shape is very complex, such that the FPFH features are not reliable for correspondence and RANSAC.

If manual registration is acceptable, I would recommend using manual registration for this specific task: http://www.open3d.org/docs/release/tutorial/visualization/interactive_visualization.html?highlight=manual#manual-registration

If you are more comfortable with software interfaces, CloudCompare provides similar functionalities: https://www.danielgm.net/cc/

thanks a lor for your time .

robertoruizmu commented 3 years ago

Hi again @theNded do you know what threshold means in ICP , I mean , the range of values that should take , because I tried different values ( high, and low) but I do not know what they mean and I cant get reasonable result with ICP .

theNded commented 3 years ago

Distance threshold is in meters. It accepts point correspondences below the threshold and solves for their relative poses. As I have mentioned above, the provided topology could be very challenging for automatic registration, and interactive manual initialization is recommended.