An open-source library for building real-time OCT engines in C++ or Python.
vortex is a high-performance C++ library with Python bindings for rapid development of real-time OCT engines.
vortex is developed and maintained by Mark Draelos of the Image-Guided Medical Robotics Lab at the University of Michigan to facilitate the prototyping of new application-specific optical coherence tomography (OCT) software. It is a general-purpose library for OCT software development that seeks to:
vortex is released under the permissive BSD-3 license to facilitate its use in both research and commercial contexts.
Through its modular architecture, vortex encapsulates a complete OCT engine, including scan pattern generation, data acquisition and processing, synchronized I/O, and persistent storage.
Generate common scan patterns with helper classes or design your own in C++ or Python. Interleave multiple scans and route to separate storage after processing. Queue scans to the engine for execution and interrupt as needed. Insert signaling events to synchronize scan pattern changes with post-processing code.
Use GPU or FPGA acceleration for real-time OCT processing. Spread large workloads across multiple GPUs. Tune block size and stream parallelism to your use case. Perform background subtraction, resampling, and filtering of raw spectra.
Create real-time OCT engines exclusively using Python. Transparently share data with vortex using NumPy and CuPy. Lock shared memory for concurrent access from Python and C++. Asynchronously chain custom GPU processing onto the C++ OCT pipeline using CuPy.
pc = CUDAProcessorConfig()
# window + dispersion correction
window = np.hanning(pc.samples_per_ascan)
phasor = dispersion_phasor(len(window), \
cfg.dispersion)
pc.spectral_filter = window * phasor
# DC subtraction per block
pc.average_window = pc.ascans_per_block
p = CUDAProcessor()
p.initialize(pc)
Drive external hardware with scan pattern waveforms. Compensate for I/O delays with scan pattern lookahead. Add additional channels for multi-scanner hardware. Generate scan-derived digital pulses to trigger other devices.
Stream spectra or processed data to disk in common or raw file formats. Buffer high-speed acquisitions in memory as needed. Reassemble out-of-order scan patterns transparently as they write to disk.
Create interactive applications using callbacks from vortex's multithreaded engine. Display live OCT data as it is acquired or modify an ongoing acquisition.
Both academic and industry entities use vortex due to its permissive BSD-3 license.
The following publications use vortex in their scanning, acquisition, and/or processing.
vortex is under active development with major releases and documentation listed below.
C++ users may download the source below and follow the Build Guide. Python users may install pre-built binary wheels for standard hardware configurations using the package installer for Python, taking care to choose the correct CUDA version. See Getting Started for more details.
pip install vortex-oct-cuda112 vortex-oct-tools -f https://www.vortex-oct.dev/
Version | Status | C++ Source | Python Binary Wheels | Links | ||
---|---|---|---|---|---|---|
CUDA 10.2 | CUDA 11.2 | CUDA 11.6 | ||||
v0.4.3 6/30/2022 |
Documentation Release Notes |
|||||
v0.4.2 3/3/2022 |
Documentation Release Notes |
|||||
v0.4.1 1/22/2022 |
Documentation Release Notes |
= latest release for starting new projects
= latest maintenance release to support existing projects
Please use the following citation for vortex if you found it useful in your research.
@misc{Vortex,
author = {Mark Draelos},
year = {2022},
url = {https://www.vortex-oct.dev/},
title = {Vortex -- An open-source library for building real-time OCT engines in C++ or Python}
}
Download the citation in BibTex or RIS format. Check back later as this citation will likely change in the future.
Interested in learning more or have a question?
Complete the form below to send us a message.