CERN / TIGRE

TIGRE: Tomographic Iterative GPU-based Reconstruction Toolbox
BSD 3-Clause "New" or "Revised" License
531 stars 180 forks source link

Ring artifact caused by detector offset in the iterative reconstruction #362

Open HIROJAPAN opened 2 years ago

HIROJAPAN commented 2 years ago

I tried iterative reconstruction when the detector was offset using the TIGRE sample data.

The previous question said that wang weighting is not necessary for iterative reconstruction.

151

However, with some reconstruction methods, ring artifacts have emerged. It seems that ring artifacts also appear in the iterative reconstrcution. Does this cause the same problem in some iterative reconstruction method as in FDK? Thank you!

Actual Behavior

projections90 SART SART SIRT SIRT CGLS CGLS

Code to reproduce the problem (If applicable)

geo = tigre.geometry()   
geo.DSD= 1536
geo.DSO=1000
geo.nDetector = np.array([256, 256])  # number of pixels              (px)
geo.dDetector = np.array([1.6, 1.6])  # size of each pixel            (mm)
geo.sDetector = geo.nDetector * geo.dDetector  # total size of the detector    (mm)
geo.nVoxel = np.array([256, 256, 256])  # number of voxels              (vx)
geo.sVoxel = np.array([256,256, 256])  # total size of the image       (mm) 
geo.dVoxel = geo.sVoxel / geo.nVoxel  # size of each voxel            (mm)
geo.offOrigin = np.array([0, 0, 0])  # Offset of image from origin   (mm)
# Auxiliary
geo.accuracy = 0.5  # Variable to define accuracy of
geo.COR = 0  # y direction displacement for
geo.rotDetector = np.array([0, 0, 0])  # Rotation of the detector, by
geo.mode = "cone"  # Or 'parallel'. Geometry type.
geo.offDetector = np.array([0, 0])

#%% Load data and generate projections
# define angles
angles = np.linspace(0, 2 * np.pi, 360)

# Load thorax phatom data
head = sample_loader.load_head_phantom(geo.nVoxel)

# generate projections
projections = tigre.Ax(head, geo, angles)

imgCGLS, errL2CGLS = algs.cgls(projections, geo, angles, 60, computel2=True)
AnderBiguri commented 2 years ago

Hm, this is not caused by the weigths no, otherwise you'd see a "bump" of differentt value, not ring artifacts....

This may be caused by the matrix V and W in SIRT/SART, but its also in CGLS, which is weird.

Let me investigate....

AnderBiguri commented 2 years ago

@HIROJAPAN I am still looking at this. In practice, wang weigths are not necesary, but some recent papers do propose using them. In MATLAB (for a similar, but not exactly the same geometry) I see artifacts disapearing after many iterations, which more or less makes sense. #373 discusses this