The Vascular Modeling Toolkit

The Vascular Modeling Toolkit: A Python Library for the Analysis of Tubular Structures in Medical Images - Published in JOSS (2018)

https://github.com/vmtk/vmtk

Science Score: 95.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 4 DOI reference(s) in README and JOSS metadata
  • Academic publication links
    Links to: joss.theoj.org
  • Committers with academic emails
    4 of 41 committers (9.8%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
    Published in Journal of Open Source Software

Keywords from Contributors

3d-slicer-extension

Scientific Fields

Engineering Computer Science - 37% confidence
Last synced: 6 months ago · JSON representation

Repository

the Vascular Modeling Toolkit

Basic Info
  • Host: GitHub
  • Owner: vmtk
  • License: other
  • Language: C++
  • Default Branch: master
  • Homepage: vmtk.org
  • Size: 26.2 MB
Statistics
  • Stars: 386
  • Watchers: 30
  • Forks: 178
  • Open Issues: 84
  • Releases: 5
Created over 15 years ago · Last pushed 6 months ago
Metadata Files
Readme Contributing License

README.md

VMTK - the Vascular Modeling Toolkit

Build Status Build status DOI

Introduction

The Vascular Modeling Toolkit is a collection of libraries and tools for 3D reconstruction, geometric analysis, mesh generation and surface data analysis for image-based modeling of blood vessels. VMTK can be used via its standalone interface, included as a Python or C++ library, or as an extension to the medical image processing platform 3D Slicer. By providing multiple user interfaces with various requirments of technical ability, VMTK aims to be usable by anyone with an interest in medical image processing; be they clinicians, researchers, industries, or educational institutions.

Getting Started

Tutorials, development instructions, and the general information is available at https://www.vmtk.org

Installation - How to install VMTK.

Getting Started - Learn how to open your dataset in vmtk, navigate into a 3D volume and set up your image for further processing.

Pypes - Learn how to use Pypes.

Tutorials - Tutorials will guide you through the main features.

vmtkScripts - Automatically generated python class references

C++ Scripts - Automatically generated C++ class reference

Screenshots - Screenshots from VMTK examples.

Presentations - Presentations about VMTK.

Features

Gradient-based 3D level sets segmentation

Take a look into the Level Set Segmentation tutorial to learn how to reconstruct the 3D surface of a vascular segment from CT or MR images using level sets.

// Image segmentation vmtklevelsetsegmentation -ifile image_volume_voi.vti -ofile level_sets.vti //You can specify different parameters, for example: -levelsetsfile in order to start from an existing levelset segmentation -featureimagetype to change featureimage, for example the upwind modality -featurederivativesigma to use a Gaussian derivative convolution

A new gradient computation modality based on upwind finite differences allows the segmentation of small (down to 1.2 pixels/diameter) vessels. Interactive level sets initialization based on the Fast Marching Method. This includes a brand new method for selecting a vascular segment comprised between two points automatically ignoring side branches, no parameters involved. Segmenting a complex vascular tract comes down to selecting the endpoints of a branch, letting level sets by attracted to gradient peaks with the sole advection term turned on, repeating the operation for all the branches and merging everything in a single model.

Computing centerlines

Take a look into the Computing Centerlines tutorial to learn how to compute centerlines of a vascular segment.

// Computing centerlines vmtkcenterlines -ifile foo.vtp -ofile foo_centerlines.vtp //Look the resulting centerlines vmtksurfacereader -ifile foo.vtp --pipe vmtkcenterlines --pipe vmtkrenderer --pipe vmtksurfaceviewer -opacity 0.25 --pipe vmtksurfaceviewer -i @vmtkcenterlines.o -array MaximumInscribedSphereRadius //Inspect the voronoi diagram vmtksurfacereader -ifile foo.vtp --pipe vmtkcenterlines --pipe vmtkrenderer --pipe vmtksurfaceviewer -opacity 0.25 --pipe vmtksurfaceviewer -i @vmtkcenterlines.voronoidiagram -array MaximumInscribedSphereRadius --pipe vmtksurfaceviewer -i @vmtkcenterlines.o

Centerlines are powerful descriptors of the shape of vessels and are determined as weighted shortest paths traced between two extremal points. In order to ensure that the final lines are in fact central, the paths cannot lie anywhere in space, but are bound to run on the Voronoi diagram of the vessel model, considered as the place where the centers of maximal inscribed spheres are defined. Centerlines are determined as the paths defined on Voronoi diagram sheets that minimize the integral of the radius of maximal inscribed spheres along the path, which is equivalent to finding the shortest paths in the radius metric.

Geometric analysis

Take a look into the Geometric analysis tutorial to learn how to analyze the 3D geometry of a vascular segment and into the Preparing a Surface for Meshing tutorial to learn how to prepare a surface for mesh generation.

// Generate a vtp file containing the data on the bifurcation vectors vmtksurfacereader -ifile foo.vtp --pipe vmtkcenterlines -seedselector openprofiles --pipe vmtkbranchextractor --pipe vmtkbifurcationreferencesystems --pipe vmtkbifurcationvectors -ofile foo_bv.vtp //Compute curvature and torsion vmtkcenterlinegeometry -ifile foo_cl.vtp -smoothing 1 -ofile foo_clgm.vtp //Smoothing a surface vmtksurfacesmoothing -ifile foo.vtp -passband 0.1 -iterations 30 -ofile foo_sm.vtp //Adding flow extensions vmtksurfacereader -ifile foo.vtp --pipe vmtkcenterlines -seedselector openprofiles --pipe vmtkflowextensions -adaptivelength 1 -extensionratio 20 -normalestimationratio 1 -interactive 0 --pipe vmtksurfacewriter -ofile foo_ex.vtp

Quantifying geometric features of the vascular segment, those associated to bifurcations, such as bifurcation planes and bifurcation angles, and those associated to branches, such as curvature and torsion. Curvature and torsion are tightly linked to the definition of the Frenet line frame, constituted by a tangent, a normal and the binormal.

Increase surface smoothness prior to building the mesh. Image segmentation can result in bumpy surfaces, especially if the image quality is not high and one didn’t use any curvature term in level sets evolution. Flow extensions are cylindrical extensions added to the inlets and outlets of a model. They are important for ensuring that the flow entering and leaving the computational domain is fully developed, so that fully developed boundary conditions aren’t forcing the solution in the actual vessel.

Generating a mesh

Take a look into the Generating a Mesh tutorial to learn how to generate a mesh from a surface and into the Meshing based on centerlines tutorial to learn how to generate tetrahedral or mixed hexahedral meshes using vmtk coupled to Gmsh. Contributed by Emilie Marchandise, U. Louvain.

// generating a uniform element mesh vmtkmeshgenerator -ifile foo.vtp -ofile foo.vtu -edgelength 0.5 //Generating a radius-adaptive element mesh vmtksurfacereader -ifile foo.vtp --pipe vmtkcenterlines -endpoints 1 -seedselector openprofiles --pipe vmtkdistancetocenterlines -useradius 1 --pipe vmtkmeshgenerator -elementsizemode edgelengtharray -edgelengtharray DistanceToCenterlines -edgelengthfactor 0.3 -ofile foo.vtu //Adding a boundary layer vmtksurfacereader -ifile foo.vtp --pipe vmtkcenterlines -endpoints 1 -seedselector openprofiles --pipe vmtkdistancetocenterlines -useradius 1 --pipe vmtkmeshgenerator -elementsizemode edgelengtharray -edgelengtharray DistanceToCenterlines -edgelengthfactor 0.3 -boundarylayer 1 -ofile foo.vtu

Surface remeshing is performed under the assumption that the surface requires improvement before being used for CFD. After the surface has been remeshed the volume is filled with a combination of tetrahedral and prismatic elements. We can heighten the density of the mesh near the wall by generating the boundary layer.

Mapping and patching

Take a look into the Mapping and patching tutorial to learn how to map the surface of a population of vessels onto the same parametric space and enable statistical analyses of surface-based quantities

// Longitudinal and circumferential metrics vmtkbranchmetrics -ifile aorta_clipped.vtp -centerlinesfile aorta_cl.vtp -abscissasarray Abscissas -normalsarray ParallelTransportNormals -groupidsarray GroupIds -centerlineidsarray CenterlineIds -tractidsarray TractIds -blankingarray Blanking -radiusarray MaximumInscribedSphereRadius -ofile aorta_clipped_metrics.vtp //Metrics mapping to branches vmtkbranchmapping -ifile aorta_clipped_metrics.vtp -centerlinesfile aorta_cl.vtp -referencesystemsfile aorta_cl_rs.vtp -normalsarray ParallelTransportNormals -abscissasarray Abscissas -groupidsarray GroupIds -centerlineidsarray CenterlineIds -tractidsarray TractIds -referencesystemsnormalarray Normal -radiusarray MaximumInscribedSphereRadius -blankingarray Blanking -angularmetricarray AngularMetric -abscissametricarray AbscissaMetric -ofile aorta_clipped_mapping.vtp //Patching of surface mesh and attributes vmtkbranchpatching -ifile aorta_clipped_mapping.vtp -groupidsarray GroupIds -longitudinalmappingarray StretchedMapping -circularmappingarray AngularMetric -longitudinalpatchsize 0.5 -circularpatches 12 -ofile aorta_clipped_patching.vtp

A common application is mapping and patching of fluid dynamics variables, such as wall shear stress (WSS) or oscillatory shear index (OSI), obtained on the surface mesh typically by means of a CFD simulation.
By construction of a harmonic function over each vascular segment, vmtkbranchmapping maps and stretches the longitudinal metric to correctly account for the presence of insertion regions at bifurcations; the additional StretchedMapping array is added to the surface.

Pypes

Take a look into the Basic PypeS tutorial to learn how to effectively pipe vmtk scripts together, the Use PypeS Programmatically tutorial to learn how to interactively work with PypeS objects and into the Advanced PypeS tutorial to learn how to write your own PypeS modules.

vmtkmarchingcubes --help Creating vmtkMarchingCubes instance. Automatic piping vmtkmarchingcubes Parsing options vmtkmarchingcubes vmtkmarchingcubes : generate an isosurface of given level from a 3D image Input arguments: -id Id(int,1); default=0: script id -handle Self (self,1): handle to self -disabled Disabled (bool,1); default=0: disable execution and piping -i Image (vtkImageData,1): the input image -ifile ImageInputFileName(str,1): filename for the default Image Reader -array ArrayName (str,1): name of the array to work with -l Level(float,1); default=0.0: graylevel to generate the isosurface at -connectivity Connectivity (bool,1); default=0: only output the largest connected region of the isosurface -ofile SurfaceOutputFileName (str,1): filename for the default Surface writer Output arguments: -id Id (int,1); default= 0: script id -handle Self (self,1): handle to self -o Surface (vtkPolyData,1): the output surface // We can use vmtkmarchingcubes as a stand-alone script by using the built-in I/O functionality vmtkmarchingcubes -ifile foo.vti -ofile foo.vtp //or we can build a pype that does the same thing vmtkimagereader -ifile foo.vti --pipe vmtkmarchingcubes --pipe vmtksurfacewriter -ofile foo.vtp @vmtkcenterlines.o -array MaximumInscribedSphereRadius //Say we want to read two images and extract a surface with Marching Cubes with a level of 20 for both. We can either write vmtkmarchingcubes -ifile foo1.vti -l 20 --pipe vmtkmarchingcubes -ifile foo2.vti -l 20 //or push the input argument -l along to the second vmtkmarchingcubes this way vmtkmarchingcubes -ifile foo1.vti -l@ 20 --pipe vmtkmarchingcubes -ifile foo2.vti

Writing classes implementing algorithms and writing actual tools to be used for everyday work are two distinct tasks.
Very often a well-designed object-oriented library ends up to be used in ever-growing collections of shell, Python or Tcl scripts or small C programs, each with its own argument parsing and I/O sections. Very often high-level code is duplicated to provide slightly different functionality. On the other side, writing a GUI is a time-consuming task, and adding new functionality requires time, which might deter experimentation. PypeS goes in the direction of providing a flexible framework for high-level code, both from the user’s and from the developer’s points of view. The user wants to get things done minimizing the work required and the amount of intermediate data generated. The coder wants to limit the amount of code, she/he has to cut and paste (and maintain), and to quickly add new functionality and make it interact with what she/he’s ever written before.

Funding

Development of VMTK is supported by Orobix Srl.

Contact

If you have any questions or comments contact the VMTK community.

Owner

  • Name: vmtk - the Vascular Modeling Toolkit
  • Login: vmtk
  • Kind: organization

JOSS Publication

The Vascular Modeling Toolkit: A Python Library for the Analysis of Tubular Structures in Medical Images
Published
May 26, 2018
Volume 3, Issue 25, Page 745
Authors
Richard Izzo ORCID
University at Buffalo
David Steinman ORCID
University of Toronto
Simone Manini ORCID
Orobix Srl.
Luca Antiga ORCID
Orobix Srl.
Editor
Kevin M. Moerman ORCID
Tags
C++ vascular modeling image processing medical imaging image segmentation computational geometry surface extraction CFD Meshing hemodynamics mesh generation centerline

Papers & Mentions

Total mentions: 5

Computational Modeling of the Liver Arterial Blood Flow for Microsphere Therapy: Effect of Boundary Conditions
Last synced: 4 months ago
Measurement of Human Semicircular Canal Spatial Attitude
Last synced: 4 months ago
Design optimization of a contact-aided continuum robot for endobronchial interventions based on anatomical constraints
Last synced: 4 months ago
Polygonal surface processing and mesh generation tools for the numerical simulation of the cardiac function
Last synced: 4 months ago
Non‐invasive coronary CT angiography‐derived fractional flow reserve: A benchmark study comparing the diagnostic performance of four different computational methodologies
Last synced: 4 months ago

GitHub Events

Total
  • Issues event: 2
  • Watch event: 36
  • Issue comment event: 4
  • Push event: 3
  • Pull request review comment event: 2
  • Pull request review event: 3
  • Fork event: 9
Last Year
  • Issues event: 2
  • Watch event: 36
  • Issue comment event: 4
  • Push event: 3
  • Pull request review comment event: 2
  • Pull request review event: 3
  • Fork event: 9

Committers

Last synced: 7 months ago

All Time
  • Total Commits: 1,221
  • Total Committers: 41
  • Avg Commits per committer: 29.78
  • Development Distribution Score (DDS): 0.716
Past Year
  • Commits: 0
  • Committers: 0
  • Avg Commits per committer: 0.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Luca Antiga l****a@o****m 347
Rick Izzo r****2@g****m 301
lucantiga l****a@9****0 293
daron1337 s****i@g****m 42
Kurt Sansom k****e@g****m 37
Jean-Christophe Fillion-Robin j****r@k****m 36
Martin Sandve Alnæs m****l@s****o 22
Andras Lasso l****o@q****a 21
elefagg e****o@g****m 14
Ramtin Gharleghi g****i@g****m 12
daron1337 s****i@o****m 11
David Ladd d****d@g****m 10
carlosremuzzi c****i@9****0 7
Steve Pieper p****r@i****m 7
Daniel Haehn dh@r****e 6
Denis Shamonin d****i@g****m 6
Jens Henrik Goebbert j****t@f****e 6
Taylor Braun-Jones t****r@b****g 5
Sara Zanchi s****i@g****m 5
Wouter Potters w****s@a****l 4
tmorvan t****n@9****0 4
Rupert Nash r****t@n****k 3
Ulf Schiller u****l@c****u 2
Pieter Kitslar k****r@g****m 2
Peter 4****o 2
Antoine Mathieu a****8@g****m 1
Eugene Prilepin p****n@s****m 1
Jameson Merkow j****w@g****m 1
Jaroslav Hron j****n@m****z 1
johannr j****r@9****0 1
and 11 more...

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 69
  • Total pull requests: 55
  • Average time to close issues: 4 months
  • Average time to close pull requests: 5 months
  • Total issue authors: 53
  • Total pull request authors: 18
  • Average comments per issue: 3.0
  • Average comments per pull request: 2.4
  • Merged pull requests: 41
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 4
  • Pull requests: 1
  • Average time to close issues: N/A
  • Average time to close pull requests: about 19 hours
  • Issue authors: 4
  • Pull request authors: 1
  • Average comments per issue: 0.25
  • Average comments per pull request: 0.0
  • Merged pull requests: 1
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • kayarre (5)
  • lassoan (5)
  • ramtingh (3)
  • jiehyunjkim (3)
  • philippa1812 (2)
  • junqiangchen (2)
  • Paddy-Xu (2)
  • zhang-qiang-github (2)
  • lxq015 (1)
  • gboels (1)
  • axjing (1)
  • dwsh3n (1)
  • turtleizzy (1)
  • dmolony3 (1)
  • chuanqiWen (1)
Pull Request Authors
  • kayarre (26)
  • ramtingh (8)
  • lassoan (4)
  • rlizzo (2)
  • RafaelPalomar (2)
  • chir-set (2)
  • rodrigobasilio2022 (2)
  • jcfr (2)
  • nmontesg (1)
  • a-mathieu (1)
  • checkrenzi (1)
  • sjh26 (1)
  • ramen-newdals (1)
  • marco-fedele (1)
  • JaroslavHron (1)
Top Labels
Issue Labels
Pull Request Labels
Need Documentation (1) Need Website Documentation (1) Need Testing (1) New Feature (1)

Packages

  • Total packages: 2
  • Total downloads: unknown
  • Total dependent packages: 1
    (may contain duplicates)
  • Total dependent repositories: 4
    (may contain duplicates)
  • Total versions: 2
  • Total maintainers: 2
pypi.org: vmtk

vmtk - The Vascular Modeling Toolkit

  • Versions: 1
  • Dependent Packages: 0
  • Dependent Repositories: 3
Rankings
Stargazers count: 3.9%
Forks count: 4.0%
Average: 6.7%
Dependent repos count: 9.0%
Dependent packages count: 10.0%
Maintainers (2)
Last synced: 6 months ago
conda-forge.org: vmtk

The Vascular Modeling Toolkit is a collection of libraries and tools for 3D reconstruction, geometric analysis, mesh generation and surface data analysis for image-based modeling of blood vessels. VMTK can be used via its standalone interface, included as a Python or C++ library, or as an extension to the medical image processing platform 3D Slicer. By providing multiple user interfaces with various requirments of technical ability, VMTK aims to be usable by anyone with an interest in medical image processing; be they clinicians, researchers, industries, or educational institutions.

  • Homepage: www.vmtk.org
  • License: BSD-2-Clause
  • Latest release: 1.5.0
    published almost 4 years ago
  • Versions: 1
  • Dependent Packages: 1
  • Dependent Repositories: 1
Rankings
Forks count: 15.0%
Average: 23.0%
Stargazers count: 23.5%
Dependent repos count: 24.3%
Dependent packages count: 29.0%
Last synced: 6 months ago