Need advice on implementation of 3D Objects Reconstruction Based on Kinect

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Need advice on implementation of 3D Objects Reconstruction Based on Kinect

StevenMinh
This post was updated on .
Hi, It's my first time here so i hope i didn't say anything out of line. I'd
just started learning about the PCL library for sometime, and i got to say
the library is really impressive and will help me greatly in my upcoming
thesis.
I'm planning to implement a 3D reconstruction system of 3D objects, using
the Kinect. After a week of reading documentation, i have managed to use the
Kinect to capture point cloud frames in PCD format and perform ICP alignment
on each frames. but the result isn't satisfied enough and painfully slow. I
can stand the slow part since i'd looked at KinFu but GPU implementation
isn't what i have in mind, but is there a way for me to create a globally
consistent point cloud from a set of point cloud frames recorded from the
Kinect?
I hope someone can point me to the right direction here

Also since i'm gonna use this library for most part of my thesis work, i
would like to buy a coffee or two for the folks behind Open Perception but
unable to do so. It seem like the donation function isn't working correctly
or is it just me?

<http://www.pcl-users.org/file/t499258/Screen_Shot_2018-03-09_at_3.png



--
Sent from: http://www.pcl-users.org/
_______________________________________________
PCL-users@pointclouds.org / http://pointclouds.org
http://pointclouds.org/mailman/listinfo/pcl-users
Reply | Threaded
Open this post in threaded view
|

Re: A Method for Reconstructing 3D Objects Based on Kinect

Stephen McDowell
Some brief suggestions / explanations:

1. Make sure you are estimating normals before running ICP.  I haven’t looked at the implementation details, but its more likely than not that if normals for a point cloud are provided, then the point-to-plane error metric will be used based off of the normals.  That typically increases the speed of alignment.

You’d need to take a look at the source code, it might mean using the XYZRGBNormal class?  I’m not sure, but look around for if normals are used anywhere in ICP.

2. The Kinect Fusion version of ICP is dramatically different than other methods.  It’s doing something typically called “projective ICP”, it’s main characteristic being that it’s neighbor search method brilliantly eliminates the need to do something like searching a KD-Tree or Octree, but instead projects / deprojects from one frame (typically the global frame) to the current frame.

It’s not exactly easy to implement, but it’s “embarrassingly parallel” hence very well suited for the GPU.  Even if you don’t want to use a GPU approach (e.g., you don’t have CUDA capabilities), you likely could still get some significant speed boosts by implementing a CPU version.  I think PCL uses OpenMP for their threading, so assuming your compiler supports that, it may be worth the time.

Hope one of those two sends you in a good direction.  Be aware that re-implementing (2) is a big time sync, you should check out the Kinect Fusion paper to see what’s going on.

Of course, if you do have CUDA, you should invest your time in compiling PCL from source with CUDA so that you can just use the Kinfu stuff :)


_______________________________________________
[hidden email] / http://pointclouds.org
http://pointclouds.org/mailman/listinfo/pcl-users
Reply | Threaded
Open this post in threaded view
|

Re: A Method for Reconstructing 3D Objects Based on Kinect

Sérgio Agostinho


On 09-03-2018 18:28, Stephen McDowell wrote:
> Some brief suggestions / explanations:
>
> 1. Make sure you are estimating normals before running ICP.  I haven’t looked at the implementation details, but its more likely than not that if normals for a point cloud are provided, then the point-to-plane error metric will be used based off of the normals.  That typically increases the speed of alignment.
>
> You’d need to take a look at the source code, it might mean using the XYZRGBNormal class?  I’m not sure, but look around for if normals are used anywhere in ICP.

If the type of the point cloud has it, ICP will try to use it.

> 2. The Kinect Fusion version of ICP is dramatically different than other methods.  It’s doing something typically called “projective ICP”, it’s main characteristic being that it’s neighbor search method brilliantly eliminates the need to do something like searching a KD-Tree or Octree, but instead projects / deprojects from one frame (typically the global frame) to the current frame.
>
> It’s not exactly easy to implement, but it’s “embarrassingly parallel” hence very well suited for the GPU.  Even if you don’t want to use a GPU approach (e.g., you don’t have CUDA capabilities), you likely could still get some significant speed boosts by implementing a CPU version.  I think PCL uses OpenMP for their threading, so assuming your compiler supports that, it may be worth the time.
>
> Hope one of those two sends you in a good direction.  Be aware that re-implementing (2) is a big time sync, you should check out the Kinect Fusion paper to see what’s going on.

There's a number of implementations of kinfu outside the PCL spectrum. A
few years back we usually pointed people towards this one.

https://github.com/Nerei/kinfu_remake

Cheers



_______________________________________________
[hidden email] / http://pointclouds.org
http://pointclouds.org/mailman/listinfo/pcl-users

signature.asc (836 bytes) Download Attachment