hanzheteng / color_icp

Implementation of ICCV 2017: Colored Point Cloud Registration Revisited
59 stars 9 forks source link

Comparison with open3d official code #1

Closed wangzixiang99 closed 1 year ago

wangzixiang99 commented 1 year ago

Hello, thank you very much for your guidance.

I used the color_icp algorithm of your recurrence, but the effect of using your algorithm on my dataset is worse than that in official open3d. I don't know why this problem occurs.

This is the download link of my own dataset. If you can, you can download and try it. I can get good results in the official open3d code, but I can't get the same results in your code. If you can get the same results as the open3d official after trying, please tell me how to implement it. Thank you very much.

my own dataset: https://github.com/wangzixiang99/file/tree/main

I'm sorry to have taken up your time. I look forward to your reply.

hanzheteng commented 1 year ago

I assume that you are testing the official open3d code using the colored_icp.py script provided in this repository.

I have tested your data, and the reason why this python script can produce a better result is that it is following a 3-step coarse-to-fine registration pipeline. In other words, this script register the two point clouds from a larger resolution to a smaller resolution for 3 times.

As for the color_icp algorithm, the implementation in this repository and the implementation in open3d library are exactly the same. The latter is called in this line by the python script.

This is to say that if you follow the same coarse-to-fine scheme to run the C++ code in this repository 3 times using the same voxel size (and other parameters etc. as in the python script), you will have the same result. (Unfortunately this was not provided by this repository, but you can modify the code as you like.) Alternatively, you can remove the coarse-to-fine scheme in the python script and let it run only once with a fixed voxel size, you will have the same result as in the C++ code.

wangzixiang99 commented 1 year ago

I assume that you are testing the official open3d code using the colored_icp.py script provided in this repository.

I have tested your data, and the reason why this python script can produce a better result is that it is following a 3-step coarse-to-fine registration pipeline. In other words, this script register the two point clouds from a larger resolution to a smaller resolution for 3 times.

As for the color_icp algorithm, the implementation in this repository and the implementation in open3d library are exactly the same. The latter is called in this line by the python script.

This is to say that if you follow the same coarse-to-fine scheme to run the C++ code in this repository 3 times using the same voxel size (and other parameters etc. as in the python script), you will have the same result. (Unfortunately this was not provided by this repository, but you can modify the code as you like.) Alternatively, you can remove the coarse-to-fine scheme in the python script and let it run only once with a fixed voxel size, you will have the same result as in the C++ code.

Thank you for your guidance. I have verified your idea. You are right. 1、Finally, I would like to ask you the difference between the classic (ClassicICPRegistration) algorithm and the PCL_ICP algorithm. 2、Between the implementation in this repository and the implementation in open3d library , you just reproduced the color_icp algorithm encapsulated in the open3d library with C++ code, right? 3、Is there any official implementation of the algorithm proposed in the original paper? I want to modify the source code of the algorithm to improve the effect. Where can I find the underlying formula implementations? I can't find it.

hanzheteng commented 1 year ago
  1. They are numerically the same (exactly the same behavior). PCL_ICP is a wrapper to call the implementation in PCL, and ClassicICPRegistration is the one implemented in this repository. (Similarly, colored_icp.py is the wrapper to call the implementation in Open3D, and ColorICPRegistration is the one implemented in this repository.)
  2. Yes, and the motivation behind this is that the original implementation in PCL and Open3D is hidden behind complicated interfaces and nested templates, which is hard for beginners to learn through. It would be clear to study just the code in this repo and you can easily copy the code to other projects as needed.
  3. The one in Open3D is the official implementation of the algorithm. The authors of the color icp paper are the authors of Open3D. If you would like to study the math a bit more, you can take a look at my math notes (included in this repo).