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.
- 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.
Original Stanford bunny sampled with 35847 points:
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).
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:
The resulting completion of the sparsified bunny:
Original armadillo sampled with 172,974 points:
Decimating it's mid body with random holes:
We increase the default patch size field to 300 to take into account the large gaps relative to sampling density:
The resulting reconstruction of the decimated armadillo, with reconstructed points highlighted:
When we unhighlight the newly added points, the rear shell looks unnaturally smooth
But this is because of the normals need updating using a smaller patch size
Doing this we get the final repaired armadillo
Original surface sampled with 35000 points:
Sparsified down to 1225 points:
Increasing the default densification field to 1.5 to get a denser reconstruction:
The resulting reconstruction of the sparsified point cloud:
Original surface sampled with 15000 points:
Heavily decimated with random holes:
Increasing the default patch size field to 250 to take into account the large gaps relative to sampling density:
The resulting reconstruction of the decimated point cloud: