The personal portfolio and ramblings of Preet Jassi


VascuSynth is a tool that generates 3D images of vascular structures at the prearteriolar level (before the capillaries) iteratively using an oxygen demand map. In addition to generating the vascular structure, VascuSynth elicits information about the vascular structure using Graph Exchange Language (GXL). The GXL specifies information such as bifurcation locations as well as the radii of the branches and the parent-child relationship. VascuSynth was designed for the validation of vascular structure segmentation and analysis algorithms.

A sample maximum intensity projection of a generated vascular structure

Fig. 1 A sample maximum intensity projection of a generated vascular structure.

The exact method that is used to generate the vascular structure is pretty complicated, and is explained wonderfully in the paper. In essence, what happens is we start with an initial root position. From this position, we select a random location in the volume that has high oxygen demand. We then create an initial branch going from the root position to the random point. The radius of the branch is calculated using accurate physical models and the oxygen demand/supply map is updated to reflect decreasing the demand for oxygen in the areas proximal to the branch.

After the initial branch has been created, we select another point at random that has high oxygen demand and create a branch from the midpoint of the initial branch to the new point. This creates a bifurcation point in the vascular structure. Note that the bifurcation point actually moves around and is generally never at the midpoint of a branch as that would not be realistic! The radii of all of the branches are calculated, and the oxygen demand/supply map is updated once again. This continues until we reach a maximum number of terminal nodes.

The cool thing about GXL is that it is really just XML. Using existing software, you can generate a graph that shows the tree structure of the vascular structures if you have trouble interpreting the actual image.

The actual volumetric image is saved as a series of .pngs, one per slice. We pretty use a scan line algorithm with pixel subdivision to determine the colour of a voxel in the image.

The code is written in C++ using ITK. We attempted to create an online interface but ran into several issues with porting to Linux from Visual Studio.

Visit the Insight Journal paper for instructions on how to compile and execute VascuSynth. You can download the source code here or fork me on GitHub here. Check out the project page for some cool videos and pictures!


Ghassan Hamarneh, Preet Jassi, VascuSynth: Simulating vascular trees for generating volumetric image data with ground-truth segmentation and tree analysis, Computerized Medical Imaging and Graphics, In Press, Corrected Proof, Available online 24 July 2010, ISSN 0895-6111, DOI: 10.1016/j.compmedimag.2010.06.002.

Relevant Links