# 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 datafidelity='PWLS',# data fidelity, choose LS, PWLS, GH (wip), Student (wip) nonnegativity='ENABLE', # enable nonnegativity constraint (set to 'ENABLE') OS_number = None, # the number of subsets, NONE/(or > 1) ~ classical / ordered subsets tolerance = 1e-08, # tolerance to stop outer iterations earlier device='gpu') # Run CGLS reconstrucion algorithm RecCGLS = Rectools.CGLS(data_norm[:,det_y_crop], iterations = 7) plt.figure() plt.imshow(RecCGLS, vmin=0, vmax=0.3, cmap="gray") plt.title('CGLS reconstruction') plt.show() #%% # Initialise FISTA-type PWLS reconstruction (run once) 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
device_projector='gpu') # prepare dictionaries with parameters: _data_ = { 'projection_norm_data': data_norm, 'projection_raw_data': data_raw, 'OS_number': 6 } # data dictionary lc = Rectools.powermethod( _data_) # calculate Lipschitz constant (run once to initialise) _algorithm_ = {'iterations': 20, 'lipschitz_const': lc} # Run CGLS reconstrucion algorithm RecCGLS = Rectools.CGLS(_data_, _algorithm_) plt.figure() plt.imshow(RecCGLS, vmin=0, vmax=0.3, cmap="gray") plt.title('CGLS reconstruction') plt.show() #%% print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") print("Reconstructing with FISTA PWLS-OS-TV method % %%%%%%%%%%%%%%") print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%") # adding regularisation _regularisation_ = { 'method': 'PD_TV', 'regul_param': 0.0012, 'iterations': 80, 'device_regulariser': 'gpu'
# 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 datafidelity='PWLS',# data fidelity, choose LS, PWLS, GH (wip), Student (wip) nonnegativity='ENABLE', # enable nonnegativity constraint (set to 'ENABLE') OS_number = None, # the number of subsets, NONE/(or > 1) ~ classical / ordered subsets tolerance = 1e-08, # tolerance to stop outer iterations earlier device='gpu') # Run CGLS reconstrucion algorithm RecCGLS = Rectools.CGLS(np.transpose(data_norm[det_y_crop,:,0]), iterations = 7) plt.figure() plt.imshow(RecCGLS, vmin=0, vmax=0.3, cmap="gray") plt.title('CGLS reconstruction') plt.show() #%% # Initialise FISTA-type PWLS reconstruction (run once) 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