Calculate thickness of thin muscle

Hi!

I want to measure the thickness/distance between the inner and outer boundary of a muscle that I have segmented. I have followed the workflow from this link: How to analyze the thickness of the model

Now, I am not sure of how to interpret my result… Does the different colours illustrate different thicknesses, e.g. the red color is the thickest and the blur color is the thinnest?

I also want to know the specific thickness (as a value, not a colour) in a certain position in the muscle, how can I achieve this?

Thanks in advance!

Coloring does not seem to correspond to thickness.

Which method did you try? (several workflows are described in the referenced page)

If you compute a skeleton labelmap: Since the segmented structure is very thin compared to its extent, you probably need to use a finer resolution labelmap than the one generated by default.

You may also give VMTK extension’s centerline extraction a try (as a preprocessing step, it extracts Voronoi diagram, which is a kind of medial surface and its thickness).

You can get numerical reading from values associated with scalar points with a short Python code snippet as shown here.

Thanks for your reply, and sorry for the unclearness. I tried your described workflow here:

And since I followed your method, I got similar results as in your example, except for the thin green line that your example has but not mine… I suppose that is the actual medial surface? If so, what does the colours red, green and blue illustrate?

I will look into your tips, thanks!

Hi, I am still trying to figuring out what my result of your workflow (How to analyze the thickness of the model) means… What does the colours mean and how do I get the exact medial surface (that I assume is the thin green line in your example) ?

I am also trying to compute a skeleton labelmap, but I can’t find it in “Representations” under Segmentations-module, even if I have installed SlicerRT to get additional representations. How can I add this skeleton labelmap?

Thanks!

The green points are voxels of the skeletonized labelmap, which are indeed points of the medial surface (points that are at the same distance from nearest boundary points). You can show them by displaying the “Extract skeleton” module’s “Output Image” in a slice view.

1 Like

Thanks for your reply, I sort of managed to get the skeleton but I do not get a complete curve of the skeleton (I just get these dots) with these parameters in “Extract skeleton” module:
Skeleton type: 1D
Do not prune branches: yes
Number of points: 9000000

How do I get a complete curve?
And if I achieve this curve, how do I get the thickness in your described way?
You mentioned:

Am I supposed to use the Ruler and just measure the distance, or is there a more accurate way to measure the thickness?

Hi, I have previously posted a question about how to measure the thickness (Calculate thickness of thin muscle) but did not come to any solution. I have followed this workflow: How to analyze the thickness of the model and I got the result as in the attached image. It seems like the inner and outer boundary are colored, but where is the medial surface? I need it so that I can measure the thickness (distance between inner and outer boundary) of this segment. After following the workflow, what does the colors indicate?

Thanks in advance!

If you just need surface thickness then using the method described here should work (probably you just need to increase resolution of your distance map).

If you need medial surface then there are a few options, for example:

Yes, that is the exact method that I have used and what is shown in the image in my first post.

Now I want to get a value of the thickness, which I tried to do with your suggestion:

And I got these values:

The values does not make sense; there are three values and some of them are negative. I just thought I would get exact one value for the thickness? How are the printed values related to the thickness?

Thanks for the help!

Your mesh can contain many different arrays associated with points and cells. The example prints out surface normal direction - see this line:

...
modelPointValues = modelNode.GetPolyData().GetPointData().GetArray("Normals")
...

If you want to print the surface thickness, change Normals to the array name that contains distance. You can see list of available arrays in Models module / Display / Scalars / Active Scalar.

Thank you very much for your help, I changed the array name to what I think contains the distance (array name:“ImageScalars”) and now the values makes more sense. However, I am not sure if the printed value is the actual thickness. If I move the cursor in range A, then then value is 6.7 and if the cursor is in range B, then the value is 7.4. None of these values are close to the actual distance, which I measure with the Ruler to be 0.8811mm.

Do you have any idea why these values are so off from the measured distance? Is it correct if range A is the distance between the medial surface to outer boundary while range B is the distance between the medial surface and the inner boundary?

Yes. As I wrote before, in the other topic that you opened on this question, you need to increase the resolution of the segmentation (default resolution is not enough for your model, as it is very thin relative to how large its extents are). See step step-by-step instructions here: https://slicer.readthedocs.io/en/latest/user_guide/modules/segmentations.html#import-an-existing-segmentation-from-model-surface-mesh-file (“If the model contains very thin and delicate structures…”).

For accurate thickness estimation, spacing of the internal binary labelmap representation of the segmentation should be at least 5-10x smaller than the thickness of your surface.

If you find that oversampling value that gives you accurate enough results surpasses capabilities of your computer then you can use other proposed approaches (VMTK’s Extract Centerline or SlicerSALT’s skeletal representation), which do not require rasterization of the model.

Thank you, I really appreciate all the help that I have got from you. I will now try to increase the resolution of the segmentation with your suggestions!

1 Like

Hi @lassoan , apparently the link which describes surface thickness measuring method using python, is no longer working. Could you please attach the updated link? really appreciate the help.

It is at the updated page that link points to:

https://slicer.readthedocs.io/en/latest/developer_guide/script_repository.html#get-scalar-values-at-surface-of-a-model

1 Like