VMTK vessel filtering not working

Mac build has been failing as far as the CDash history goes. Linux build was fixed by this nightly, but unfortunately Mac build kept failing.

You can’t just point to the source code to try it, binaries need to be built from source. A Slicer developer who uses Mac will need to look into the issue to fix it.

(To the devs: even if we can’t get the factory to build it, maybe we could get a build that we can upload to midas for the stable so that it can be installed by the users?)

1 Like

I’ve ultimately given up on using Slicer-VMTK, in part because of these ongoing issues, but I would be very interested to see a resolution to this.


I’m having the same issue using Slicer 4.10.2 on macOS.
Has this issue been resolved ?


@jcfr you fixed VMTK builds in the past, could you please have a look at it again? Maybe the issue is that .so files are not placed into the correct location - see http://slicer.cdash.org/viewBuildError.php?buildid=1641848

I identified the problem and this should be fixed by https://github.com/vmtk/SlicerExtension-VMTK/pull/17


Can anyone help me with vesselness filtering? my issue is that when I preview one fiducial point for arteries it looks okay but when I click on apply button it selects some part of skull as well with arteries. I am trying to extract arteries from CT Angiography. Any suggestions? I am not sure what I am doing wrong.

Vesselness filtering enhances visibility and contrast of vessels but usually does not perfectly extracts vessels from the entire image.

You may use vesselness image as master volume in Segment Editor to touch up results. For example, you can use Thresholding effect to do an initial extraction and clean it up by Scissors and Islands effects.

Thank you Andras for the quick reply. Can you direct me to any tutorial link through which I can extract arteries from DICOM images?

See segmentation tutorials here: https://www.slicer.org/wiki/Documentation/Nightly/Training#Segmentation

I have gone through all these tutorials already. But still I am unable to segment the arteries. Whenever I extract them from DICOM using thresholding and islands effect it comes with some part of skull as well. Is there any other way of extracting arteries other than thresholding?
Thank you in advance.

Maybe you’ve missed the segmentation recipes. This one is relevant for what you would like to achieve: https://lassoan.github.io/SlicerSegmentationRecipes/AortaMaskedGrowFromSeeds/

Thank you for the link Andras but it doesn’t solve my problem completely. I am attaching some pictures here. Actually grow from seeds effect is not able to extract all arteries. It is extracting only the once that I have painted and it is very difficult to paint each and everything. It was successful with Aorta because it was a single structure. Could you suggest something more?


You can start with simple thresholding, choosing threshold value so low that all vessels that you are interested are included. Then use that for masking and use Grow from seeds. This should allow very clear separation of bone from vessels.

However, if image is noisy and/or low-resolution, contrast filling is uneven, etc. then it may be hard to choose a threshold value that includes small vessels and you may need to do more manual work, e.g., with Paint effect or Draw tubes effect, with thresholding (Maskin settings / editable intensity range).

Do you have a baseline image without contrast? If yes, then you can subtract the background (with automatic motion compensation), which may help in segmenting smaller vessels and automatically remove bone.

I can you the .nrrd file of brain angio. Will you try this please? I have actually tried everything and still not able to do this.

Also I tried “subtract scalar volume” effect but my output volume still has bone data. So when I do thresholding it selects bone as well.

Link to my nrrd files:

Slicer does not have a dedicated tool for vessel extraction, even with contrast enhancement. VMTK does not help any better, at least in my experience.

You will find such tools with dedicated software made by CT OEMs. That’s what I see with radiologists in my health institution. They do every vessel segmentation nearly automatically, refining with mouse clicks on the vessels.

Slicer aims to be a more generic tool. The developer team does not have enough financial resources to target specific tasks by medical discipline in my view. I think you should accept that your aim cannot be reached.

For your specific problem, the image below shows the best I could get using Level Tracing/Flood Filling/Grow from seeds. As you can see, the arterial isolation extent is quite limited. The skull base is always merged with the internal carotid arteries in close contact to the bone. If the latter is segmented at the same time, it could have been isolated from the arteries at the skull base. But this implies a lot of painting before the final segmentation. This is not feasible in practice.

In general, contrast enhanced arteries are quite readily segmented when there is no intimate contact with bones and when they are of surgical diameters (fortunately!). Otherwise, distal arteries isolation remains a challenge.


Usually, you need to register (spatially align) the two volumes before subtraction. You can use Elastix extension for this.

Subtraction without registration:

Subtraction after registration:

For some reason, in recent years there have not been significant (funded) interest for developing/maintaining open-source vessel analysis tools. Maybe this is, as you say, because commercial tools already fulfill all the clinical and research needs. It is also possible that there are still unmet needs but there have not been research groups who could allocate grant funding for this.

Andras this looks great! Could you please explain how did you do that?

I’ve described all the steps in this segmentation recipe. Example of segmentation:

The only “manual” steps needed were choosing a few parameter values, so the whole workflow could be easily made fully automated - requiring only a single click and some optional parameter adjustments from the user.