Internal:PODM 3D: Difference between revisions

From crtc.cs.odu.edu
Jump to navigation Jump to search
Spyridon97 (talk | contribs)
Spyridon97 (talk | contribs)
Line 83: Line 83:
# Control min edge and max edge using a percentage of the diagonal ✔
# Control min edge and max edge using a percentage of the diagonal ✔
# Remeshing by changing sizing-function's image and not Mesher input image (TODO)
# Remeshing by changing sizing-function's image and not Mesher input image (TODO)
# Replace CGAL Predicates with: (TODO)
## Predicate 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]


==Fall 2020==
==Fall 2020==

Revision as of 18:30, 23 July 2020

Documentation

Fall 2019

  1. Read PODM3D paper✔
  2. Read Guaranteed Quality Tetrahedral Delaunay Meshing for Medical Images paper (Sect. 9) (TODO)
  3. Write a proper README.md file✔
  4. Add the CNF Example Meshes into the Appendix of the November Report✔
  5. Create CNF Adaptivity Report

Spring 2020

  1. Create a User Manual for PODM 3D and Tessellate2D within the fields of Medical Image Computing and Computational Nuclear Femptography ✔

Execution Examples

Fall 2019

  1. Create meshes for the Computational Nuclear Femtography part of CRTC_I2M_Suite Documentation. CNF Example Meshes ✔

Spring 2020

  1. Create meshes for the Medical Image Computing part of CRTC_I2M_Suite Documentation. Medical Imaging Example Meshes ✔

Summer 2020

  1. Create meshes for the Bioinformatics part of CRTC_I2M_Suite Documentation. Bioinformatics Example Meshes ✔

Code

Fall 2019

  1. Restructure repository of PODM3D based on Software engineering standards✔
  2. Decouple Args from PODM✔
  3. Create setArguments function✔
  4. Create setInputImage(ImageType::Pointer)✔
  5. Remove IOs from PODM✔
  6. Implement a sizing function that will work as an extra rule and it will use the point indices of the tetrahedron that is tested✔
    1. Create UML diagrams to understand the code and the Meshing Procedure in general✔
    2. Create a list of functions that need to be modified to implement the extra Rule ✔
    3. Modify the created list (Extra Rule sizing Function list) of functions✔
    4. 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
      }
      
    5. Create the infrastructure to support Sizing Function pointer✔
    6. Incorporate Function Pointer to PODM by creating a setSizingFunction()✔
    7. Replace the test sizing function with the Adaptivity function that was created by Christos (The algorithm is described here)✔
      1. Understand that the current implementation supports negative weights✔
      2. Change the current implementation to use the minimum-maximum edge length of the element instead of its volume✔
      3. Identify an issue of checking sample points outside the image and solve it according to Christos's suggestions✔
  7. Separate the interface, the IOs and the filters from PODM✔

Spring 2020

  1. Create a general PODM driver✔
  2. Set a warning if delta > min-spacing * min-dimension-size / 5✔
  3. Set a default delta: ✔
    1. if sizing-function is off then default delta = min-spacing * min-dimension-size / 100 ✔
    2. if sizing-function is on then default delta = min-spacing * min-dimension-size / 20 ✔
  4. Remove labels array if there is only 1 label of interest ✔
  5. Print a warning if a label is not recovered✔
  6. Add Numa flag in CmakeLists.txt ✔
  7. Add binary file support ✔
  8. Improve Text output ✔
  9. Create label-filter to filter labels of images properly ✔
  10. Remove redundant volume threadhold checks that don't contribute anything to the meshing procedure ✔

Summer 2020

  1. Update ITK to v5.0.1 ✔
  2. Update VTK to v9.0.0 ✔
  3. Update Boost to v1.72.0 ✔
  4. Compute Mesh in Parallel (TODO)
    1. Create GetCleanMeshParallel function ✔
    2. Remove duplicate allocation ✔
    3. Speed-Up File:parallel-mesh-results-speed-up.png
      1. It should be noted that the threads (7-12) are hyper threads, so they are not as powerful as the first 6.
    4. Test it
      1. Locally ✔
      2. On Turing (TODO)
  5. Save the label of a cell after its creation and Remove the expensive label recalculation in GetCleanMesh/GetCleanMeshParallel✔
  6. Control min edge and max edge using a percentage of the diagonal ✔
  7. Remeshing by changing sizing-function's image and not Mesher input image (TODO)

Fall 2020

  1. Produce the Voronoi Mesh out of the Delaunay (TODO)
    1. Check what TetGen does (TODO)
    2. Research conversion methods (TODO)
  2. Μultiple δ (TODO)
    1. Implement multiple δ (TODO)
    2. Use different δ values (possibly uniform based) according to the surface of each label of a segmented image (TODO)
  3. Smoothing (TODO)
    1. CGAL Sources:
      1. https://doc.cgal.org/latest/Mesh_3/index.html#fig__mesh3protectionimage3D
      2. https://doc.cgal.org/latest/Mesh_3/index.html#fig__mesh3HybridDomainExample
      3. https://doc.cgal.org/latest/Mesh_3/index.html