This repository provides GPU-accelerated forward and back projection operators for CT reconstruction, coded in CUDA-C and interfaced with MATLAB through the generation of MEX files.
Projection operators are available for parallel-beam, fan-beam, and cone-beam geometries. Additionally, a "general-3D" geometry option exists, where non-standard ray-paths can be specified.
The purpose of this toolset is not to provide a large number of implemented reconstruction algorithms. See the ASTRA1 or TIGRE2 toolboxes for a more complete set. Rather, the goal here is to provide the fundamental building blocks - the projection operators - without overwhelming potential users with a myriad of options. That said, a sinogram filtering function for filtered backprojection reconstruction (FBP)3, and a recently published iterative reconstruction algorithm (OSC-TV)4 are provided as a jumping-off point for users who want to get straight to reconstructing their projection data.
The intended user of these tools is one who wants a direct programmatic interface to GPU-accelerated CT operations and does not need (or, perhaps, does not want) a standalone application or GUI.
Specific installation instructions are provided only for Microsoft Windows 7 / 10. An enterprising Linux user should be able to compile the tools, but this has not yet been tested.
Windows installation instructions
This example generates cone-beam projections from a uniform cylindrical phantom, and performs a basic FDK reconstruction (Filtered backprojection). A much more interesting test image, the 3D Shepp-Logan head phantom, can be generated using a MATLAB function by Matthias Schabel.
% generate simple cylinder phantom
[x y] = meshgrid(-191.5 : 191.5,-191.5 : 191.5);
mask = ((x.^2 + y.^2) <=(140^2));
ph = repmat(single(mask),[1 1 384])*0.02;
% set up scan geometry
nProjections = 512;
angles = single(linspace(0,2*pi,nProjections));
SAD=1000;
geomFlag = 2; %0 = parallel-beam, 1 = fan-beam, 2 = cone-beam
% compute forward projections
fp = CUDAmex_FP(ph, SAD, angles, nProjections, geomFlag);
% filter sinogram data
filteredSino = single(preFilterSinogram(fp, struct('type','cone3d','SAD',SAD),angles,'hamming',1));
% reconstruct via backprojection
recon = CUDAmex_BP(filteredSino, SAD, angles, geomFlag);
1W. van Aarle et al., “The ASTRA Toolbox: A platform for advanced algorithm development in electron tomography,” Ultramicroscopy, vol. 157, pp. 35–47, Oct. 2015.
2A. Biguri, M. Dosanjh, S. Hancock, and M. Soleimani, “TIGRE: a MATLAB-GPU toolbox for CBCT image reconstruction,” Biomed. Phys. Eng. Express, vol. 2, no. 5, p. 055010, 2016.
3A. C. Kak and M. Slaney, Principles of Computerized Tomographic Imaging. SIAM, 2001.
4D. Matenine, Y. Goussard, and P. Després, “GPU-accelerated regularized iterative reconstruction for few-view cone beam CT,” Medical Physics, vol. 42, no. 4, pp. 1505–1517, Apr. 2015.
Kurtis H. Dekker, PhD
Department of Medical Physics
Cancer Centre of Southeastern Ontario at Kingston General Hospital
Kingston, Ontario, CANADA
linkedin
researchgate
The tools here are provided as-is under the BSD License.