Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature Request] Advanced Point Cloud Selection Tools for Efficient Outlier Removal #303

Open
RobLinkA opened this issue Nov 28, 2024 · 2 comments

Comments

@RobLinkA
Copy link

RobLinkA commented Nov 28, 2024

Problem Description
When editing 3D Gaussian Splatting point clouds, it's often necessary to remove scattered points near the main object (e.g., a sculpture) and isolated fragments far from the main body. Currently, the process of selecting and removing these unwanted points could be more efficient.

Reference Solution
In similar scenarios, tools like RealityCapture provide an efficient workflow:
Use lasso to select part of the main object
Expand the selection to include all connected polygons
Inverse the selection to filter out most unwanted parts

Proposed Solutions
I'd like to suggest two possible approaches for implementing similar functionality in 3D Gaussian Splatting:

Approach 1: Selection-based Expansion
Users first select some points on the main object
Add a distance threshold slider
Automatically select all points within the threshold distance from the initially selected points
Users can then inverse the selection to remove scattered points

Approach 2: Isolation-based Filtering
Add a single distance threshold slider
For each point center, check if there are other point centers within the specified range
Points without neighbors within the range are considered isolated
These isolated points can be batch selected for removal
This approach would be particularly helpful for removing fragments generated by MCMC training

Technical Feasibility
Both approaches rely on distance calculations between point centers, which are already maintained in the current data structure. The main implementation requirements would be:

  • Distance calculation functionality
  • Threshold-based selection mechanism
  • UI slider controls

Benefits
These tools would:

  • Significantly improve editing efficiency
  • Provide intuitive controls familiar to users of other 3D tools
  • Address common pain points in point cloud cleanup
  • Help in both close-range scattered point removal and far-range fragment cleanup

Would love to hear your thoughts on these suggestions and which approach might be more feasible to implement first.

@simonbethke
Copy link
Contributor

Calculating distances appears to be easy, but actually its really a beast. I have thought about similar ideas for a while and I found no theoretical solution that could provide a good performance.
I am not saying that there are no solutions, but for obvious reasons you cannot just check distances between any two splats. for example the very first required thing would be to materialize the transform-palette.

@RobLinkA
Copy link
Author

RobLinkA commented Nov 28, 2024

Thank you for explaining the performance challenges with distance calculations. I'd like to clarify that my request is actually simpler than initially presented: I'm only interested in checking distances between point centers, not the full Gaussian splats.

The specific functionality I'm looking for is a basic isolation detection:

  1. Add a distance threshold slider
  2. For each point center, check if there are any other point centers within that threshold distance
  3. If a point has no neighbors within the threshold, mark it as isolated
  4. Allow batch selection/deletion of these isolated points

I'm curious about the technical aspects of implementing even this simplified version. Could you share insights about:
The approximate computational complexity when dealing with just point center coordinates?
Whether spatial partitioning structures might be viable for this simpler case?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants