Zhentao Liu, Huangxuan Zhao, Wenhui Qin, Zhenghong Zhou, Xinggang Wang, Wenping Wang, Xiaochun Lai, Chuangsheng Zheng, Dinggang Shen, and Zhiming Cui
This is the official repo of our MedIA 2026 paper "3D Vessel Reconstruction from Sparse-View Dynamic DSA Images via Vessel Probability Guided Attenuation Learning", a NeRF-based framework for DSA vessel reconstruction.
dsaimaging.mp4
DSA (Digital Subtraction Angiography) is one of the gold standards in vascular disease diagnosing. The patient undergoes two rotational X-ray scans at identical positions. The first scan is performed before the injection of contrast agent (mask run), and the second scan is conducted after injection (fill run). Following this, the DSA sequence is generated by subtracting the X-ray images acquired during the fill run from those taken during the mask run. This process highlights the blood flow information marked by the contrast agent while removing other irrelevant tissues. Each DSA image captures a particular blood flow state as the contrast agent gradually fills the vessels. Time-resolved 2D DSA sequence delivers comprehensive insights into blood flow information and vessel anatomy, aiding in the diagnosis of vascular occlusions, abnormalities, and aneurysms. You may refer to the above video (case #1) for intuitive observation. Note that, in our study, each DSA sequence contains 133 frames.
To achieve a holistic understanding of vessel anatomy, the DSA sequence is then utilized to reconstruct 3D vascular structures. Traditional algorithm (FDK) requires hundreds of scanning views (133) to perform reconstruction, results in significant radiation exposure. Moreover, the dynamic imaging nature of DSA scanning also presents a significant challenge. We aim to (1) effectively model the dynamic nature of DSA imaging, and (2) reduce the number of required scanning views to decrease radiation dosage.
In this study, we propose to use a time-agnostic vessel probability field to solve this problem effectively. Our approach, termed as vessel probability guided attenuation learning, represents the DSA imaging as a complementary weighted combination of static and dynamic attenuation fields, with the weights derived from the vessel probability field. Functioning as a dynamic mask, vessel probability provides proper gradients for both static and dynamic fields adaptive to different scene types. This mechanism facilitates a self-supervised decomposition between static backgrounds and dynamic contrast agent flow, and significantly improves the reconstruction quality. Our model is trained by minimizing the discrepency between synthesized projections and real captured DSA images. We further employ two training strategies to improve our reconstruction quality: (1) coarse-to-fine progressive training to achieve better geometry and (2) temporal perturbed rendering loss to enforce temporal consistency.
First clone this repo. Then set up an environment and install packages.
git clone https://github.com/ShanghaiTech-IMPACT/VPAL.git
cd VPAL
conda create -n VPAL python=3.8
conda activate VPAL
pip install torch==1.13.0+cu117 torchvision==0.14.0+cu117 --extra-index-url https://download.pytorch.org/whl/cu117
pip install -r requirements.txt
git clone --recursive https://github.com/nvlabs/tiny-cuda-nn
cd tiny-cuda-nn/bindings/torch
python setup.py install
cd ../../..
pip install nerfacc -f https://nerfacc-bucket.s3.us-west-2.amazonaws.com/whl/torch-1.13.0_cu117.htmlNote: After installing nerfacc, please comment out the following lines in
nerfacc/estimators/occ_grid.py:# # voxel coordinates [0, 1]^3 -> world # x = self.aabbs[lvl, :3] + x * ( # self.aabbs[lvl, 3:] - self.aabbs[lvl, :3] # )
We use two datasets in our experiments. Example data (case #1 in our paper) is provided by this link.
After downloading the data, you could run the following command to train your model.
python train.py -n=case1_30v -c=./conf/VPAL.conf -D=./dataset/case1 --is_train --disable_fixview --disable_fixtime --nviews=30You can use nerfacc toolbox to accelerate the training process with 3x acceleration.
python train.py -n=case1_30v -c=./conf/VPAL.conf -D=./dataset/case1 --is_train --disable_fixview --disable_fixtime --nviews=30 --occaccWe will continue updating this repo. There maybe some errors during code cleaning. If you have any question, just reach out to the author: liuzht2022@shanghaitech.edu.cn
We also develop 3DGS-based framework 4DRGS for DSA vessel reconstruction.
If you think our work and repo are interesting, you may cite our paper.
@article{VPAL,
title={3D vessel reconstruction from sparse-view dynamic DSA images via vessel probability guided attenuation learning},
author={Liu, Zhentao and Zhao, Huangxuan and Qin, Wenhui and Zhou, Zhenghong and Wang, Xinggang and Wang, Wenping and Lai, Xiaochun and Shen, Dinggang and Cui, Zhiming},
journal={Medical Image Analysis},
pages={104088},
year={2026},
publisher={Elsevier}
}

