3D reconstruction from 2D slices

I’m trying to reconstruct a 3D volume from the 2D images provided in this study (image source).
Post reconstruction, I’d like to filter only blood vessels that range from 1-10 micrometers. I hope the lat part can be done in 3D Slicer.

I followed the instructions given here on “How to load data from a sequence of jpg, tif, or png files?”

However, I am not sure how to proceed after loading. I’ve selected the “Volume” tab. I’m not sure how to fill in the details for “Image spacing” in “Volume Information”.

Could someone guide me on how to proceed from here?

As explained in the FAQ link, image sequence formats such as tiff, png etc are not well suited for this type data, because they don’t store exactly the information you are looking for. This kind of information should be within the paper. If not contact the authors.

Moreover, they only provided the segmented and cropped binary images, so who knows whether the spacing is the same as original data set. So your best bet is the paper and then the authors.

As for the rendering you will need a fairly beefy GPU to rendering this, as it is about 6GB dataset. If you have GPU that doesn’t have enough GPU RAM, the render window comes blank (I have a laptop with a 4GB GPU so it was empty for me too). It worked fine for me, when I switched to CPU rendering option in the volume rendering module…

1 Like

Many thanks for your response. I too have a 4GB GPU on my laptop. Nvidia GeForce 940MX.

I switched to VTK CPU Ray Casting In the Volume rendering tab( I think this is selected by default). Physical memory is 8GB)

I navigated to “Volumes” option and I have the following settings. Active volume is selected automatically. For now, I am using the default Image Spacing. I will write to the authors and find out the actual spacing. In the paper it is mentioned, “To prepare the image stack for
importation to Imaris, the image stack file was converted to 8-bit, noise was filtered out using a (3×3×3) median filter, and the pipette image and other artefacts were subtracted out”

Could you please suggest how to proceed from here?

Your screenshots does not show 3D rendering. When you set the method to CPU Raycasting, did you also click on the little eye icon that enables the 3D rendering in the Volume Rendering module?

I can’t think of a effect in the segment editor that will let you choose to retain only a vessels of certain diameter and less. Perhaps VMTK extension does it. Also there might be other methods (using python) to achieve what you want to do…

Yes, VMTK centerline computaiton module provides diameter values for the extracted vessel tree, which can be used for selectively truncating the model. However, the image above is such a comlex and irregular vascular “tree” that usual method might fail.

If the goal is to just extract vessels of a diameter range then it is very easy to do. If you have a segment that only contains vessels then you can use the Margin effect to shrink diameter of all vessels (this will make all vessels that have smaller diameters than the erosion disappear completely) then use the same effect to grow them back to the original diameter. This results in vessel tree that contains vessels that have diameters over the margin size (or twice the margin size - you need to check the details). To remove large-diameter vessels, you first find them using the same method, then use Logical operators effect to remove them from the image.

Thanks a lot for the response. I clicked on the little eye icon and I could see the boxes in red, green and yellow windows.

However, I’m not sure how to generate the 3D volumes after this. I selected the "Vector to Scalar Volume " tab. The following is displayed. But I don’t see the “Apply” highlighted. I’m not able to select anything in “Input Vector Volume”.

Thanks a lot. I’ll have a look at VMTK

Your image stack was in tiff format. Slicer imports that as a normal scalar volume, you do not need/have a vector volume hence the field is empty. The reason you are not seeing a 3D rendering when you do a volume rendering, is because the volume exceeds the capability of your GPU. Try switching to CPU raycasting (will be slow) or crop and/or downsample your volume using CropVolume module.

1 Like

You might be also forgetting to turn on the little eye icon next to the volume name in the volume rendering module (it is turned off in the screen capture you provided for the cpu rendering issue).

1 Like

You can also try enabling/disabling depth peeling in the 3D view controller:


Could you please explain if it is possible to do the above using VMTK’s/ 3D Slicer’s python interface?

You don’t need VMTK for filtering vessels by their diameter (just use Segment Editor module as described above).

If your vessels are not segmented yet then it is a more complicated problem and the solution depends on what kind of images you have, what vessels you need to segment, and for what purpose. If you need help with this then please create a new topic for it and give details and preferably example images (at least screenshots).