How to segment blood vessels from bones?

Hi, I’m quite new to this field so I kinda lost in here.

I’m trying to do blood vessel segmentation and center-line extraction from 3D CT images (DICOM format).
(chest, abdomen, leg CTs usually)

So far, below is what I could do almost everything by hand: I first used threshold to segment bones & vessels from the others and then manually erased bones for every slice so that only vessels are segmented.


I want to do this automatically as much as possible, and the first problem for me is how to get rid of bones away in a smarter way after thresholding. (Although there might be many problems to solve)

Is there any good way to do it?

  • The CT image that I have is acquired using contrast agent and I know what it is from the image files.
    Can I use that information for segmenting between vessels and bones?
  • Or is there any good algorithm that is already implemented so that I can readily use for this purpose?

I have been desperately looking for examples with similar problems but in all the examples that I could found there were no bones in the problem and thus segmentation was done somewhat simply.
(one of the examples I found: [])

I tried vesselness filtering in the VMTKExtension for the 3D Slicer, but what I get was like below.


Could you give me some advice on this?

  • Is this behavior normal? (= Is vesselness filtering not good to separate between vessels and bones?)
  • Or, can I get clear result if I use it correctly?
    (Actually, I don’t know what it actually does and how to use it, as I couldn’t find documentation on this)

Thank you very much for any help and thoughts :slight_smile:

Thanks for the detailed and well illustrated description of your question!

I’d keep trying with VMTK, it is for this very purpose. If you put the seed point inside the vessel, then it shouldn’t go out and grow a region within the bones as we can see in the second screenshot.
Note that the output of the vesselness filtering step is a volume containing probabilities between 0 and 1 so to get a definitive segmentation you need to threshold it. Try setting the vesselvess volume as foreground image in the 2D viewers and change the window/level or threshold in the Volumes module for that volume (need to select the volume first). See if you can get a scalar range where it shows up nicely.

This is what I got with the CTA cardio sample dataset with 4.10:

1 Like

You may also use Simple Region Growing with a few Fiducial points to create a Label Map. The latter can be converted to a Segmentation object and then you may create the 3D model in the Segment Editor. Alternatively, you may use Model Maker with the Label Map to create a model.

Here is a result with CTA-Cardio, two seeds and default Simple Region Growing parameters.


I tried VMTK of old, it worked very well with normal blood vessels, but not with severely diseased ones.

1 Like

You can also use Fast marching (in SegmentEditorExtraEffects) or Grow from seeds effects.

If the only problem is separation from bones and bones are not connected to vasculature, then you can also use Islands effect. For example select “Keep selected island” method and the click on the vessel in one of the slice views - it will remove all disconnected segments, such as bones.

1 Like

Here is the result with Fast Marching :


This method is quite direct, I admit I was pleasantly surprised. Just a few Level Tracing seeds and it computes right away. Now it’s much resource consuming as it always compute 100% Segment Volume on initialization. It consumed 5 over 8 GB swap space without prior cropping of CTA-Cardio ! Perhaps it’s internally mandatory. An initial result would appear much faster it could start at 5%.

Thanks for this useful guidance.

1 Like

I’ve checked the memory consumption of Fast marching and it was indeed unreasonably high. The root cause was a memory leak that I’ve now fixed. The fix is available in nightly Slicer version that you download tomorrow or later.


Wow, thank you so much for your detailed answer. I am a bit relieved by the fact that I was doing wrong and my poor result was not the fault of VMTKExtension :laughing: I’ll try with the CTA Cardio as you suggested. I never expected I could get such a kind response. Thank you so much :grinning:


Wow I am very surprised by the result. I will definitely try all of your suggestions. I feel like I kinda found some hope here. Thank you so much for your detailed feedback :grinning:

1 Like

Thank you so much for your help! All of suggestions and bug fix are a great help to me. I am very amazed at such a fast and kind response on an open source platform. :grinning:


This indeed fixes the memory issue. Thanks.

1 Like