├── I0.mat ├── 2015_TNS_A Simple Low-Dose X-Ray CT Simulation From High-Dose Scan.pdf ├── README.md ├── phantom_parameters.m ├── pct_ldsino.m └── demo_ldsino.m /I0.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smuzd/LD-CT-simulation/HEAD/I0.mat -------------------------------------------------------------------------------- /2015_TNS_A Simple Low-Dose X-Ray CT Simulation From High-Dose Scan.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smuzd/LD-CT-simulation/HEAD/2015_TNS_A Simple Low-Dose X-Ray CT Simulation From High-Dose Scan.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # LD-CT-simulation 2 | low dose CT simulator to yield low dose CT images from high-dose one 3 | ``` 4 | To run the matlab code, you should install the [MIRT](http://web.eecs.umich.edu/~fessler/code/index.html) first. 5 | ``` 6 | Reference: 7 | Zeng, D., Huang, J., Bian, Z., Niu, S., Zhang, H., Feng, Q., Liang, Z. and Ma, J., 2015. A simple low-dose x-ray CT simulation from high-dose scan. IEEE transactions on nuclear science, 62(5), pp.2226-2233. 8 | ``` 9 | -------------------------------------------------------------------------------- /phantom_parameters.m: -------------------------------------------------------------------------------- 1 | function params = phantom_parameters(phantom, ig) 2 | xfov = ig.fov; 3 | yfov = ig.fov; 4 | 5 | switch phantom 6 | case 'Shepp-Logan' 7 | params = [... 8 | 0 0 0.92 0.69 90 2; 9 | 0 -0.0184 0.874 0.6624 90 -0.98; 10 | -0.22 0 0.41 0.16 108 -0.02; 11 | 0.22 0 0.31 0.11 72 -0.02; 12 | 0 0.35 0.25 0.21 90 0.01; 13 | 0 0.1 0.046 0.046 0 0.01; 14 | 0 -0.1 0.046 0.046 0 0.01; 15 | -0.08 -0.605 0.046 0.023 0 0.01; 16 | 0 -0.605 0.023 0.023 0 0.01; 17 | 0.06 -0.605 0.046 0.023 90 0.01]; 18 | 19 | params(:,[1 3]) = params(:,[1 3]) * xfov/2; 20 | params(:,[2 4]) = params(:,[2 4]) * yfov/2; 21 | % params(:,end)=[1200; -480; -120; -120; 60; 60; 60; 80; 80; 80]; 22 | % CT values 23 | params(:,end)=[1200; -480; -120; -120; 60; 60; 60; 80; 80; 80]/600*1.837e-2; 24 | % NIST: ICRU-44; 80keV; u: mm-1 25 | % params(:,end)=[1200; -480; -120; -120; 60; 60; 60; 80; 80; 80]/600*1.707e-2; 26 | % NIST: ICRU-44; 100keV; u: mm-1 27 | end -------------------------------------------------------------------------------- /pct_ldsino.m: -------------------------------------------------------------------------------- 1 | function [lsino,yi] = pct_ldsino(bi, hsino, k, sig) 2 | % Simulate low-dose recontructed CTP data by adding Poisson and Gaussian 3 | % noise to the sinogram generated from fanbeam 4 | % 5 | % INPUT: 6 | % 'bi' indicent flux at high dose mAs (between 1e5 and 1e6) 7 | % 8 | % 'hsino' high dose sinogram data 9 | % 10 | % 'k' ratio between the high and low -dose indicent 11 | % flux vs. mAs level (depends on the CT vendors) 12 | % 13 | % 'sig' the variance of electronic noise (Ma 2011 Med. Phys.) 14 | % between sqrt(10) and sqrt(11) 15 | 16 | % $Revision: 1.0.0 $ $Date: 2015/11/01 $ 17 | % Copyright (c) 2011 Dong Zeng, Ph.D, zd1989@smu.edu.cn 18 | % Reference: 19 | % Zeng, D., Huang, J., Bian, Z., Niu, S., Zhang, H., Feng, Q., Liang, Z. and Ma, J., 2015. A simple low-dose x-ray CT simulation from high-dose scan. IEEE transactions on nuclear science, 62(5), pp.2226-2233. 20 | 21 | ri = 1.0; 22 | yb = k * bi .* exp(-hsino) + ri; % exponential transform to incident flux 23 | yi = poisson(yb) + sqrt(sig)*randn(size(yb)); 24 | li_hat = -log((yi-ri)./bi); 25 | li_hat(yi-ri <= 0) = 0; 26 | lsino = li_hat; -------------------------------------------------------------------------------- /demo_ldsino.m: -------------------------------------------------------------------------------- 1 | % demo_ldsino 2 | % simulate low-dose sinogram 3 | % 4 | % Reference: 5 | % Zeng, D., Huang, J., Bian, Z., Niu, S., Zhang, H., Feng, Q., Liang, Z. and Ma, J., 2015. A simple low-dose x-ray CT simulation from high-dose scan. IEEE transactions on nuclear science, 62(5), pp.2226-2233. 6 | 7 | close all; clear; clc; 8 | load I0 % high-dose (100 mAs) incident 9 | % system steup 10 | sg = sino_geom('fan','nb', 672, 'na',1160, 'ds', 1.85, ... 11 | 'dsd', 1361.2, 'dod',615.18 , ... 12 | 'source_offset',0.0,'orbit',360, 'down', 1);%0.909976 13 | ig = image_geom('nx',512, 'ny', 512,'fov',350,'offset_x',0,'down', 1); 14 | G = Gtomo2_dscmex(sg, ig); 15 | %% phantom setup 16 | ell = phantom_parameters('Shepp-Logan',ig); 17 | xtrue = ellipse_im(ig, ell, 'oversample', 4); % noise-free image unit: mm-1 18 | sino = ellipse_sino(sg, ell, 'oversample', 4); % noise-free sinogram 19 | 20 | % show high-dose image and sinogram 21 | im plc 2 2 22 | clim = [0 0.035]; 23 | im(1, xtrue, 'x', clim), cbar 24 | im(2, sino, 'sino'), cbar 25 | %% 26 | % low-dose noise parameters 27 | k = 0.1924; % low-dose 17 mAs it can be determined by 2015 TNS paper 28 | 29 | sig = sqrt(11); % standard variance of electronic noise, a characteristic of CT scanner 30 | % perform low-dose simulation on the projection data 31 | lsino = pct_ldsino(I0, sino, k, sig); 32 | %% 33 | % reconstruct image 34 | tmp = fbp2(sg, ig); 35 | fbp = fbp2(lsino, tmp); 36 | 37 | % show results 38 | im plc 2 2 39 | clim = [0 0.035]; 40 | im(1, xtrue, 'high-dose', clim), cbar; 41 | im(2, fbp, 'FBP low-dose', clim), cbar 42 | im(3, sino, 'sino'), cbar 43 | im(4, lsino, 'noisy sino'), cbar --------------------------------------------------------------------------------