sino = TomoP2D.ModelSinoTemporal(model, N_size, P, angles, path_library2D) plt.figure(2) plt.rcParams.update({'font.size': 21}) plt.title('{}''{}'.format('2D+t sinogram of model no.',model)) for sl in range(0,np.shape(phantom_2Dt)[0]): im = sino[sl,:,:].transpose() plt.imshow(im, vmin=0, vmax=180) plt.pause(.1) plt.draw #%% print ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print ("Reconstructing analytical sinogram using FBP (tomobar)...") print ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") # initialise tomobar reconstruction class ONCE from tomobar.methodsDIR import RecToolsDIR RectoolsDIR = RecToolsDIR(DetectorsDimH = P, # DetectorsDimH # detector dimension (horizontal) DetectorsDimV = None, # DetectorsDimV # detector dimension (vertical) for 3D case only CenterRotOffset = None, # Center of Rotation (CoR) scalar (for 3D case only) AnglesVec = angles_rad, # array of angles in radians ObjSize = N_size, # a scalar to define reconstructed object dimensions device_projector='cpu') FBPrec = RectoolsDIR.FBP(sino[15,:,:].transpose()) # reconstruct one frame plt.figure(3) plt.imshow(FBPrec, vmin=0, vmax=1) plt.title('FBP Reconstructed Phantom') #%%
plt.colorbar(ticks=[0, 150, 250], orientation='vertical') plt.title('{}' '{}'.format('Analytical noisy sinogram', model)) #%% print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print("%%%%%%%%%%%%%%Reconstructing with FBP method %%%%%%%%%%%%%%%") print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") from tomobar.methodsDIR import RecToolsDIR RectoolsDIR = RecToolsDIR( DetectorsDimH=P, # Horizontal detector dimension DetectorsDimV=None, # Vertical detector dimension (3D case) CenterRotOffset=0.001, # Center of Rotation scalar AnglesVec=angles_rad, # A vector of projection angles in radians ObjSize=N_size, # Reconstructed object dimensions (scalar) device_projector='gpu') FBPrec = RectoolsDIR.FBP(noisy_sino) # perform FBP reconstruction plt.figure() plt.rcParams.update({'font.size': 20}) plt.imshow(FBPrec, vmin=0, vmax=1, cmap="gray") plt.colorbar(ticks=[0, 0.5, 1], orientation='vertical') plt.title('FBP reconstruction') #%% print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print("Reconstructing with FISTA method (ASTRA used for projection)") print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") from tomobar.methodsIR import RecToolsIR # set parameters and initiate a class object Rectools = RecToolsIR( DetectorsDimH=P, # Horizontal detector dimension
plt.title('Vertical (Y-Z) view', fontsize=19) plt.show() #plt.savefig('projdata.pdf', format='pdf', dpi=1200) #%% # initialise tomobar DIRECT reconstruction class ONCE from tomobar.methodsDIR import RecToolsDIR RectoolsDIR = RecToolsDIR( DetectorsDimH=Horiz_det, # DetectorsDimH # detector dimension (horizontal) DetectorsDimV= Vert_det, # DetectorsDimV # detector dimension (vertical) for 3D case only AnglesVec=proj_angles, # array of angles in radians ObjSize=N_size, # a scalar to define reconstructed object dimensions device='gpu') #%% print("Reconstruction using FBP from tomobar") recFBP = RectoolsDIR.FBP(projdata_norm) # FBP reconstruction #%% x0, y0 = 0, 127 # These are in _pixel_ coordinates!! x1, y1 = 255, 127 sliceSel = int(0.5 * N_size) max_val = 1 plt.figure(figsize=(20, 5)) gs1 = gridspec.GridSpec(1, 3) gs1.update(wspace=0.1, hspace=0.05) # set the spacing between axes. ax1 = plt.subplot(gs1[0]) plt.imshow(recFBP[sliceSel, :, :], vmin=0, vmax=max_val, cmap="PuOr") ax1.plot([x0, x1], [y0, y1], 'ko-', linestyle='--') plt.colorbar(ax=ax1) plt.title('FBP Reconstruction, axial (X-Y) view', fontsize=19) ax1.set_aspect('equal')
plt.title('Tangentogram view') plt.show() #%% # initialise tomobar DIRECT reconstruction class ONCE from tomobar.methodsDIR import RecToolsDIR Rectools = RecToolsDIR( DetectorsDimH=Horiz_det, # DetectorsDimH # detector dimension (horizontal) DetectorsDimV= Vert_det, # DetectorsDimV # detector dimension (vertical) for 3D case only CenterRotOffset=0.0, # Center of Rotation (CoR) scalar (for 3D case only) AnglesVec=angles_rad, # array of angles in radians ObjSize=N_size, # a scalar to define reconstructed object dimensions device_projector='gpu') print("Reconstruction using FBP from tomobar") recNumerical = Rectools.FBP(projData3D_analyt_noisy) # FBP reconstruction sliceSel = int(0.5 * N_size) max_val = 1 #plt.gray() plt.figure() plt.subplot(131) plt.imshow(recNumerical[sliceSel, :, :], vmin=0, vmax=max_val) plt.title('3D Reconstruction, axial view') plt.subplot(132) plt.imshow(recNumerical[:, sliceSel, :], vmin=0, vmax=max_val) plt.title('3D Reconstruction, coronal view') plt.subplot(133) plt.imshow(recNumerical[:, :, sliceSel], vmin=0, vmax=max_val)
sliceSel = 150 plt.figure() plt.subplot(131) plt.imshow(projData3D_analyt_noisy[:,sliceSel,:],vmin=0, vmax=intens_max) plt.title('2D noisy Projection (analytical)') plt.subplot(132) plt.imshow(projData3D_analyt_noisy[sliceSel,:,:],vmin=0, vmax=intens_max) plt.title('Noisy sinogram view') plt.subplot(133) plt.imshow(projData3D_analyt_noisy[:,:,sliceSel],vmin=0, vmax=intens_max) plt.title('Noisy tangentogram view') plt.show() """ #%% print("Reconstruction using FBP from tomobar") recNumerical = RectoolsDIR.FBP(ProjData3D) # FBP reconstruction sliceSel = int(0.5 * N3D_size) max_val = 1 #plt.gray() plt.figure() plt.subplot(131) plt.imshow(recNumerical[sliceSel, :, :], vmin=0, vmax=max_val) plt.title('3D Reconstruction, axial view') plt.subplot(132) plt.imshow(recNumerical[:, sliceSel, :], vmin=0, vmax=max_val) plt.title('3D Reconstruction, coronal view') plt.subplot(133) plt.imshow(recNumerical[:, :, sliceSel], vmin=0, vmax=max_val)
#%% print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print("%%%%%%%%%%%%Reconstructing with FBP method %%%%%%%%%%%%%%%%%") print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") from tomobar.methodsDIR import RecToolsDIR RectoolsDIR = RecToolsDIR( DetectorsDimH= detectorHoriz, # DetectorsDimH # detector dimension (horizontal) DetectorsDimV= None, # DetectorsDimV # detector dimension (vertical) for 3D case only CenterRotOffset=None, # Center of Rotation (CoR) scalar (for 3D case only) AnglesVec=angles_rad, # array of angles in radians ObjSize=N_size, # a scalar to define reconstructed object dimensions device='gpu') FBPrec = RectoolsDIR.FBP(data_norm[:, :, slice_to_recon]) plt.figure() plt.imshow(FBPrec[150:550, 150:550], vmin=0, vmax=0.005, cmap="gray") plt.title('FBP reconstruction') from tomobar.methodsIR import RecToolsIR # set parameters and initiate a class object Rectools = RecToolsIR( DetectorsDimH= detectorHoriz, # DetectorsDimH # detector dimension (horizontal) DetectorsDimV= None, # DetectorsDimV # detector dimension (vertical) for 3D case only CenterRotOffset=None, # Center of Rotation (CoR) scalar (for 3D case only) AnglesVec=angles_rad, # array of angles in radians ObjSize=N_size, # a scalar to define reconstructed object dimensions
ObjSize=N_size, # a scalar to define reconstructed object dimensions device_projector='cpu') #%% print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print("Reconstructing analytical sinogram using Fourier Slice method") print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") RecFourier = RectoolsDIR.FOURIER(noisy_sino, 'linear') plt.figure() plt.imshow(RecFourier, vmin=0, vmax=1, cmap="BuPu") plt.colorbar(ticks=[0, 0.5, 1], orientation='vertical') plt.title('Fourier slice reconstruction') #%% print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print("Reconstructing analytical sinogram using FBP (tomobar)...") print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") FBPrec = RectoolsDIR.FBP(noisy_sino) # ideal reconstruction plt.figure() plt.imshow(FBPrec, vmin=0, vmax=1, cmap="gray") plt.colorbar(ticks=[0, 0.5, 1], orientation='vertical') plt.title('FBP reconstruction') #%% # initialise tomobar ITERATIVE reconstruction class ONCE from tomobar.methodsIR import RecToolsIR RectoolsIR = RecToolsIR( DetectorsDimH=P, # DetectorsDimH # detector dimension (horizontal) DetectorsDimV= None, # DetectorsDimV # detector dimension (vertical) for 3D case only CenterRotOffset=None, # Center of Rotation (CoR) scalar (for 3D case only) AnglesVec=angles_rad, # array of angles in radians ObjSize=N_size, # a scalar to define reconstructed object dimensions
#%% print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print("%%%%%%%%%%%%%%Reconstructing with FBP method %%%%%%%%%%%%%%%") print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") from tomobar.methodsDIR import RecToolsDIR RectoolsDIR = RecToolsDIR( DetectorsDimH=Horiz_det, # DetectorsDimH # detector dimension (horizontal) DetectorsDimV= Vert_det, # DetectorsDimV # detector dimension (vertical) for 3D case only CenterRotOffset=None, # Center of Rotation (CoR) scalar (for 3D case only) AnglesVec=angles_rad, # array of angles in radians ObjSize=N_size, # a scalar to define reconstructed object dimensions device_projector='gpu') FBPrec = RectoolsDIR.FBP(projData3D_analyt_noise) #perform FBP sliceSel = int(0.5 * N_size) max_val = 1 plt.figure() plt.subplot(131) plt.imshow(FBPrec[sliceSel, :, :], vmin=0, vmax=max_val) plt.title('3D FBP Reconstruction, axial view') plt.subplot(132) plt.imshow(FBPrec[:, sliceSel, :], vmin=0, vmax=max_val) plt.title('3D FBP Reconstruction, coronal view') plt.subplot(133) plt.imshow(FBPrec[:, :, sliceSel], vmin=0, vmax=max_val) plt.title('3D FBP Reconstruction, sagittal view')
plt.colorbar(ticks=[0, 150, 250], orientation='vertical') plt.title('{}' '{}'.format('Analytical noisy sinogram with artifacts.', model)) #%% from tomobar.methodsDIR import RecToolsDIR Rectools = RecToolsDIR( DetectorsDimH=P, # Horizontal detector dimension DetectorsDimV=None, # Vertical detector dimension (3D case) CenterRotOffset=0.0, # Center of Rotation scalar AnglesVec=angles_rad, # A vector of projection angles in radians ObjSize=N_size, # Reconstructed object dimensions (scalar) device_projector='gpu') print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print("Reconstructing analytical sinogram using FBP (tomobar)...") print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") FBPrec_ideal = Rectools.FBP(sino_an) # ideal reconstruction FBPrec_error = Rectools.FBP(sino_artifacts) # reconstruction with artifacts FBPrec_misalign = Rectools.FBP( sino_misalign) # reconstruction with misalignment plt.figure() plt.subplot(131) plt.imshow(FBPrec_ideal, vmin=0, vmax=2, cmap="gray") plt.colorbar(ticks=[0, 0.5, 2], orientation='vertical') plt.title('Ideal FBP reconstruction') plt.subplot(132) plt.imshow(FBPrec_error, vmin=0, vmax=2, cmap="gray") plt.colorbar(ticks=[0, 0.5, 2], orientation='vertical') plt.title('Erroneous data FBP Reconstruction') plt.subplot(133) plt.imshow(FBPrec_misalign, vmin=0, vmax=2, cmap="gray")
plt.subplot(133) plt.imshow(projData3D_analyt_noisy[:,:,sliceSel],vmin=0, vmax=intens_max) plt.title('Tangentogram view') plt.show() #%% # initialise tomobar DIRECT reconstruction class ONCE from tomobar.methodsDIR import RecToolsDIR RectoolsDIR = RecToolsDIR(DetectorsDimH = Horiz_det, # Horizontal detector dimension DetectorsDimV = Vert_det, # Vertical detector dimension (3D case) CenterRotOffset = None, # Centre of Rotation scalar AnglesVec = angles_rad, # A vector of projection angles in radians ObjSize = N_size, # Reconstructed object dimensions (scalar) device_projector='gpu') print ("Reconstruction using FBP from tomobar") Rec_FBP= RectoolsDIR.FBP(projData3D_analyt_noisy) # FBP reconstruction sliceSel = int(0.5*N_size) max_val = 1 #plt.gray() plt.figure() plt.subplot(131) plt.imshow(Rec_FBP[sliceSel,:,:],vmin=0, vmax=max_val) plt.title('3D FBP Reconstruction, axial view') plt.subplot(132) plt.imshow(Rec_FBP[:,sliceSel,:],vmin=0, vmax=max_val) plt.title('3D FBP Reconstruction, coronal view') plt.subplot(133) plt.imshow(Rec_FBP[:,:,sliceSel],vmin=0, vmax=max_val)
#%% print ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print ("%%%%%%%%%%%%Reconstructing with FBP method %%%%%%%%%%%%%%%%%") print ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") from tomobar.methodsDIR import RecToolsDIR N_size = 2000 det_y_crop = [i for i in range(0,2374)] RectoolsDIR = RecToolsDIR(DetectorsDimH = np.size(det_y_crop), # DetectorsDimH # detector dimension (horizontal) DetectorsDimV = None, # DetectorsDimV # detector dimension (vertical) for 3D case only AnglesVec = angles_rad, # array of angles in radians ObjSize = N_size, # a scalar to define reconstructed object dimensions device='gpu') FBPrec = RectoolsDIR.FBP(np.transpose(data_norm[det_y_crop,:,0])) plt.figure() #plt.imshow(FBPrec[500:1500,500:1500], vmin=0, vmax=1, cmap="gray") plt.imshow(FBPrec, vmin=0, vmax=1, cmap="gray") plt.title('FBP reconstruction') #%% from tomobar.methodsIR import RecToolsIR # set parameters and initiate a class object Rectools = RecToolsIR(DetectorsDimH = np.size(det_y_crop), # DetectorsDimH # detector dimension (horizontal) DetectorsDimV = None, # DetectorsDimV # detector dimension (vertical) for 3D case only CenterRotOffset = None, # Center of Rotation (CoR) scalar (for 3D case only) AnglesVec = angles_rad, # array of angles in radians ObjSize = N_size, # a scalar to define reconstructed object dimensions
detectorHoriz = np.size(data_norm,0) N_size = 1000 slice_to_recon = 19 # select which slice to reconstruct angles_rad = angles*(np.pi/180.0) #%% print ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print ("%%%%%%%%%%%%Reconstructing with FBP method %%%%%%%%%%%%%%%%%") print ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") from tomobar.methodsDIR import RecToolsDIR RectoolsDIR = RecToolsDIR(DetectorsDimH = detectorHoriz, # DetectorsDimH # detector dimension (horizontal) DetectorsDimV = None, # DetectorsDimV # detector dimension (vertical) for 3D case only AnglesVec = angles_rad, # array of angles in radians ObjSize = N_size, # a scalar to define reconstructed object dimensions device='gpu') FBPrec = RectoolsDIR.FBP(np.transpose(data_norm[:,:,slice_to_recon])) plt.figure() plt.imshow(FBPrec[150:550,150:550], vmin=0, vmax=0.005, cmap="gray") plt.title('FBP reconstruction') from tomobar.methodsIR import RecToolsIR # set parameters and initiate a class object Rectools = RecToolsIR(DetectorsDimH = detectorHoriz, # DetectorsDimH # detector dimension (horizontal) DetectorsDimV = None, # DetectorsDimV # detector dimension (vertical) for 3D case only CenterRotOffset = None, # Center of Rotation (CoR) scalar (for 3D case only) AnglesVec = angles_rad, # array of angles in radians ObjSize = N_size, # a scalar to define reconstructed object dimensions datafidelity='PWLS',# data fidelity, choose LS, PWLS, GH (wip), Student (wip) nonnegativity='ENABLE', # enable nonnegativity constraint (set to 'ENABLE') OS_number = 12, # the number of subsets, NONE/(or > 1) ~ classical / ordered subsets
angles_rad = np.zeros(N_size) angles_step_rad = (360.0 / float(N_size)) * np.pi / 180.0 for i in range(0, N_size): angles_rad[i] = i * angles_step_rad RectoolsDIR = RecToolsDIR( DetectorsDimH=N_cut, # DetectorsDimH # detector dimension (horizontal) DetectorsDimV= None, # DetectorsDimV # detector dimension (vertical) for 3D case only CenterRotOffset=-118.0, # Center of Rotation (CoR) scalar AnglesVec=np.float32(angles_rad), # array of angles in radians ObjSize=1600, # a scalar to define reconstructed object dimensions device_projector='cpu') print("Reconstruction using FBP from tomobar") recFBP = RectoolsDIR.FBP(projections_norm[:, 5, :]) # FBP reconstruction plt.figure() plt.imshow(recFBP, vmin=0, vmax=0.00095, cmap="gray") #%% # do reconstruction angles_rad = np.zeros(N_cut) angles_step_rad = (360.0 / float(N_cut)) * np.pi / 180.0 for i in range(0, N_cut): angles_rad[i] = i * angles_step_rad RectoolsDIR = RecToolsDIR( DetectorsDimH=N_cut, # DetectorsDimH # detector dimension (horizontal) DetectorsDimV= None, # DetectorsDimV # detector dimension (vertical) for 3D case only
plt.title('Tangentogram view') plt.show() #%% # initialise tomobar DIRECT reconstruction class ONCE from tomobar.methodsDIR import RecToolsDIR RectoolsDIR = RecToolsDIR( DetectorsDimH=Horiz_det, # DetectorsDimH # detector dimension (horizontal) DetectorsDimV= Vert_det, # DetectorsDimV # detector dimension (vertical) for 3D case only CenterRotOffset=None, # Center of Rotation (CoR) scalar (for 3D case only) AnglesVec=angles_rad, # array of angles in radians ObjSize=N_size, # a scalar to define reconstructed object dimensions device_projector='gpu') print("Reconstruction using FBP from tomobar") recNumerical_conventional = RectoolsDIR.FBP( projData3D_norm) # FBP reconstruction recNumerical_conventional *= intens_max_clean recNumerical_dynamic = RectoolsDIR.FBP( projData3D_norm_dyn) # FBP reconstruction recNumerical_dynamic *= intens_max_clean sliceSel = int(0.5 * N_size) max_val = 1 #plt.gray() plt.figure() plt.subplot(131) plt.imshow(recNumerical_conventional[sliceSel, :, :], vmin=0, vmax=max_val) plt.title('3D Reconstruction, axial view') plt.subplot(132)
plt.title('Sinogram of i23 data') plt.show() #%% print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print("%%%%%%%%%%%%Reconstructing with FBP method %%%%%%%%%%%%%%%%%") print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") from tomobar.methodsDIR import RecToolsDIR RectoolsDIR = RecToolsDIR( DetectorsDimH=detectorHoriz, # Horizontal detector dimension DetectorsDimV=None, # Vertical detector dimension (3D case) CenterRotOffset=13.0, # Centre of Rotation scalar AnglesVec=angles_rad, # A vector of projection angles in radians ObjSize=N_size, # Reconstructed object dimensions (scalar) device_projector='gpu') FBPrec = RectoolsDIR.FBP(np.transpose(sinogram)) fig = plt.figure() plt.imshow(FBPrec, vmin=0, vmax=0.005, cmap="gray") plt.title('FBP reconstruction') #fig.savefig('dendr_FPP.png', dpi=200) #%% print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print("Reconstructing with FISTA PWLS-OS-TV method %%%%%%%%%%%%%%%%") print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") from tomobar.methodsIR import RecToolsIR # Set scanning geometry parameters and initiate a class object Rectools = RecToolsIR( DetectorsDimH=detectorHoriz, # Horizontal detector dimension DetectorsDimV=None, # Vertical detector dimension CenterRotOffset=None, # Center of Rotation scalar
ObjSize=N_size, # a scalar to define reconstructed object dimensions device='cpu') #%% print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print("Reconstructing analytical sinogram using Fourier Slice method") print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") RecFourier = RectoolsDIR.fourier(sino_an, 'linear') plt.figure() plt.imshow(RecFourier, vmin=0, vmax=1, cmap="BuPu") plt.colorbar(ticks=[0, 0.5, 1], orientation='vertical') plt.title('Fourier slice reconstruction') #%% print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print("Reconstructing analytical sinogram using FBP (tomobar)...") print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") FBPrec_ideal = RectoolsDIR.FBP(sino_an) # ideal reconstruction FBPrec_error = RectoolsDIR.FBP( noisy_zing_stripe) # reconstruction with artifacts FBPrec_misalign = RectoolsDIR.FBP( noisy_sino_misalign) # reconstruction with misalignment plt.figure() plt.subplot(131) plt.imshow(FBPrec_ideal, vmin=0, vmax=1, cmap="gray") plt.colorbar(ticks=[0, 0.5, 1], orientation='vertical') plt.title('Ideal FBP reconstruction') plt.subplot(132) plt.imshow(FBPrec_error, vmin=0, vmax=1, cmap="gray") plt.colorbar(ticks=[0, 0.5, 1], orientation='vertical') plt.title('Erroneous data FBP Reconstruction') plt.subplot(133)
print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") #x = Atools.backproj(sino_an) # generate backprojection (A'b) plt.figure() plt.subplot(121) plt.imshow(sino_an, cmap="BuPu") plt.title('Analytical sinogram') plt.subplot(122) plt.imshow(sino_num_ASTRA, cmap="BuPu") plt.title('Numerical sinogram') plt.show() #calculate norm #rmse1 = np.linalg.norm(sino_an - sino_num_ASTRA)/np.linalg.norm(sino_num_ASTRA) print("Reconstructing analytical sinogram using FBP (astra TB)...") FBPrec1 = Rectools.FBP(sino_an) plt.figure() plt.imshow(FBPrec1, vmin=0, vmax=1, cmap="BuPu") plt.colorbar(ticks=[0, 0.5, 1], orientation='vertical') plt.title('FBP Reconstructed Phantom (analyt)') print("Reconstructing numerical sinogram using FBP (astra TB)...") FBPrec2 = Rectools.FBP(sino_num_ASTRA) plt.figure() plt.imshow(FBPrec2, vmin=0, vmax=1, cmap="BuPu") plt.colorbar(ticks=[0, 0.5, 1], orientation='vertical') plt.title('FBP Reconstructed Phantom (numeric)') plt.figure() plt.imshow(abs(FBPrec1 - FBPrec2), vmin=0, vmax=0.05, cmap="BuPu")
plt.title('Sinogram view') plt.subplot(133) plt.imshow(projData3D_norm[:,:,sliceSel],vmin=0, vmax=intens_max) plt.title('Tangentogram view') plt.show() #%% # initialise tomobar DIRECT reconstruction class ONCE from tomobar.methodsDIR import RecToolsDIR RectoolsDIR = RecToolsDIR(DetectorsDimH = Horiz_det, # DetectorsDimH # detector dimension (horizontal) DetectorsDimV = Vert_det, # DetectorsDimV # detector dimension (vertical) for 3D case only AnglesVec = angles_rad, # array of angles in radians ObjSize = N_size, # a scalar to define reconstructed object dimensions device = 'gpu') #%% print ("Reconstruction using FBP from tomobar") recNumerical= RectoolsDIR.FBP(projData3D_norm) # FBP reconstruction sliceSel = int(0.5*N_size) max_val = 1 #plt.gray() plt.figure() plt.subplot(131) plt.imshow(recNumerical[sliceSel,:,:],vmin=0, vmax=max_val) plt.title('3D Reconstruction, axial view') plt.subplot(132) plt.imshow(recNumerical[:,sliceSel,:],vmin=0, vmax=max_val) plt.title('3D Reconstruction, coronal view') plt.subplot(133) plt.imshow(recNumerical[:,:,sliceSel],vmin=0, vmax=max_val)
N_size = 1000 slice_to_recon = 19 # select which slice to reconstruct angles_rad = angles[:,0]*(np.pi/180.0) #%% print ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print ("%%%%%%%%%%%%Reconstructing with FBP method %%%%%%%%%%%%%%%%%") print ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") from tomobar.methodsDIR import RecToolsDIR RectoolsDIR = RecToolsDIR(DetectorsDimH = detectorHoriz, # Horizontal detector dimension DetectorsDimV = None, # Vertical detector dimension (3D case) CenterRotOffset = None, # Center of Rotation scalar AnglesVec = angles_rad, # A vector of projection angles in radians ObjSize = N_size, # Reconstructed object dimensions (scalar) device_projector='gpu') FBPrec = RectoolsDIR.FBP(data_norm[slice_to_recon,:,:]) fig = plt.figure() plt.imshow(FBPrec[100:900,100:900], vmin=0, vmax=0.004, cmap="gray") plt.title('FBP reconstruction') #fig.savefig('dendr_FPP.png', dpi=200) #%% print ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print ("Reconstructing with FISTA PWLS-OS-TV method %%%%%%%%%%%%%%%%") print ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") from tomobar.methodsIR import RecToolsIR # Set scanning geometry parameters and initiate a class object Rectools = RecToolsIR(DetectorsDimH = detectorHoriz, # Horizontal detector dimension DetectorsDimV = None, # Vertical detector dimension (3D case) CenterRotOffset = None, # Center of Rotation scalar AnglesVec = angles_rad, # A vector of projection angles in radians
plt.colorbar(ticks=[0, 150, 250], orientation='vertical') plt.title('{}''{}'.format('Analytical noisy sinogram',model)) #%% print ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print ("%%%%%%%%%%%%%%Reconstructing with FBP method %%%%%%%%%%%%%%%") print ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") from tomobar.methodsDIR import RecToolsDIR RectoolsDIR = RecToolsDIR(DetectorsDimH = P, # DetectorsDimH # detector dimension (horizontal) DetectorsDimV = None, # DetectorsDimV # detector dimension (vertical) for 3D case only CenterRotOffset = None, # Center of Rotation (CoR) scalar (for 3D case only) AnglesVec = angles_rad, # array of angles in radians ObjSize = N_size, # a scalar to define reconstructed object dimensions device='gpu') FBPrec = RectoolsDIR.FBP(noisy_sino) #perform FBP plt.figure() plt.rcParams.update({'font.size': 20}) plt.imshow(FBPrec, vmin=0, vmax=1, cmap="gray") plt.colorbar(ticks=[0, 0.5, 1], orientation='vertical') plt.title('FBP reconstruction') #%% print ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print ("Reconstructing with FISTA method (ASTRA used for projection)") print ("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") from tomobar.methodsIR import RecToolsIR # set parameters and initiate a class object Rectools = RecToolsIR(DetectorsDimH = P, # DetectorsDimH # detector dimension (horizontal) DetectorsDimV = None, # DetectorsDimV # detector dimension (vertical) for 3D case only
from tomobar.methodsDIR import RecToolsDIR N_size = 2000 det_y_crop = [i for i in range(0, 2374)] RectoolsDIR = RecToolsDIR( DetectorsDimH=np.size( det_y_crop), # DetectorsDimH # detector dimension (horizontal) DetectorsDimV= None, # DetectorsDimV # detector dimension (vertical) for 3D case only CenterRotOffset=None, # Center of Rotation (CoR) scalar (for 3D case only) AnglesVec=angles_rad, # array of angles in radians ObjSize=N_size, # a scalar to define reconstructed object dimensions device_projector='gpu') FBPrec = RectoolsDIR.FBP(data_norm[:, det_y_crop]) plt.figure() #plt.imshow(FBPrec[500:1500,500:1500], vmin=0, vmax=1, cmap="gray") plt.imshow(FBPrec, vmin=0, vmax=1, cmap="gray") plt.title('FBP reconstruction') #%% from tomobar.methodsIR import RecToolsIR # set parameters and initiate a class object Rectools = RecToolsIR( DetectorsDimH=np.size( det_y_crop), # DetectorsDimH # detector dimension (horizontal) DetectorsDimV= None, # DetectorsDimV # detector dimension (vertical) for 3D case only
angles_number, detectorHoriz = np.shape(data_norm) #%% print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print("%%%%%%%%%%%%Reconstructing with FBP method %%%%%%%%%%%%%%%%%") print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") from tomobar.methodsDIR import RecToolsDIR RectoolsDIR = RecToolsDIR( DetectorsDimH=detectorHoriz, # Horizontal detector dimension DetectorsDimV=None, # Vertical detector dimension (3D case) CenterRotOffset=92, # Center of Rotation scalar AnglesVec=angles_rad, # A vector of projection angles in radians ObjSize=N_size, # Reconstructed object dimensions (scalar) device_projector='gpu') FBPrec = RectoolsDIR.FBP(data_norm) plt.figure() #plt.imshow(FBPrec[500:1500,500:1500], vmin=0, vmax=1, cmap="gray") plt.imshow(FBPrec, vmin=0, vmax=1, cmap="gray") plt.title('FBP reconstruction') #%% from tomobar.methodsIR import RecToolsIR # set parameters and initiate a class object Rectools = RecToolsIR( DetectorsDimH=detectorHoriz, # Horizontal detector dimension DetectorsDimV=None, # Vertical detector dimension (3D case) CenterRotOffset=92, # Center of Rotation scalar AnglesVec=angles_rad, # A vector of projection angles in radians ObjSize=N_size, # Reconstructed object dimensions (scalar) datafidelity='PWLS', # Data fidelity, choose from LS, KL, PWLS
'percentage': 0.75, 'maxthickness': 2.0, 'intensity': 0.15, 'type': 'mix', 'variability': 0.005 } sino_num_artifacts = _Artifacts_(sino_num, _noise_, _zingers_, _stripes_, _sinoshifts_) plt.figure(3) plt.rcParams.update({'font.size': 21}) plt.imshow(sino_num_artifacts, cmap="BuPu") plt.title('{}'.format('Distorted Phantom')) #%% FBPrec = Rectools.FBP(sino_num_artifacts) # perform FBP reconstruction plt.figure() plt.rcParams.update({'font.size': 20}) plt.imshow(FBPrec, vmin=0, vmax=1, cmap="gray") plt.colorbar(ticks=[0, 0.5, 1], orientation='vertical') plt.title('FBP reconstruction') #%% from tomobar.methodsIR import RecToolsIR RectoolsIR = RecToolsIR( DetectorsDimH=P, # DetectorsDimH # detector dimension (horizontal) DetectorsDimV= None, # DetectorsDimV # detector dimension (vertical) for 3D case only CenterRotOffset=None, # Center of Rotation (CoR) scalar (for 3D case only) AnglesVec=angles_rad, # array of angles in radians ObjSize=N_size, # a scalar to define reconstructed object dimensions