Subtract baseline scan


We have imaged a mouse before and after injecting a vascular contrast agent.

Looking to subtract the before-scan to eliminate the skeletal structure and amplify the arteries for segmentation

Tried the subtraction scalar volumes routing however the resulting image is all grey with a silhouette of the body issue, skeletal structures. Noted there are other masking and registration modules.

As not done such subtraction before, would appreciate any and all guidance on how to perform this using Slicer.



You need to adjust brightness/contrast after subtraction. Left click+drag over the slice view or go to Volumes module and edit window/level in Display section. If you see artifacts due to small displacements between the two scans then you may use “General registration (BRAINS)” module (in SlicerCore) or “General registration (Elastix)” module (in SlicerElastix extension) to align the scans before subtraction.

1 Like


There is no registration required as the mouse was not moved between the two scans so the image locations are practically the same.

I think there’s an issue with how I am doing the subtraction. See attached images or

There are three images, pre, post and subtract. The Subtract is pretty much all grey whereas the mouse and structures are quite defined in the pre & post.



The subtracted image looks correct. You just have to adjust the window/level (brightness/contrast) as I described above.

Cool. Just realised I was subtracting in wrong order ie ended up with Pre - Post rather than Post - Pre

Am re-doing.

Can you advise what Interpolation order controls ?



We did a subtraction using MATLAB of two tiffs saved from slicer of Pre and Post and the resulting image has higher contrast, in line with what we were expecting to see,

Could you advise if the subtraction module in Slicer can produce similar contrast or that requires further processing after subtraction in slicer?

Thanks again,


No further processing should ne needed, just adjusting the window/level to have higher contrast. If you share an anonymized data set through dropbox/onedrive/gdrive and post the link here then I can have a look.


Great, Have copied both sets of DICOM files on to google drive OR

Two directories with DICOM directories in each.

Let me know if you need anything else.

Many Thanks


I’ve checked your images and I can confirm that subtraction works as expected. A couple of comments and recommendations:

  1. Your images are very high resolution and very noisy. Before you can analyze your images, most likely you need to apply smoothing filters, so you won’t be able to benefit from high frequency details in your image but you still have to deal with the large image size (consuming lots of memory, taking long time to compute, etc). If you can change your imaging protocol, I would suggest to try to lower the resolution and/or increase dose. If that’s not feasible, then use Crop volume module to reduce image extent and resolution of your input volumes (Spacing scale = 2.0x, use the same ROI on both pre and post volumes).

  2. After you performed subtraction, go to Volumes module and set W: 500, L: 100 (you can left-click + drag on the image to adjust the values). Don’t forget to select the difference volume as Active volume at the top before you adjust the W/L values. You should get something like this:


  1. Even if nothing supposed to be moving between pre and post images, typically there is some motion, which causes very visible artifacts in the difference image. You can use Slicer’s deformable registration modules to compensate motion. I would recommend “General registration (Elastix)” module (in SlicerElastix extension) to align the pre/post image before subtraction.

Difference image without motion compensation:

Difference image with motion compensation:

  1. For 3D visualization, volume measurement, etc. you most likely need to segment the image. You can do that using Segment Editor module. Use the difference image as master volume, select Threshold effect, approximately 100 as lower threshold, and click Apply. Then click Show 3D to show the reconstructed structures in 3D. There will be always small, isolated artifacts that you can remove by Islands effect’s Keep largest island method (removes all disconnected regions) and/or remove unwanted parts with the Scissors effect manually.

Show 3D - before Islands effect (difference image computed without motion compensation):


Show 3D - after Islands effect (difference image computed without motion compensation):


Show 3D - after Islands effect (difference image computed with motion compensation):


Rotation view (created by Screen Capture module):



Wow Andras, thanks for that. You answered the some other questions we were starting to have once we had resolved how to subtraction !

Lowering scanning resolution is not ideal as the carotid we are interested in are only 500um in diameter. However we will be reducing the actual ROI (scanROI) that we scan. Also using slicer crop ROI (cropROI) to eliminate bulk of the image captured was an idea we had. We will be able to take advantage of cropping even in the refined scanROI at imaging as we are only interested in the carotids on either side of the trachea.

However we weren’t too sure how we can ensure the cropROI created from Pre and Post scans are of exactly the same location ?

Is there a trick to do ensure both are exactly the same that or is that by eye ?

Ultimate aim is to segment the carotids to generate STL and centerline for CFD & FSI modelling. Generally familiar with that process though the info you mentioned for segmenting will improve the approach we had tried before. Will forward the outcome for your review and in case it helps others.

Cheers, much appreciated !


Use the same ROI node and then the images will be cropped exactly to the same size. If you register them after cropping then small differences do not matter anyway, as the moving volume is always resampled at the end to the grid of the fixed volume.

Segment Editor module creates surface mesh (that can be saved as STL), just export it to a model node after the segmentation is completed. VMTK extension can segment vessel and extract vessel centerline automatically.