sino_an = TomoP2D.ModelSino(model, N_size, P, angles, path_library2D) plt.figure(2) plt.rcParams.update({'font.size': 21}) plt.imshow(sino_an, cmap="gray") plt.colorbar(ticks=[0, 150, 250], orientation='vertical') plt.title('{}' '{}'.format('Analytical sinogram of model no.', model)) #%% # Adding artifacts and noise from tomophantom.supp.artifacts import _Artifacts_ # adding noise and data misalignment noisy_sino_misalign = _Artifacts_(sinogram = sino_an, \ noise_type='Poisson', noise_sigma=10000, noise_seed = 0, \ sinoshifts_maxamplitude = 10) # adding zingers, stripes and noise noisy_zing_stripe = _Artifacts_(sinogram = sino_an, \ noise_type='Poisson', noise_sigma=10000, noise_seed = 0, \ zingers_percentage=0.25, zingers_modulus = 10, stripes_percentage = 1.0, stripes_maxthickness = 1.0) plt.figure() plt.rcParams.update({'font.size': 21}) plt.imshow(noisy_zing_stripe, cmap="gray") plt.colorbar(ticks=[0, 150, 250], orientation='vertical') plt.title('{}' '{}'.format('Analytical noisy sinogram with artifacts.', model)) #%% # initialise tomobar DIRECT reconstruction class ONCE
plt.show() # Projection geometry related parameters: Horiz_det = int(np.sqrt(2) * N_size) # detector column count (horizontal) Vert_det = N_size # detector row count (vertical) (no reason for it to be > N) angles_num = int(0.25 * np.pi * N_size) # angles number angles = np.linspace(0.0, 179.9, angles_num, dtype='float32') # in degrees angles_rad = angles * (np.pi / 180.0) print("Generate 3D analytical projection data with TomoPhantom") projData3D_analyt = TomoP3D.ModelSino(model, N_size, Horiz_det, Vert_det, angles, path_library3D) # adding noise projData3D_analyt_noise = _Artifacts_(sinogram = projData3D_analyt, \ noise_type='Poisson', noise_sigma=8000, noise_seed = 0) intens_max = 45 sliceSel = int(0.5 * N_size) plt.figure() plt.subplot(131) plt.imshow(projData3D_analyt_noise[:, sliceSel, :], vmin=0, vmax=intens_max) plt.title('2D Projection (analytical)') plt.subplot(132) plt.imshow(projData3D_analyt_noise[sliceSel, :, :], vmin=0, vmax=intens_max) plt.title('Sinogram view') plt.subplot(133) plt.imshow(projData3D_analyt_noise[:, :, sliceSel], vmin=0, vmax=intens_max) plt.title('Tangentogram view') plt.show()
} # adding zingers and stripes _zingers_ = {'percentage': 0.25, 'modulus': 10} _stripes_ = { 'percentage': 1.0, 'maxthickness': 3.0, 'intensity': 0.3, 'type': 'full', 'variability': 0.005 } projData3D_analyt_noisy = _Artifacts_(projData3D_analyt, _noise_, _zingers_, _stripes_, _sinoshifts_={}) intens_max = 70 sliceSel = int(0.5 * N_size) plt.figure() plt.subplot(131) plt.imshow(projData3D_analyt_noisy[:, sliceSel, :], vmin=0, vmax=intens_max) plt.title('2D Projection (erroneous)') plt.subplot(132) plt.imshow(projData3D_analyt_noisy[sliceSel, :, :], vmin=0, vmax=intens_max) plt.title('Sinogram view') plt.subplot(133) plt.imshow(projData3D_analyt_noisy[:, :, sliceSel], vmin=0, vmax=intens_max) plt.title('Tangentogram view')
plt.colorbar(ticks=[0, 150, 250], orientation='vertical') plt.title('{}' '{}'.format('Analytical sinogram of model no.', model)) indicesROI = phantom_2D > 0 #%% # Adding noise from tomophantom.supp.artifacts import _Artifacts_ # forming dictionaries with artifact types _noise_ = { 'noise_type': 'Poisson', 'noise_sigma': 10000, # noise amplitude 'noise_seed': 0 } noisy_sino = _Artifacts_(sino_an, **_noise_) plt.figure() plt.rcParams.update({'font.size': 21}) plt.imshow(noisy_sino, cmap="gray") 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
# forming dictionaries with artifact types _noise_ = { 'type': 'Poisson', 'sigma': 10000, # noise amplitude 'seed': 0 } _stripes_ = { 'percentage': 1.5, 'maxthickness': 2.0, 'intensity': 0.02, 'type': 'full', 'variability': 0.01 } projData3D_analyt_noisy = _Artifacts_(projData3D_analyt, _noise_, {}, _stripes_, {}) intens_max = 70 sliceSel = int(0.5 * N_size) 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() #%%
Horiz_det = int(np.sqrt(2)*N_size) # detector column count (horizontal) Vert_det = N_size # detector row count (vertical) (no reason for it to be > N) angles_num = int(0.25*np.pi*N_size); # angles number angles = np.linspace(0.0,179.9,angles_num,dtype='float32') # in degrees angles_rad = angles*(np.pi/180.0) print ("Generate 3D analytical projection data with TomoPhantom") projData3D_analyt= TomoP3D.ModelSino(model, N_size, Horiz_det, Vert_det, angles, path_library3D) # adding noise _noise_ = {'noise_type' : 'Poisson', 'noise_sigma' : 8000, # noise amplitude 'noise_seed' : 0} projData3D_analyt_noise = _Artifacts_(projData3D_analyt, **_noise_) intens_max = 45 sliceSel = int(0.5*N_size) plt.figure() plt.subplot(131) plt.imshow(projData3D_analyt_noise[:,sliceSel,:],vmin=0, vmax=intens_max) plt.title('2D Projection (analytical)') plt.subplot(132) plt.imshow(projData3D_analyt_noise[sliceSel,:,:],vmin=0, vmax=intens_max) plt.title('Sinogram view') plt.subplot(133) plt.imshow(projData3D_analyt_noise[:,:,sliceSel],vmin=0, vmax=intens_max) plt.title('Tangentogram view') plt.show()
plt.title('{}' '{}'.format('Analytical sinogram of model no.', model)) #%% # Adding artifacts and noise from tomophantom.supp.artifacts import _Artifacts_ plt.close('all') # forming dictionaries with artifact types _noise_ = { 'noise_type': 'Poisson', 'noise_sigma': 10000, # noise amplitude 'noise_seed': 0 } # misalignment dictionary _sinoshifts_ = {'sinoshifts_maxamplitude': 10} [noisy_sino_misalign, shifts] = _Artifacts_(sino_an, **_noise_, **_sinoshifts_) # adding zingers and stripes _zingers_ = {'zingers_percentage': 2, 'zingers_modulus': 10} _stripes_ = { 'stripes_percentage': 0.8, 'stripes_maxthickness': 2.0, 'stripes_intensity': 0.25, 'stripes_type': 'full', 'stripes_variability': 0.002 } noisy_zing_stripe = _Artifacts_(sino_an, **_noise_, **_zingers_, **_stripes_) plt.figure()
# forming dictionaries with artifact types _noise_ = { 'noise_type': 'Poisson', 'noise_sigma': 10000, # noise amplitude 'noise_seed': 0 } _stripes_ = { 'stripes_percentage': 1.2, 'stripes_maxthickness': 3.0, 'stripes_intensity': 0.25, 'stripes_type': 'mix', 'stripes_variability': 0.005 } projData3D_analyt_noisy = _Artifacts_(projData3D_analyt, **_noise_, **_stripes_) intens_max = 70 sliceSel = int(0.5 * N_size) 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() #%%
#%% # Adding artifacts and noise from tomophantom.supp.artifacts import _Artifacts_ # forming dictionaries with artifact types _noise_ = { 'noise_type': 'Poisson', 'noise_sigma': 5000, # noise amplitude 'noise_seed': 0, 'noise_prelog': True } # misalignment dictionary _sinoshifts_ = {'sinoshifts_maxamplitude': 10} [[sino_misalign, sino_misalign_raw], shifts] = _Artifacts_(sino_an, **_noise_, **_sinoshifts_) # adding zingers and stripes _zingers_ = {'zingers_percentage': 0.25, 'zingers_modulus': 10} _stripes_ = { 'stripes_percentage': 1.2, 'stripes_maxthickness': 3.0, 'stripes_intensity': 0.3, 'stripes_type': 'full' } [sino_artifacts, sino_artifacts_raw] = _Artifacts_(sino_an, **_noise_, **_zingers_, **_stripes_) plt.figure()
plt.title('Sinogram view') plt.subplot(133) plt.imshow(projData3D_analyt[:,:,sliceSel],vmin=0, vmax=intens_max) plt.title('Tangentogram view') plt.show() # Adding artifacts and noise # forming dictionaries with artifact types _noise_ = {'noise_type' : 'Poisson', 'noise_sigma' : 10000, # noise amplitude 'noise_seed' : 0, 'noise_prelog': True} # misalignment dictionary _datashifts_ = {'datashifts_maxamplitude_pixel' : 10} [[projData3D_analyt_misalign, projData3D_analyt_misalign_raw], shifts2D] = _Artifacts_(projData3D_analyt, **_noise_, **_datashifts_) # adding zingers and stripes _zingers_ = {'zingers_percentage' : 0.25, 'zingers_modulus' : 10} _stripes_ = {'stripes_percentage' : 1.2, 'stripes_maxthickness' : 3.0, 'stripes_intensity' : 0.3, 'stripes_type' : 'full', 'stripes_variability' : 0.005} [projData3D_analyt_noisy, projData3D_raw] = _Artifacts_(projData3D_analyt, **_noise_, **_zingers_, **_stripes_) intens_max = 70 sliceSel = int(0.5*N_size)
plt.rcParams.update({'font.size': 21}) plt.imshow(sino_an, cmap="gray") plt.colorbar(ticks=[0, 150, 250], orientation='vertical') plt.title('{}' '{}'.format('Analytical sinogram of model no.', model)) #%% # Adding noise from tomophantom.supp.artifacts import _Artifacts_ # forming dictionaries with artifact types _noise_ = { 'type': 'Poisson', 'sigma': 8000, # noise amplitude 'seed': 0 } noisy_sino = _Artifacts_(sino_an, _noise_, {}, {}, {}) plt.figure() plt.rcParams.update({'font.size': 21}) plt.imshow(noisy_sino, cmap="gray") 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=
angles = np.linspace(0.0, 179.9, angles_num, dtype='float32') # in degrees angles_rad = angles * (np.pi / 180.0) print("Generate 3D analytical projection data with TomoPhantom") projData3D_analyt = TomoP3D.ModelSino(model, N_size, Horiz_det, Vert_det, angles, path_library3D) # adding noise # forming dictionaries with artifact types _noise_ = { 'type': 'Poisson', 'sigma': 8000, # noise amplitude 'seed': 0 } projData3D_analyt_noise = _Artifacts_(projData3D_analyt, _noise_, {}, {}, {}) intens_max = 45 sliceSel = int(0.5 * N_size) plt.figure() plt.subplot(131) plt.imshow(projData3D_analyt_noise[:, sliceSel, :], vmin=0, vmax=intens_max) plt.title('2D Projection (analytical)') plt.subplot(132) plt.imshow(projData3D_analyt_noise[sliceSel, :, :], vmin=0, vmax=intens_max) plt.title('Sinogram view') plt.subplot(133) plt.imshow(projData3D_analyt_noise[:, :, sliceSel], vmin=0, vmax=intens_max) plt.title('Tangentogram view') plt.show() #%%
def process_frames(self, data): # print "The input data shape is", data[0].shape if (self.out_shape_sino[1] == 1): # create a 2D phantom model = TomoP2D.Model(self.model, self.dims, self.path_library2D) # create a 2D sinogram projdata_clean = TomoP2D.ModelSino(self.model, self.dims, self.detectors_num, self.angles, self.path_library2D) # Adding artifacts and noise # forming dictionaries with artifact types _noise_ = { 'type': self.parameters['artifacts_noise_type'], 'sigma': self.parameters['artifacts_noise_sigma'], 'seed': 0, 'prelog': False } # misalignment dictionary _sinoshifts_ = {} if self.parameters[ 'artifacts_misalignment_maxamplitude'] is not None: _sinoshifts_ = { 'maxamplitude': self.parameters['artifacts_misalignment_maxamplitude'] } # adding zingers and stripes _zingers_ = {} if self.parameters['artifacts_zingers_percentage'] is not None: _zingers_ = { 'percentage': self.parameters['artifacts_zingers_percentage'], 'modulus': 10 } _stripes_ = {} if self.parameters['artifacts_stripes_percentage'] is not None: _stripes_ = { 'percentage': self.parameters['artifacts_stripes_percentage'], 'maxthickness': self.parameters['artifacts_stripes_maxthickness'], 'intensity': self.parameters['artifacts_stripes_intensity'], 'type': self.parameters['artifacts_stripes_type'], 'variability': self.parameters['artifacts_stripes_variability'] } if self.parameters[ 'artifacts_misalignment_maxamplitude'] is not None: [projdata, shifts] = _Artifacts_(projdata_clean, _noise_, _zingers_, _stripes_, _sinoshifts_) else: projdata = _Artifacts_(projdata_clean, _noise_, _zingers_, _stripes_, _sinoshifts_) else: # create a 3D phantom frame_idx = self.out_pData[0].get_current_frame_idx()[0] model = TomoP3D.ModelSub(self.model, self.dims, (frame_idx, frame_idx + 1), self.path_library3D) model = np.swapaxes(model, 0, 1) model = np.flipud(model[:, 0, :]) # create a 3D projection data projdata_clean = TomoP3D.ModelSinoSub( self.model, self.dims, self.detectors_num, self.dims, (frame_idx, frame_idx + 1), self.angles, self.path_library3D) # Adding artifacts and noise # forming dictionaries with artifact types _noise_ = { 'type': self.parameters['artifacts_noise_type'], 'sigma': self.parameters['artifacts_noise_sigma'], 'seed': 0, 'prelog': False } # misalignment dictionary _sinoshifts_ = {} if self.parameters[ 'artifacts_misalignment_maxamplitude'] is not None: _sinoshifts_ = { 'maxamplitude': self.parameters['artifacts_misalignment_maxamplitude'] } # adding zingers and stripes _zingers_ = {} if self.parameters['artifacts_zingers_percentage'] is not None: _zingers_ = { 'percentage': self.parameters['artifacts_zingers_percentage'], 'modulus': 10 } _stripes_ = {} if self.parameters['artifacts_stripes_percentage'] is not None: _stripes_ = { 'percentage': self.parameters['artifacts_stripes_percentage'], 'maxthickness': self.parameters['artifacts_stripes_maxthickness'], 'intensity': self.parameters['artifacts_stripes_intensity'], 'type': self.parameters['artifacts_stripes_type'], 'variability': self.parameters['artifacts_stripes_variability'] } if self.parameters[ 'artifacts_misalignment_maxamplitude'] is not None: [projdata, shifts] = _Artifacts_(projdata_clean, _noise_, _zingers_, _stripes_, _sinoshifts_) else: projdata = _Artifacts_(projdata_clean, _noise_, _zingers_, _stripes_, _sinoshifts_) projdata = np.swapaxes(projdata, 0, 1) return [projdata, model]
angles_num = int(0.5 * np.pi * N_size) # angles number angles = np.linspace(0.0, 179.9, angles_num, dtype='float32') angles_rad = angles * (np.pi / 180.0) P = int(np.sqrt(2) * N_size) #detectors sino_an = TomoP2D.ModelSino(model, N_size, P, angles, path_library2D) # forming dictionaries with artifact types _noise_ = {'type': 'Gaussian', 'sigma': 3.5, 'seed': 1} # adding zingers _zingers_ = {'percentage': 0.3, 'modulus': 15} sino_an_noisy = _Artifacts_(sino_an, _noise_, _zingers_, _stripes_={}, _sinoshifts_={}) plt.figure(1) plt.rcParams.update({'font.size': 21}) plt.imshow(sino_an_noisy, cmap="BuPu") plt.title('{}' '{}'.format('Analytical sinogram of model no.', model)) print("Applying Median Filter in 2D...") pars = { 'input_data': sino_an_noisy, # input grayscale image 'kernel_size': 5 }
plt.colorbar(ticks=[0, 150, 250], orientation='vertical') plt.title('{}' '{}'.format('Analytical sinogram of model no.', model)) #%% # Adding artifacts and noise from tomophantom.supp.artifacts import _Artifacts_ # forming dictionaries with artifact types _noise_ = { 'type': 'Poisson', 'sigma': 10000, # noise amplitude 'seed': 0 } # misalignment dictionary _sinoshifts_ = {'maxamplitude': 10} noisy_sino_misalign = _Artifacts_(sino_an, _noise_, {}, {}, _sinoshifts_) # adding zingers and stripes _zingers_ = {'percentage': 0.25, 'modulus': 10} _stripes_ = { 'percentage': 0.8, 'maxthickness': 2.0, 'intensity': 0.25, 'type': 'full', 'variability': 0.002 } noisy_zing_stripe = _Artifacts_(sino_an, _noise_, _zingers_,
angles_rad = angles*(np.pi/180.0) P = int(np.sqrt(2)*N_size) #detectors sino_an = TomoP2D.ModelSino(model, N_size, P, angles, path_library2D) plt.figure(2) plt.rcParams.update({'font.size': 21}) plt.imshow(sino_an, cmap="gray") plt.colorbar(ticks=[0, 150, 250], orientation='vertical') plt.title('{}''{}'.format('Analytical sinogram of model no.',model)) #%% # Adding artifacts and noise from tomophantom.supp.artifacts import _Artifacts_ # adding noise noisy_sino = _Artifacts_(sinogram = sino_an, \ noise_type='Poisson', noise_sigma=10000, noise_seed = 0) plt.figure() plt.rcParams.update({'font.size': 21}) plt.imshow(noisy_sino,cmap="gray") 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)
'sigma': 0.1, # noise amplitude 'seed': None } # adding zingers and stripes _zingers_ = {'percentage': 0.5, 'modulus': 50} _stripes_ = { 'percentage': 1.2, 'maxthickness': 3.0, 'intensity': 0.25, 'type': 'partial', 'variability': 0.005 } Object = _Artifacts_(Object, _noise_, _zingers_, _stripes_, _sinoshifts_={}) Object = gaussian_filter(Object, sigma=3) plt.figure(2) plt.rcParams.update({'font.size': 21}) plt.imshow(Object, vmin=0, vmax=1, cmap="BuPu") plt.colorbar(ticks=[0, 0.5, 1], orientation='vertical') plt.title('{}'.format('Distorted Phantom')) #%% # Generate projection data of distorted phantom angles_num = int(np.pi * N_size) # angles number angles = np.linspace(0.0, 179.9, angles_num, dtype='float32')