Segmenting Non-Vascular Tubular Structures in MRI

Hello everyone, I’m interested in hearing your suggestions on how to segment a structure similar to the one in the attached image. This structure is part of a tubular shape captured from an axial view in an MRI image. It’s worth noting that the structure may not resemble blood vessels, as the inner area is darker than the outer area. In my experience, vesselness filters work well for segmentation when the entire tube is bright, but in this case, the inner area is darker. I’d appreciate your insights. Additionally, I’m curious about the efficiency of your proposed solution on a CPU, as the frangi-3d method performs well on a GPU.

@Stephen_Aylward will probably have advice.

A few things to try (hard to tell which will work by looking at just one slice):

  1. invert the image so that the inside is bright, and then apply Frangi
  2. convolve the image with a matched filter (dark in middle, bright rim, darker further out), and then apply Frangi (the issue is that the filter should be oriented along the vessel, but if the orientation isn’t always the same, then you’ll have to use a circularly symmetric filter which reduces effectiveness).
  3. Use grayscale morphological filter (close) to fill-in the dark interior, and then apply Frangi
  4. Blur the image with a large scale kernel to cause dark interior to be suppressed by the bright surface (probably won’t work, but worth mentioning), and then apply Frangi
  5. Do a threshold connected components, seeded at the interior and selective to dark pixels and specifically excluding the bright rim values.
  6. Do a threshold connected component for the bright rim and then run morphological operators (close) to fill the interior hole.

I’d probably start with 5 or 6 - the challenge is the intensity inhomogeneities in MRI - causing the threshold range for “bright” and “dark” to vary throughout the image. There are some iterative connected components in ITK that attempt to capture the spatial variation (means and std devs) of intensities as they drift across an image, but what works and what doesn’t is very application specific, so experimentation is needed.

And of course…train a UNet to segment it :slight_smile: It actually looks like a feature that a UNet / CNN could be trained to identify without needing an excessive amount of data. There are some MONAI tutorials that could guide you through the process fairly quickly:

Hope this helps,

1 Like

Thank you, Stephen, for your excellent suggestions! I’ll experiment with each of them and provide an update.