Internal:PODM 3D

From crtc.cs.odu.edu
Jump to navigation Jump to search

Documentation

  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 a User Manual for PODM 3D and Tessellate2D within the fields of Medical Image Computing and Computational Nuclear Femptography ✔

Execution Examples

  1. Create meshes for the Computational Nuclear Femtography part of CRTC_I2M_Suite Documentation. CNF Example Meshes ✔
  2. Create meshes for the Medical Image Computing part of CRTC_I2M_Suite Documentation. Medical Imaging Example Meshes ✔

Code Changes

  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)✔
    8. Understand that the current implementation supports negative weights✔
    9. Change the current implementation to use the minimum-maximum edge length of the element instead of its volume✔
    10. 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✔
  8. Create a general PODM driver✔
  9. Set a warning if delta > min-spacing * min-dimension-size / 5✔
  10. Set a default delta:
    1. if sizing-function is off then default delta = min-spacing * min-dimension-size / 100✔
    2. if sizing-function is off then default delta = min-spacing * min-dimension-size / 20✔
  11. Remove labels array of output mesh if tissues of interest < 2✔
  12. Print a warning if a tissue is not recovered✔
  13. Add Numa flag in CmakeLists.txt ✔
  14. Add binary file support ✔
  15. Improve Text output ✔
  16. Create GetCleanMeshParallel function ✔
  17. Identify places in the code where δ varies with regards to background values (TODO)
  18. Test if multiple δ works using synthetically generated image data (TODO)

Adaptivity Results

  1. Podm Result of Gagic Data image with volume grading on and δ=6, minimum Volume Size = 0.5, limit = 0.1✔
    1. 2D (Triangle): Nt2DAdaptivity (Done by Christos)
    2. 3D (PODM): Nt3DAdaptivity (Done with Christos)
  2. Produce an Animated Adaptive Procedure video http://www.cs.odu.edu/crtc/videos/PODM3D.html ✔
    1. InputImage -> Input Image:
    2. ImageSegmentation -> Image Segmentation
    3. AdaptiveMeshing -> Meshing Procedure. This is a gif which is visible here: https://crtc.cs.odu.edu/images/8/89/AdaptiveMeshing.gif
    4. AdaptedMesh -> Adapted mesh
    5. LinearInterpolation -> Linear Interpolation