pyALDVC: A Python Implementation of Augmented Lagrangian Digital Volume Correlation
3-D displacement and strain, inside the material
Open-source digital volume correlation for micro-CT, confocal and other 3-D scans:
a desktop application, a command line and a Python library, with optional GPU acceleration.
Website: zachtong.github.io/pyALDVC
cases, how it works, accuracy and speed, all in one page
Sphere indentation of a hydrogel, confocal scan of 1024 × 1024 × 306 voxels: vertical displacement
on the deformed node grid, down to −10.5 voxels (−4.5 µm) under the sphere; 144,342 nodes in 71 s on
one GPU. Measured with pyALDVC (local subset solver).
pyALDVC measures full-field displacement and strain inside a material from a sequence of 3-D scans. It is the Python version of the MATLAB ALDVC code (Yang, Hazlett, Landauer, Franck, Exp. Mech. 2020) and the volumetric sibling of pyALDIC: free, open source, and usable without writing a line of code.
Cases
The full cases, with the experiments behind them, on the website →
The foam, hydrogel and rotation fields were measured with pyALDVC (local subset solver) on one GPU. Their data are part of the DVC Challenge 2.0 dataset, doi:10.18434/mds2-4129, described in Tong, Z. et al. Digital Volume Correlation Challenge 2.0: A Comprehensive Dataset for Digital Volume Correlation Benchmarking. Research Square preprint (2026). https://doi.org/10.21203/rs.3.rs-9683321/v1. Foam data courtesy of NIST (Landauer et al., Sci. Data 10, 356, 2023).
What it does
| Point and click Load the scans, draw the region of interest on the slices, run and export, in seven languages. No code. |
AL-DVC solver Local subset fits coupled to one smooth, compatible field: cleaner gradients, and masked cracks and holes stay sharp. |
NVIDIA GPUpip install "al-dvc[gpu]" runs the local solvers as CUDA kernels, typically within 10−5 voxel of the CPU. |
Large volumes Streamed frames, on-the-fly gradients and sub-box local steps: a masked 1024³ pair needs about 14 GB (memory model). |
| Texture analysis Measures the correlation length of your scan and suggests the subset size and step. |
Strain Four gradient methods × four measures (infinitesimal, Green–Lagrange, Euler–Almansi, Hencky). |
| Statistics and rigid-body motion Means with 95 % confidence intervals, the noise floor, regions, profiles, a virtual extensometer. |
3-D view and animations Field slices, the deformed node grid and arrows; orbits and sweeps recorded as GIF or MP4. |
| Formats TIFF, MATLAB, NumPy, HDF5, NIfTI, NRRD, DICOM in; NumPy, MATLAB, CSV, ParaView, PDF out. |
Sessions, batch, command line Save sessions, queue batches, resume from checkpoints, or script it with al-dvc and al_dvc.run_aldvc. |
How it works
The method, and the tools that tell you how far to trust a result. Every figure is computed from synthetic volumes with a known answer, by a script in this repository. The website explains each one in full, with the AL-DVC method itself.
Tracking a sequence. Accumulative tracking (the default) correlates every scan with the first, so errors do not add up; incremental tracking correlates each scan with the one before and chains the steps, and follows motion too large for one step.
Texture analysis. How far the grey values stay correlated sets the subset size: four correlation lengths per axis, past which a larger subset barely lowers the error.
How precise is the result? A noise floor from static scans, the predicted error of every node, and confidence intervals that account for correlated neighbours.
Removing rigid-body motion. A specimen that shifts or turns adds displacement that is not deformation, and a rotation reads as false strain. A closed-form rigid fit removes it and reveals the deformation underneath.
Accuracy and speed
| Test | Result |
|---|---|
| Synthetic rigid translation or 2 % strain | 0.003–0.006 voxel error |
| Synthetic 5° rotation about the z axis | 0.001 voxel error |
| Synthetic translation (12.3, −9.6, 7.4) + 1 % strain | 0.004–0.005 voxel error |
| Synthetic 2 % strain with noise (SNR 6) | 0.011–0.012 voxel error |
| Confocal pair, 1024 × 1024 × 306, 79,200 nodes | 34 s on one RTX 5090 (5.0 min on a 24-core CPU) |
| Same pair, against MATLAB ALDVC (u, v, w) | median difference 0.005 / 0.006 / 0.020 voxel |
| Masked 1024³ pair | about 14 GB of volume memory, from the memory model (was 53 GB) |
Synthetic rows: RMS error of each displacement component at the interior nodes, subset 16, step 8 voxels, default settings. Confocal rows: subset 32, step 8 voxels, with the settings of the MATLAB example run. Tested on Python 3.10, 3.11 and 3.12 on every push to main.
Coming from the MATLAB ALDVC code?
| MATLAB ALDVC | pyALDVC | |
|---|---|---|
| Interface | scripts | desktop application in 7 languages, command line, Python library |
| GPU | – | NVIDIA CUDA, one install flag |
| Region of interest | box | masks drawn on the slices, automatic masks, per-frame masks |
| Subset size | by hand | suggested by texture analysis of the scan |
| Cracks and holes | subsets and smoothing reach across them | masked cracks and holes split the subsets and the node grid |
| Strain and statistics | in the run; mean and std of uniform strain | own window: 4 methods × 4 measures, regions, confidence intervals, series over frames, profiles, extensometer, noise floor, rigid-body motion removed |
| Large scans, long sequences | whole volume in memory | local steps over sub-boxes, streamed frames, gradients on the fly; checkpoints, resume, batch runs, sessions |
| Install | MATLAB licence | pip install al-dvc, or a portable Windows bundle |
Install
conda create -n pyaldvc python=3.12 -y
conda activate pyaldvc
pip install al-dvc
al-dvc
pip install "al-dvc[gpu]" in place of the third line adds NVIDIA GPU support; it needs the NVIDIA driver, not the
CUDA Toolkit. The last command opens the application, and al-dvc --self-test checks the install. Optional:
nibabel, pynrrd and pydicom read NIfTI, NRRD and DICOM; imageio with imageio-ffmpeg records MP4.
No Python? Every release ships a portable Windows bundle
(CPU only; for NVIDIA GPU acceleration, install with pip as above): unzip it and double-click pyALDVC.exe. Then
read the user guide.
Citation
If pyALDVC helps your research, please cite the software (the concept DOI always resolves to the latest release) and the method:
Tong, Z., Yang, J. pyALDVC: Augmented Lagrangian Digital Volume Correlation in Python. Zenodo (2026). https://doi.org/10.5281/zenodo.22883767
Yang, J., Hazlett, L., Landauer, A. K., Franck, C. Augmented Lagrangian Digital Volume Correlation (ALDVC). Experimental Mechanics 60, 1205–1223 (2020). https://doi.org/10.1007/s11340-020-00607-3
BibTeX
@software{tong_pyaldvc,
author = {Tong, Zixiang and Yang, Jin},
title = {{pyALDVC}: Augmented Lagrangian Digital Volume Correlation in Python},
publisher = {Zenodo},
year = {2026},
doi = {10.5281/zenodo.22883767},
url = {https://github.com/zachtong/pyALDVC}
}
@article{yang_aldvc_2020,
author = {Yang, Jin and Hazlett, Lauren and Landauer, Alexander K. and Franck, Christian},
title = {Augmented {Lagrangian} Digital Volume Correlation ({ALDVC})},
journal = {Experimental Mechanics},
volume = {60},
number = {9},
pages = {1205--1223},
year = {2020},
doi = {10.1007/s11340-020-00607-3}
}
Licence
BSD 3-Clause. Developed by Zixiang Tong and Jin Yang in Dr. Jin Yang's group at The University of Texas at Austin.
Release files for al-dvc 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| al_dvc-1.0.1.tar.gz | 1.4 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| al_dvc-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 2.7 MB
Release files / al_dvc-1.0.1.tar.gz
| Download URL | al_dvc-1.0.1.tar.gz |
|---|---|
| Size | 1.4 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
21302492d8a6a8467c38047beca608d1fed0250d123d6a29a9c2c62c402f05c3
|
|
BLAKE2b-256 checksum How to use checksums |
13bbcb67808d1a8c8ad706eb22d5f102790b0c331c006394787f48a996fe76c1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / al_dvc-1.0.1-py3-none-any.whl
| Download URL | al_dvc-1.0.1-py3-none-any.whl |
|---|---|
| Size | 1.3 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9b408eed398d20507f64591cfda08c053855f3a301a550f0a13a515cb175c387
|
|
BLAKE2b-256 checksum How to use checksums |
5e870e90dd3e9e14767b4f0f3d39e0d83cd56341df6b75b32ef71819bcc1ad64
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency log