Skip to content

Point cloud completion tool based on dictionary learning. Takes a PCL point cloud surface and fills in gaps or densifies sparse regions by learning from the various surface features of the cloud. This is done using a variation of the k-SVD dictionary learning algorithm that allows for continuous atoms and dealing with unstructured point cloud da…

License

Notifications You must be signed in to change notification settings

codearxiv/PCReconstruct

Repository files navigation

PCReconstruct

Point cloud completion tool based on dictionary learning.

Takes a PCL point cloud surface and fills in gaps or densifies sparse regions by learning from the various surface features of the cloud.

This is done using a variation of the k-SVD dictionary learning algorithm that allows for continuous atoms and dealing with unstructured point cloud data.

Written in Qt C++, using Eigen, OpenMP, and OpenGL.

TODO:

  • Still struggles in areas of very high curvature, producing artifacts that go off in random directions.
  • If original point cloud normals are provided, take them into account (especially at parallel near approaches between two surfaces).
  • Dictionary learning could be off-loaded to GPU.
  • Potential OpenMP parallelization in point creation loop.
  • Take point colour values into account.

Sparsified Stanford Bunny:

Original Stanford bunny sampled with 35847 points:

1a

Sparsifying the mid section to 4% after shrinking the bounding box to exclude the ears (there are not enough points around the ear tips to approximate normals after sparsifying, and the curvature there is too high as well).

1b 1c

We increase the default densification field to 1.5 to get a denser reconstruction, and set patch frequency to 2 since we dont expect much bumpiness in the final result within a patch size of 50. We also want the "use points outside bounding box" field set "True" to get better agreement around the boundary of the bounding box:

1d

The resulting completion of the sparsified bunny:

1e

Decimated Armadillo:

Original armadillo sampled with 172,974 points:

2a 2a2

Decimating it's mid body with random holes:

2b 2b2

We increase the default patch size field to 300 to take into account the large gaps relative to sampling density:

2c

The resulting reconstruction of the decimated armadillo, with reconstructed points highlighted:

2d 2d2

When we unhighlight the newly added points, the rear shell looks unnaturally smooth

2e

But this is because of the normals need updating using a smaller patch size

2e2

Doing this we get the final repaired armadillo

2f2 2f

Sparsified Random Surface:

Original surface sampled with 35000 points:

5a

Sparsified down to 1225 points:

5b

Increasing the default densification field to 1.5 to get a denser reconstruction:

5c

The resulting reconstruction of the sparsified point cloud:

5d

Decimated Random Surface:

Original surface sampled with 15000 points:

8a

Heavily decimated with random holes:

8b

Increasing the default patch size field to 250 to take into account the large gaps relative to sampling density:

8c

The resulting reconstruction of the decimated point cloud:

8d

About

Point cloud completion tool based on dictionary learning. Takes a PCL point cloud surface and fills in gaps or densifies sparse regions by learning from the various surface features of the cloud. This is done using a variation of the k-SVD dictionary learning algorithm that allows for continuous atoms and dealing with unstructured point cloud da…

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published