Voxel-based finite element modeling

Hy everybody!
I’m only a beginner in segmentation and meshing models and I have one precise question: how can I create voxel-based FE model.
I’ve already read some articles dedicated to this topic (https://github.com/lassoan/SlicerSegmentMesher; https://discourse.slicer.org/t/generate-a-voxel-based-mesh/2159; Image to Finite Element Mesh: An End to End Workflow) but haven’t found some algorithm how to do it.
I need to create bone-cartilage model according to its density (based on Housefield units) and to get multi-colored mesh.
In older article, there is an algorithm of how to do it using IA-FEMesh extension, but in current version of 3D-Slicer this extension isn’t available. I’ve installed two extensions designed for my purpose (CleaverTetMesher and SegmentMesher). I can create only one-colored mesh using these tools, but I need multi-colored (like at picture).
Can anyone explain me how to do it or give some links for tutorials.
Thanks in advance!!

Once you have created a mesh using Segment Mesher module, you can use Probe volume with model module to assign Hounsfield unit to each point of the mesh. If you want to see the scalar values then choose to show it in Models module / Scalars section.

There was a bug with unstructured grid reading in Slicer Preview Release but I’ve pushed a fix today, so tomorrow’s version should work well.

1 Like

Thank you so much for youк advise! It works!
But I have other questions)
do I need voxel-based FE model (it means each mesh segment corresponds to each specific voxel and the number of mesh elements is the same as a number of voxels) or I may just use fine mesh model (with scale-parameter =0.8 or 0.9) and each mesh element will get an average value of all included voxels?
is it possible to create a uniform mesh-model (it means that all elements have the same sizes), because in my model all the elements are different (example on a picture).

1 Like

You can configure Cleaver’s element sizing very flexibly. You can even choose to use constant element size.

If you don’t need a smoot surface mesh then you can create an unstructured grid from an image by using vtkThreshold filter (few lines of Python code). If you need cell data (scalars associated to a volumetric mesh element) then you can run vtkPointDataToCellData on your mesh.

1 Like

Thanks a lot for your help!!!

1 Like

Good afternoon!
I’ve tried to create one-size elements using ‘Segment Mesher’ but failed(

Can you advise me, please, which criteria I should change to make elements uniform?

I guess you have run out of memory. You may need to increase --scale value to make the mesh smaller or increase virtual memory size in your operating system settings.

If you really just want to have an unstructured grid where each voxel is an element then you can use vtkThreshold filter (but I’m not sure if this kind for mesh is suitable for FEA).