Model (.VTK mesh) to Segment or Label Map for Remeshing

Hello (and happy holidays to all),

Our group is using 3DSlicer to reconstruct DICOM-datasets, mesh them using the Segment Mesher module (and Cleaver), and running a simulation using FEBio (more here).

For some simulations, remeshing is done using tetgen externally.

We were wondering if it is possible to import a mesh (.VTK) as a model (with multiple materials) and reconstruct a segmentation or a label map that could then be re-meshed using the Segment Mesher module and Cleaver.

Thank you!

Yes, sure, you can import each mesh (model node) as a segment into the segmentation node and do your workflow as usual.

If the mesh contains several closed surfaces, each with a different associated scalar value then you can use that scalar value to extract segments one by one, using vtkThreshold filter.

Andras,

Thank you for your response. I think I may need some additional help though.
This is what I have done;

  • I imported the VTK model. Keep in mind that, in my case, the VTK is an a full volumetric mesh and follows the same 4.2 format exported by 3D Slicer.

capture_1

  • Then I run the VTK filter, using the Python terminal, to split the mesh into sub-meshes.

capture_2

  • Convert each sub-mesh or sub-model to a segmentation node

capture_3

Here I can mesh each segmentation, but not all of them combined. Is there a way of combining the segmentations? Or am I supposed to split the model after converting into a segmentation node?

Thank you!

You need to use at least the latest Slicer Stable Release to import a volumetric meshes into segmentation node.

1 Like

@lassoan,

Thank you! Turns out I had the newer version install but was opening 4.10 from the start window… :sweat_smile:

Here is the current working process;

  1. Import Volumetric Mesh as a Model (‘Model_1’ in Figure 1 below)

  2. Use the Python Interactor to separate the input Model into sub-meshes or separate models ('Model_1_# in Figure 1 below)

  3. Right-click on either of the sub-meshes or separate models and Convert model to segmentation node… (‘Model_1_#-segmentation’ in Figure 1 below)

  4. Repeat the previous step until all sub-meshes or separate models have been converted to segmentations

  5. Aggregate all of the segments in a single segmentation by simply dragging and dropping. Then, delete the empty segmentations. (In Figure 1, the only segmentation left is ‘Model_1_#-segmentation’ )

  6. Finally, use the Segment Mesher module to generate a volumetric mesh from the new segmentation

Figure 1;
capture_all

1 Like

Here is something else I found…

When remeshing a segmentation created this way, there is no master volume associated with said segmentation, which may produce some weird artifacts in the Cleaver mesh. I know this is still a little bit of a preference/opinion of mine :sweat_smile:, but you this example I posed here results in a mesh with a min dihedral angle = 1.75686 (Figure 1)

capture_all_flurry

To avoid this, it is possible to;

  1. Import your Bounding Volume (‘prone_median’ in Figure 1 and 2)

  2. Create a NEW Segmentation, specifying the Master Volume

  3. Copy all of segments from the OLD Segmentation (‘Model_1_#’ in Figure 1 and 2)

  4. Create an equal number of NEW Segments and used the Logical Operator>Copy function to copy each OLD into each NEW corresponding segment (‘Segment_7,8,9’ in Figure 1 and 2)

STEP 4 May be an overkill, but using the same segments did not work for me at first, so I just copied them and it worked

  1. Use Segment Mesher to generate a new volumetric mesh using Cleaver (Figure 2)

capture_all_flat

The resultant mesh had about 1,000 more tets, but the min dihedral angle = 4.10604!!!

I hope people find this useful,

1 Like