-
Notifications
You must be signed in to change notification settings - Fork 2.3k
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
Normal orientation issues in complex geometries #6198
Conversation
…dal piano - due metodi: cono (lambda=0, cos(a) variabile) e penalizzazione (lambda!=0, cos(a)=1). Possibilità di mixare i due metodi
…ossibility to mix penalization and treshold approach.
Thanks for submitting this pull request! The maintainers of this repository would appreciate if you could update the CHANGELOG.md based on your changes. |
Hi @eugeniovaretti , thanks for your work, which looks useful to achieve better normals orientation. Could you provide the full code to reproduce the results you have shown in the plots?
Looking forward to see your report. |
@eugeniovaretti Can you share your report? |
Good morning, everyone, |
Interesting work! Waiting on the report. Thanks for your valuable contribution. |
Good morning everyone. We finally got the green light to publish our project. Find the report and the link to the reproducibility folder here: https://eugeniovaretti.github.io/meshreco/ |
Thank you @eugeniovaretti ! Will check out the report |
@eugeniovaretti what will happen if we set the angle threshold to zero? Zero is obviously not a good choice, I am just interested in the effect. Will it crash or behave randomly? |
@benjaminum As you can see in the attached pic it will behave "randomly", as each edge of the graph will be weighted equally (infinity) and the reconstruction will depend on the implementation of Kruskal's algorithm (which will select one of the multiple connected graphs with minimum weight). |
@eugeniovaretti That's good. Wanted to be sure that there is no crash in this specific case. The only thing missing is adding documentation for the python part. Do you think you could add documentation similar to the RaycastingScene and add an example of how to use the new parameters?
|
@benjaminum We have just added the Python documentation. Hope everything is ok. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: 0 of 6 files reviewed, all discussions resolved (waiting on @yuecideng)
Type
Motivation and Context
While exploring existing algorithms for creating meshes from point clouds, we came across Open3D. We noticed that one of the test point clouds we had available failed to reconstruct the mesh using the normal estimation method. We investigated and studied the library regarding the methods we used, and consequently identified some weaknesses in the algorithm.
Our work is documented in this report.
Given an input point cloud, the algorithm processes the data primarily based on Euclidean distance, using the K-nearest neighbors (KNN) algorithm as a basis. In the case of specific geometries, this can be problematic when orienting two distinct surfaces of the same volume that should have opposite orientations (e.g., cusps, stenosis, etc.).
Therefore, we provide the user with the ability to manipulate two parameters in the$n_z$ (calculated in the
OrientNormalsConsistentTangentPlane
function (ororient_normals_consisten_tangent_plane
in Python), namelylambda
andcos_alpha_tol
, which respectively allow for a penalty and a threshold on the distance of a point x from the plane defined by a point z and its estimated normalEstimateNormal
method).All the work is documented in the report.
Checklist:
python util/check_style.py --apply
to apply Open3D code styleto my code.
updated accordingly.
results (e.g. screenshots or numbers) here.
Description
Below we show some of the results and improvements that follow from this modification. By using the default values for the (new) parameters, no macroscopic changes will be applied to the original algorithm.
Only a minor modification has been made to the code, specifically the initial point of
traversal_queue
.All the details and motivations are provided in the report.
Original Algorithm:
Our changes:
Differences:
Unit Tests
All unit tests related to our modifications (PointCloud*) have passed successfully.
Authors
This pull request is the culmination of exceptional teamwork within an outstanding team, including @SimonePiazza99 and @federicavalentini99.
This change is