Algorithm documentation for Point-to-plane ICP
- Dominant language
- C++
- Stars
- 14k
- Forks
- 2.6k
- Avg merge
- 5d 18h
- Merged PRs (30d)
- 6
Description
### Checklist
- [X] I have searched for [similar issues](https://github.com/isl-org/Open3D/issues).
- [X] For Python issues, I have tested with the [latest development wheel](http://www.open3d.org/docs/latest/getting_started.html#development-version-pip).
- [X] I have checked the [release documentation](http://www.open3d.org/docs/release/) and the [latest documentation](http://www.open3d.org/docs/latest/) (for `master` branch).
### My Question
I was trying to understand the approach used in Open3D to optimise the Point-to-plane ICP objective:
http://www.open3d.org/docs/release/tutorial/pipelines/icp_registration.html#Point-to-plane-ICP
The documentation points only to [[ChenAndMedioni1992]](https://doi.org/10.1016/0262-8856(92)90066-C) and [[Rusinkiewicz2001]](https://doi.org/10.1109/IM.2001.924423). In both references, the choice of optimiser (given a set of correspondences), seems to be left to the discretion of the reader. Non-linear optimisation with Levenberg-Marquardt is mentioned as an option and so is a single step linearised problem solution.
In OpenCV, it looks like a Gauss-Newton optimiser is used:
https://docs.opencv.org/4.x/d7/dbe/kinfu_icp.html
In Open3D, after reading through the code, it seems that a one-step linearised problem is solved:
https://github.com/isl-org/Open3D/blob/f1a0f3edd6b6a7d96352f43f83844111e8e9ea35/cpp/open3d/pipelines/registration/TransformationEstimation.cpp#L59-L90
I guess this is the same as a single step of Gauss-Newton but this wasn't entirely clear to me.
It would be great if additional information would be provided on the matter, either in the overall documentation or directly as comments in the source code for this function.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.