示例#1
0
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
示例#2
0
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()
示例#3
0
}

# 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')
示例#4
0
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
示例#5
0
# 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()
#%%
示例#6
0
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()
示例#8
0
# 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()
#%%
示例#9
0
#%%
# 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()
示例#10
0
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)
示例#11
0
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=
示例#12
0
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()
#%%
示例#13
0
    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]
示例#14
0
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
}
示例#15
0
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_,
示例#16
0
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)
示例#17
0
    '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')