Internal:PODM 3D: Difference between revisions
Jump to navigation
Jump to search
Spyridon97 (talk | contribs) |
Spyridon97 (talk | contribs) |
||
| (155 intermediate revisions by the same user not shown) | |||
| Line 2: | Line 2: | ||
=Documentation= | =Documentation= | ||
# Read [https:// | ==Fall 2019== | ||
# Read [https:// | # Read [https://crtc.cs.odu.edu/pub/papers/journal_56.pdf PODM3D] paper✔ | ||
# Read [https://crtc.cs.odu.edu/pub/papers/journal_58.pdf Guaranteed Quality Tetrahedral Delaunay Meshing for Medical Images] paper (Sect. 9) (TODO) | |||
# Write a proper README.md file✔ | # Write a proper README.md file✔ | ||
# Add the [https://crtc.cs.odu.edu/CNF_Example_Meshes CNF Example Meshes] into the Appendix of the November Report✔ | # Add the [https://crtc.cs.odu.edu/CNF_Example_Meshes CNF Example Meshes] into the Appendix of the November Report✔ | ||
# Create a [https://crtc.cs.odu.edu/ | # Create [https://crtc.cs.odu.edu/Internal:CNF_Adaptivity CNF Adaptivity] Report | ||
==Spring 2020== | |||
# Create a [https://crtc.cs.odu.edu/CRTC_I2M User Manual] for PODM 3D and Tessellate2D within the fields of Medical Image Computing and Computational Nuclear Femptography ✔ | |||
=Execution Examples= | =Execution Examples= | ||
==Fall 2019== | |||
# Create meshes for the Computational Nuclear Femtography part of CRTC_I2M_Suite Documentation. [https://crtc.cs.odu.edu/CNF_Example_Meshes CNF Example Meshes] ✔ | # Create meshes for the Computational Nuclear Femtography part of CRTC_I2M_Suite Documentation. [https://crtc.cs.odu.edu/CNF_Example_Meshes CNF Example Meshes] ✔ | ||
=Code | ==Spring 2020== | ||
# Create meshes for the Medical Image Computing part of CRTC_I2M_Suite Documentation. [https://crtc.cs.odu.edu/Medical_Imaging_Example_Meshes Medical Imaging Example Meshes] ✔ | |||
==Summer 2020== | |||
# Create meshes for the Bioinformatics part of CRTC_I2M_Suite Documentation. [https://crtc.cs.odu.edu/Bioinformatics_Example_Meshes Bioinformatics Example Meshes] ✔ | |||
=Code= | |||
==Fall 2019== | |||
# Restructure repository of PODM3D based on Software engineering standards✔ | # Restructure repository of PODM3D based on Software engineering standards✔ | ||
# Decouple Args from PODM✔ | # Decouple Args from PODM✔ | ||
| Line 18: | Line 29: | ||
# Create setInputImage(ImageType::Pointer)✔ | # Create setInputImage(ImageType::Pointer)✔ | ||
# Remove IOs from PODM✔ | # Remove IOs from PODM✔ | ||
# Implement a sizing function that will work as an extra rule and it will use the | # Implement a sizing function that will work as an extra rule and it will use the points of the tetrahedron that is tested✔ | ||
## Create UML diagrams to understand the code and the Meshing Procedure in general✔ | ## Create UML diagrams to understand the code and the Meshing Procedure in general✔ | ||
## Create a list of functions that need to be modified to implement the extra Rule ✔ | ## Create a list of functions that need to be modified to implement the extra Rule ✔ | ||
| Line 37: | Line 48: | ||
## Create the infrastructure to support Sizing Function pointer✔ | ## Create the infrastructure to support Sizing Function pointer✔ | ||
## Incorporate Function Pointer to PODM by creating a setSizingFunction()✔ | ## Incorporate Function Pointer to PODM by creating a setSizingFunction()✔ | ||
## Replace the test sizing function with the Adaptivity function that was created by Christos (The algorithm is described [https://crtc.cs.odu.edu/ | ## Replace the test sizing function with the Adaptivity function that was created by Christos (The algorithm is described [https://crtc.cs.odu.edu/Internal:CNF_Adaptivity here])✔ | ||
## Understand that the current implementation supports negative weights✔ | ### Understand that the current implementation supports negative weights✔ | ||
## Change the current implementation to use the minimum-maximum edge length of the element instead of its volume✔ | ### Change the current implementation to use the minimum-maximum edge length of the element instead of its volume✔ | ||
## Identify an issue of checking sample points outside the image and solve it according to Christos's suggestions✔ | ### Identify an issue of checking sample points outside the image and solve it according to Christos's suggestions✔ | ||
# Separate the interface, the IOs and the filters from PODM✔ | # Separate the interface, the IOs and the filters from PODM✔ | ||
==Spring 2020== | |||
# Create a general PODM driver✔ | # Create a general PODM driver✔ | ||
# Set a warning if delta > min-spacing * min-dimension-size / 5✔ | # Set a warning if delta > min-spacing * min-dimension-size / 5✔ | ||
# Set a default delta: | # Set a default delta: ✔ | ||
## if sizing-function is off then default delta = min-spacing * min-dimension-size / | ## if sizing-function is off then default delta = min-spacing * min-dimension-size / 100 ✔ | ||
## if sizing-function is | ## if sizing-function is on then default delta = min-spacing * min-dimension-size / 20 ✔ | ||
# Remove labels array | # Remove labels array if there is only 1 label of interest ✔ | ||
# Print a warning if a | # Print a warning if a label is not recovered✔ | ||
# Add Numa flag in CmakeLists.txt ✔ | # Add Numa flag in CmakeLists.txt ✔ | ||
# Add binary file support ✔ | # Add binary file support ✔ | ||
# Improve Text output ✔ | # Improve Text output ✔ | ||
# Create | # Create label-filter for images ✔ | ||
# | ## Preserve a set of labels of an image ✔ | ||
# | ## Exclude a set of labels of an image ✔ | ||
# Remove redundant volume threshold checks that don't contribute anything to the meshing procedure ✔ | |||
==Summer 2020== | |||
# Libraries: | |||
## Update ITK to v5.1.0 ✔ | |||
## Update VTK to v9.0.1 ✔ | |||
## Remove Boost from PODM (preserve it only for CGAL) ✔ | |||
# Save the label of a cell after its creation and Remove the expensive label recalculation in GetCleanMesh/GetCleanMeshParallel✔ | |||
# Compute Mesh Results in Parallel (TODO) | |||
## Implement Parallel version of GetCleanMesh function ✔ | |||
## Testing ✔ | |||
## Speed-Up [[File:mesh-results-speed-up.png|500px|File:mesh-results-speed-up.png]] ✔ | |||
## Assigned as default ✔ | |||
# Upgrade the define NO_IO_WRITING | |||
## Rename it to IO_WRITING ✔ | |||
## Create functions for loading and writing of auxiliary files ✔ | |||
## Create a compile flag for it, which will also enable the creation of the auxiliary files folder ✔ | |||
## Fix truncation error when loading box ✔ | |||
# Compute Box, Resized image and surface in Parallel ✔ | |||
## Implement Parallel version of ComputeBoxAndSurface function ✔ | |||
## Testing ✔ | |||
## Speed-Up [[File:box-surface-speed-up.png|500px|File:box-surface-speed-up.png]]✔ | |||
## Assigned as default ✔ | |||
# Sizing function: | |||
## Control min edge and max edge using a percentage of the diagonal ✔ | |||
## Find values of samples points using linear interpolation ✔ | |||
==Fall 2020== | |||
# Fix shift of origin if delta not multiple of the spacing ✔ | |||
# Handle CNF images with spacing different than 1, and origin different than {0, 0, 0} ✔ | |||
## Upgrade Image Segmentation ✔ | |||
## Upgrade Sizing function ✔ | |||
## Upgrade Linear Interpolation ✔ | |||
# Change ImageSegmentation to create an image inside the requested grid domain ✔ | |||
= | ==Spring 2021== | ||
# | # [Christos] Addition of Extra points at the beginning of meshing ✔ | ||
## | # [Polykarpos] Loading and saving the state of PODM mesher ✔ | ||
## | # Load Dynamically Sizing Functions and their initialization as a shared Library using function pointers ✔ | ||
# | # Detect special cases of Christos and Polykarpos additions ✔ | ||
## [[ | # Accept double instead of float type precision images ✔ | ||
## [[ | # Add a vector of weights for each vertex ✔ | ||
## [ | # Add a vector of sizing functions for each thread ✔ | ||
## [ | ==Summer 2021== | ||
## [ | # Integrate PODM3D of APBNRR with the latest PODM3D (TODO) | ||
# Fix add points issue (TODO) | |||
# Fix PODM not working on Wahab (TODO) | |||
# Remeshing by using a mesh instead of an image as input and background mesh (TODO) | |||
# Replace CGAL Predicates with: (TODO) | |||
## Predicates Construction Kit: | |||
### [https://hal.inria.fr/hal-01225202 Paper] | |||
### [https://gforge.inria.fr/frs/?group_id=5833 Code] | |||
### Benchmark: [https://crtc.cs.odu.edu/Internal:4D_Predicates_Benchmark PCK vs CGAL Predicates Benchmark] | |||
### Note: see Geogram branch | |||
## Adaptive Precision Floating-Point Arithmetic and Fast Robust Predicates for Computational Geometry: | |||
### [https://www.cs.cmu.edu/afs/cs/project/quake/public/papers/robust-predicates.ps Paper] | |||
### [https://www.cs.cmu.edu/afs/cs/project/quake/public/code/predicates.c Code] | |||
# Smoothing (TODO) | |||
## [https://hal.inria.fr/inria-00413248/document Feature preserving Delaunay mesh generation from 3D multi-material images] | |||
## CGAL Sources: | |||
### https://doc.cgal.org/latest/Mesh_3/index.html | |||
### https://doc.cgal.org/latest/Mesh_3/index.html#fig__mesh3protectionimage3D | |||
### https://doc.cgal.org/latest/Mesh_3/index.html#fig__mesh3HybridDomainExample | |||
## PODM3D citations: | |||
### [https://www-sciencedirect-com.proxy.lib.odu.edu/science/article/pii/S0021999101968160 Volume conserving smoothing for piecewise linear curves, surfaces, and triple lines] | |||
### [https://www-sciencedirect-com.proxy.lib.odu.edu/science/article/pii/S0021999108004981 An anisotropic scale-invariant unstructured mesh generator suitable for volumetric imaging data] | |||
### [https://pubmed.ncbi.nlm.nih.gov/20161102/ Variational generation of prismatic boundary-layer meshes for biomedical computing, International Journal for Numerical Methods] | |||
## Prof, Andrey Suggestions: | |||
### [https://people.eecs.berkeley.edu/~jrs/papers/stuffing.pdf Isosurface Stuffing: Fast Tetrahedral Meshes with Good Dihedral Angles] | |||
### [https://imr.sandia.gov/_assets/documents/2019_IMR_Papers/3B.2-Chernikov.pdf CERTIFIED FUNCTIONS FOR MESH GENERATION] | |||
### [https://crtc.cs.odu.edu/pub/papers/journal_49.pdf GENERALIZED INSERTION REGION GUIDES FOR DELAUNAY MESH REFINEMENT] | |||
# Μultiple δ (TODO) | |||
## Implement multiple δ (TODO) | |||
## Use different δ values (possibly uniform based) according to the surface of each label of a segmented image (TODO) | |||
# Produce the Voronoi Mesh out of the Delaunay (TODO) | |||
## Check what TetGen does (TODO) | |||
## Research conversion methods (TODO) | |||
Latest revision as of 13:35, 3 June 2021
Documentation
Fall 2019
- Read PODM3D paper✔
- Read Guaranteed Quality Tetrahedral Delaunay Meshing for Medical Images paper (Sect. 9) (TODO)
- Write a proper README.md file✔
- Add the CNF Example Meshes into the Appendix of the November Report✔
- Create CNF Adaptivity Report
Spring 2020
- Create a User Manual for PODM 3D and Tessellate2D within the fields of Medical Image Computing and Computational Nuclear Femptography ✔
Execution Examples
Fall 2019
- Create meshes for the Computational Nuclear Femtography part of CRTC_I2M_Suite Documentation. CNF Example Meshes ✔
Spring 2020
- Create meshes for the Medical Image Computing part of CRTC_I2M_Suite Documentation. Medical Imaging Example Meshes ✔
Summer 2020
- Create meshes for the Bioinformatics part of CRTC_I2M_Suite Documentation. Bioinformatics Example Meshes ✔
Code
Fall 2019
- Restructure repository of PODM3D based on Software engineering standards✔
- Decouple Args from PODM✔
- Create setArguments function✔
- Create setInputImage(ImageType::Pointer)✔
- Remove IOs from PODM✔
- Implement a sizing function that will work as an extra rule and it will use the points of the tetrahedron that is tested✔
- Create UML diagrams to understand the code and the Meshing Procedure in general✔
- Create a list of functions that need to be modified to implement the extra Rule ✔
- Modify the created list (Extra Rule sizing Function list) of functions✔
- Create the following test sizing function to understand if modifications have been done correctly✔
bool checkSizingFunction(double coordinatesOfTetrahedron**) { double volume = volume(coordinatesOfTetrahedron); double* baryCenter = baryCenter(coordinatesOfTetrahedron) // if x axis <= 55 and volume of tetrahedron > 10 if (baryCenter[0] <= 55 && volume > 10) return true; else return false }
- Create the infrastructure to support Sizing Function pointer✔
- Incorporate Function Pointer to PODM by creating a setSizingFunction()✔
- Replace the test sizing function with the Adaptivity function that was created by Christos (The algorithm is described here)✔
- Understand that the current implementation supports negative weights✔
- Change the current implementation to use the minimum-maximum edge length of the element instead of its volume✔
- Identify an issue of checking sample points outside the image and solve it according to Christos's suggestions✔
- Separate the interface, the IOs and the filters from PODM✔
Spring 2020
- Create a general PODM driver✔
- Set a warning if delta > min-spacing * min-dimension-size / 5✔
- Set a default delta: ✔
- if sizing-function is off then default delta = min-spacing * min-dimension-size / 100 ✔
- if sizing-function is on then default delta = min-spacing * min-dimension-size / 20 ✔
- Remove labels array if there is only 1 label of interest ✔
- Print a warning if a label is not recovered✔
- Add Numa flag in CmakeLists.txt ✔
- Add binary file support ✔
- Improve Text output ✔
- Create label-filter for images ✔
- Preserve a set of labels of an image ✔
- Exclude a set of labels of an image ✔
- Remove redundant volume threshold checks that don't contribute anything to the meshing procedure ✔
Summer 2020
- Libraries:
- Update ITK to v5.1.0 ✔
- Update VTK to v9.0.1 ✔
- Remove Boost from PODM (preserve it only for CGAL) ✔
- Save the label of a cell after its creation and Remove the expensive label recalculation in GetCleanMesh/GetCleanMeshParallel✔
- Compute Mesh Results in Parallel (TODO)
- Upgrade the define NO_IO_WRITING
- Rename it to IO_WRITING ✔
- Create functions for loading and writing of auxiliary files ✔
- Create a compile flag for it, which will also enable the creation of the auxiliary files folder ✔
- Fix truncation error when loading box ✔
- Compute Box, Resized image and surface in Parallel ✔
- Sizing function:
- Control min edge and max edge using a percentage of the diagonal ✔
- Find values of samples points using linear interpolation ✔
Fall 2020
- Fix shift of origin if delta not multiple of the spacing ✔
- Handle CNF images with spacing different than 1, and origin different than {0, 0, 0} ✔
- Upgrade Image Segmentation ✔
- Upgrade Sizing function ✔
- Upgrade Linear Interpolation ✔
- Change ImageSegmentation to create an image inside the requested grid domain ✔
Spring 2021
- [Christos] Addition of Extra points at the beginning of meshing ✔
- [Polykarpos] Loading and saving the state of PODM mesher ✔
- Load Dynamically Sizing Functions and their initialization as a shared Library using function pointers ✔
- Detect special cases of Christos and Polykarpos additions ✔
- Accept double instead of float type precision images ✔
- Add a vector of weights for each vertex ✔
- Add a vector of sizing functions for each thread ✔
Summer 2021
- Integrate PODM3D of APBNRR with the latest PODM3D (TODO)
- Fix add points issue (TODO)
- Fix PODM not working on Wahab (TODO)
- Remeshing by using a mesh instead of an image as input and background mesh (TODO)
- Replace CGAL Predicates with: (TODO)
- Predicates Construction Kit:
- Paper
- Code
- Benchmark: PCK vs CGAL Predicates Benchmark
- Note: see Geogram branch
- Adaptive Precision Floating-Point Arithmetic and Fast Robust Predicates for Computational Geometry:
- Predicates Construction Kit:
- Smoothing (TODO)
- Feature preserving Delaunay mesh generation from 3D multi-material images
- CGAL Sources:
- PODM3D citations:
- Volume conserving smoothing for piecewise linear curves, surfaces, and triple lines
- An anisotropic scale-invariant unstructured mesh generator suitable for volumetric imaging data
- Variational generation of prismatic boundary-layer meshes for biomedical computing, International Journal for Numerical Methods
- Prof, Andrey Suggestions:
- Μultiple δ (TODO)
- Implement multiple δ (TODO)
- Use different δ values (possibly uniform based) according to the surface of each label of a segmented image (TODO)
- Produce the Voronoi Mesh out of the Delaunay (TODO)
- Check what TetGen does (TODO)
- Research conversion methods (TODO)