Outsource point set registration

Issue #168 on hold
Vyas Ramasubramani created an issue

I spoke to @erteich about this yesterday as I went down the point set registration rabbithole for my own purposes, and we talked about potentially wanting to improve freud's registration methods in the long term. freud currently has a reasonable solution for this built in to the environment matching code, but to improve it we might want more sophisticated algorithms. If we do, I think it's worth looking at existing libraries for this before implementing our own methods since point cloud mapping is such a well-studied problem in a lot of fields, and many of them have very good solutions.

There are a few open source options for this problem. The ICP algorithm is implemented in a lot of places, including Meshlab, CloudCompare, and even VTK, but I would be hesitant about making one of these libraries a dependency of freud since they're all pretty large and contain a whole lot of unrelated code (it would be like introducing Boost in some sense). The two best option appear to be the Segmentation and Registration Toolkit ITK and the Point Cloud Library PCL. Of these, the former seems to be a bit lower level; for example, they don't actually have an implementation of ICP ready to go, they just have examples of how to implement ICP using their built-in lower level routines. As a result, my recommendation for what to use would probably be PCL, which looks like it has tools like this built-in and would be about as minimal of a solution as we could find for this.

It's possible that all of the methods in there are too complex and therefore too slow for our purposes, so it may not work out. That said, if we want to improve our registration methods I think it's worth looking for good existing solutions since there's so much external code to solve this problem. For what it's worth, someone has worked on building a python interface to PCL, so we could test it out first pretty easily if we wanted to.

@erteich @the_real_pdodd any thoughts you have would be appreciated.

Comments (7)

  1. Paul Dodd

    So I just wrote a long response and then clicked one of the links above and lost it. so here is the abridgment.

    PCL is cool. I have played around with it a bit. I would be hesitant to make it a dep. but there are a lot of tools in there that people would benefit from. I don't have any experience with the others so I am not sure how cumbersome they would be to make a dep.

    I shared a repo with you with a ICP implementation that you can pull into freud. let me know if you have any questions.

  2. Vyas Ramasubramani reporter

    I see the repo, will definitely take a look through.

    Do you think maintaining PCL (or something simpler) as a dependency would be more cumbersome than trying to maintain our own registration code? While I'm sure others can figure it out, I don't think it's currently a problem that many people in the group are too familiar with.

  3. Vyas Ramasubramani reporter

    @the_real_pdodd any thoughts? Do you think it's worth just plugging in your ICP implementation for brute_force? That would also address our concerns with respect to Issue #105 for Boost removal, but I assume that we would incur a significant performance hit switching from the brute force solution to ICP.

  4. Log in to comment