Documentation/Labs/Surface Toolbox update

From Slicer Wiki
Revision as of 19:48, 29 May 2019 by Bpaniagua (talk | contribs)
Jump to: navigation, search
Home < Documentation < Labs < Surface Toolbox update


Overview

As part of the SALT project we would like to revamp some of the existing functionality in MeshMath into the SurfaceToolbox. We will be hiring a summer intern to work on this over a couple of months this summer.

Team

  • JC Fillon-Robin
  • Bea Paniagua
  • Jared Vicory
  • Andras Lasso
  • TBD engineer

Definitions

  • KWMeshVisu: Legacy mesh viewer from the Styner Lab.
  • Types of Mesh Operations:
    • Multiple Mesh (2+)
    • Single Mesh
    • MeshToVolume
    • MeshScalar to Mesh
    • MeshScalar to MeshScalar
    • MeshScalar Operation
    • Mutliple MeshScalar

Initial discussions

We will be potentially implementing individual CLIs for each functionality in MeshMath, and those will be plugged into the Surface Toolbox.

Current MeshMath functionality

Name Description Type Keep Note
subtract Subtract mesh from inputmesh, write a KWMeshVisu readable text file PairWiseMesh X mark.png This functionality is currently available through ModelToModelDistance
magnitude Magnitude of the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file ? X mark.png It seems this is very specific to a certain application
scaleMVA Scales the input metaArray file (mvh/mva) and writes a KWMeshVisu readable file ? X mark.png It seems this is very specific to a certain application
scaleMesh Scales the input mesh file SingleMesh Check.svg
avgMesh Compute the average mesh from inputmesh file1, file2... MultipleMesh Check.svg
ave Compute the average vector field from file1, file2... generated with -substract MultipleMesh / ScalarMesh Operator Check.svg Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map.
normave Works as the \"-ave\" option, but the average vector are projected on the normal at each point MultipleMesh / ScalarMesh Operator Check.svg Turn into a new MeshScalar operator. Given several Meshes with MeshScalars that are named the same way, it will allow averaging them and creating a new scalar map.
InvVect Invert all the vectors created with the -substract option and write a KWMeshVisu readable file MeshScalar Operation Check.svg
magdir Compute the signed magnitude of each of the vector from the vector field.(+ if in the normal direction, - otherwise) SingleMesh X mark.png This functionality is currently available through ModelToModelDistance
magNormdir Compute the signed magnitude of the normal projection of the vector field SingleMesh X mark.png This functionality is currently available through ModelToModelDistance
applyVec Deforme the mesh according to the vector field specified as input SingleMesh Check.svg
meshValues Find the points and cells in a mesh. The outputfile is a textfile with the values SingleMesh Check.svg Export through CSV
avgGaussMesh <Meshfile1> <Meshfile2> ... -gaussMeshPara <mean>,<stdev>,<val1>,<val2>,... Compute the gaussian average for mesh files. The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files MultipleMesh Check.svg
avgGaussKWM Compute the gaussian average for KWMeshVisu files. The first parameter is the average, then the standard deviation of the Gaussian model and the rest are the values associated with the files MeshScalar Operation Check.svg See "ave"
alignMesh Align all of the meshes to the inputmesh (== MeshFile0) using Procrustes alignment [-scalingOn] MultipleMesh Check.svg Fix the scaling, give an option to export the scaling factors associated with the mesh (so it can be reverted via scaleMesh)
alignMeshICP Align all of the meshes to the inputmesh (== MeshFile0) using IterativeClosestPoints (no correspondence required) MultipleMesh Check.svg
BadTriangle Find the bad triangles in a Mesh. The <thresh value> is the value of the threshFactor to calculate the standard deviation for the bad triangles. The output is a KWMeshVisu text file with the values of the average of the triangles of the mesh SingleMesh X mark.png Probably not keep since this is the same than "Clean" in the SurfaceToolbox
extraction To extract an attribute.The Input is the Mesh, the extractFilename is the attribute image and the Output is a KWMeshVisu text file with the attribute extraction [-extractClosest]: extract closest attribute [-nn]: nearest neighbor interpolation (default: linear) MeshToVolume Check.svg
value Extract the 5th column from a textfile and write a KWMeshVisu file with the values obtained SingleMesh Check.svg Turn into "import from file" or something similar. This new operation would import a scalar field from a csv file into a mesh
subKWM Difference between 2 KWMeshVisu files MeshScalar Operation Check.svg See "ave"
MaxColor Compare each point in every files, find a max for every points, keep 5% near the max, the other values will be 0 MeshScalar Operation Check.svg Transform this into a Threshold scalar map
dist_absolute Absolute distance map between KWMeshVisu files MeshScalar Operation Check.svg Transform this into something better, something that can operate over several scalar maps
dist_relative Relative distance map between KWMeshVisu files (values between -1 & 1) MeshScalar Operation Check.svg Transform this into something better, "normalize scalar map", and give the option to set up the range
label Separate every labels, find the mean... MeshScalar Operation X mark.png This will be changed into a different module. The module will list all the scalar fields in the Mesh
-color -val <number_of_label>,<value_label> To change the value of labels to see the evolution with KWMeshVisu. MeshScalar Operation X mark.png This will not be kept as it has legacy operations
-first <textfile> Convert a column file into a line file with a comma between each value. Random X mark.png This will not be kept as it should not be here.
-MC2Origin Convert a column file into a line file with a comma between each value. SingleMesh Check.svg
-avg/median/min/max/per1/per99OneKWM Obtain descriptive statistics from scalar fields in a single VTK mesh SingleMesh / ScalarMesh Operation Check.svg Keep with modifications, arguments should be the scalar field name and the operation to perform. Might revisit later, most of this functionality is in MeshStatistics
-FillHole Fills up a hole in a open mesh. SingleMesh Check.svg Slight change it should close all the open holes until there are no more
-BordersOut Outputs the borders of a mesh (if there) SingleMesh Check.svg
-isOpen Gives back an integer defining whether the mesh is open or not SingleMesh X mark.png Probably not keep, will revisit later
-CleanMesh Re-mesh the input mesh and gives back a new clean mesh without degenerated triangles SingleMesh X mark.png Already in the surface toolbox
-SmoothMesh Gives back a Laplacian smoothed surface SingleMesh X mark.png Already in the surface toolbox
-FilterNormals Changes homogeneously normals of the polygons in a mesh SingleMesh X mark.png Already in the surface toolbox
-StatsROI Process a KWMeshVisu file, given a ROI Mask MeshScalar operation X mark.png Already in Slicer through Pick and Pain and MeshStatistics
-KWMToPolyData Writes a KWM scalar field (N Dimensions) into a PolyData Field Data Scalar to visualize in Slicer SingleMesh Check.svg Keep with modifications, the scalar field can be input in a csv, it does not need to be a KWM file
-FSAscData Extracts a curvature/thickness etc information from a FreeSurfer style scalar file and adds it as attribute to the vtk mesh for visualization. FS format is line-by-line, no header, with each line 'point-id vertex-x vertex-y vertex-z scalar-prop SingleMesh Check.svg Check in with @styner to see if he can provide data to test this, or if he wants to keep it
-surfaceArea Computes surface area in a txt file SingleMesh Check.svg Keep with modifications, we should create an option to extract vtkMassProperties from a single Mesh including surface area and volume
-variance Compute variance across population of scalar fields Multiple MeshScalar (multiple Mesh) Check.svg Keep with modifications, we should compute variance in a scalar field given the scalar field name and a collection of meshes
-GetCurvatures Gets an assorted set of curvature measurements: SingleMesh Check.svg Keep with modifications, embed the attributes as scalar fields in the mesh
-particleConsistency Generates new particle files where fliped particles does not appear MultipleMesh X mark.png ShapeWorks functionality, do not keep


   // bp2010 GetDirectionFeatures
   std::cout
   <<
   " -GetDirectionFeatures ... Generates three KWM loadable files that have directionality features with respect to X, Y and Z directions"
   << std::endl;
   // bp2010 GetDirectionFeatures
   std::cout
   <<
   " -closestPoint <InputAttributeFile1> <InputMesh2>   Computes interpolated attribute file (output file) for second mesh using closest point interpolation between two input meshes"
   << std::endl;
   std::cout << " -extractVertices <YLocationAttributeFile.txt> <ZLocationAttributeFile.txt>  Extract points and write 3 different files listing respectively X, Y and Z values"
   << std::endl;
   std::cout << " -mean <AttributeFile2> <AttributeFile3>... Compute mean scalar attribute file (assuming same number of vertices)" << std::endl;
   //cx2011 cart2bary
   std::cout << " -cart2bary <vtkPointFileIn> Project each point in <vtkPointFileIn> onto the <inputmesh> and then calculate the Barycentric coordinate of the projected point, output to <OutputFileName>" << std::endl;
   //bp2011
   std::cout << " -attSTD <attribute_file2> <attribute_file2> ...<attribute_fileN> ... Compute std for a collection of vector or scalar files" << std::endl;
   std::cout << " -VTKtolpts  ... Create a particle file out of a triangulated VTK mesh" << std::endl;
   //bp2012
   std::cout << " -relaxPolygons iterations... Mesh relaxation based in vtkWindowedSincPolyDataFilter" << std::endl;
   std::cout << " -decimateMesh <target reduction> ... Mesh decimation, reducing the number of points. Target reduction is a value from 0..1 that indicates in what % vertices should be reduced" << std::endl;
   //mst2013
   std::cout << " -listPointData    lists info about all the VTK point Data in the vtk file" << std::endl;
   std::cout << " -PointDataOp <name> <op> <val>   <name>: name of point data, " << std::endl

<< " <op>: [threshBelow | sub] threshBelow: set to 0 all data below <value>, sub: subtract value" << std::endl;

   //bp2013
   std::cout << " -translateMesh <tx_DimX> <tx_DimY> <tx_DimZ> ,  translates a mesh for a given amount " << std::endl;
   //bp2015
   std::cout << " -lookupPointData <csv_lookup> <scalar_field_name>,  substitutes scalar values in a given scalar field based on an input lookup " << std::endl;
   //bp2016
   std::cout << " -volumePolyData,  provides volume count for the PolyData through the std output. NOTE: Only in closed surfaces." << std::endl;
   
   std::cout << " -verbose                   Verbose output" << std::endl;
   return 0;
   }

Path forward

Testing data

TBD