def __init__(self): self.imgaug_transform = iaa.Multiply((1.5, 1.5), per_channel=False) self.augmentor_op = Operations.RandomContrast(probability=1, min_factor=1.5, max_factor=1.5) self.solt_stream = slc.Stream( [slt.ImageRandomContrast(p=1, contrast_range=(1.5, 1.5))])
def test_random_contrast_multiplies_the_data(img_5x5): img = img_5x5 dc = sld.DataContainer((img, ), 'I') ppl = slt.ImageRandomContrast(p=1, contrast_range=(2, 2)) dc_res = ppl(dc) assert np.array_equal(dc.data[0] * 2, dc_res.data[0])
def __init__(self): self.imgaug_transform = iaa.Sequential( [iaa.Multiply((1.5, 1.5), per_channel=False), iaa.Add((127, 127), per_channel=False)] ) self.augmentor_pipeline = Pipeline() self.augmentor_pipeline.add_operation( Operations.RandomBrightness(probability=1, min_factor=1.5, max_factor=1.5) ) self.augmentor_pipeline.add_operation(Operations.RandomContrast(probability=1, min_factor=1.5, max_factor=1.5)) self.solt_stream = slc.Stream( [ slt.ImageRandomBrightness(p=1, brightness_range=(127, 127)), slt.ImageRandomContrast(p=1, contrast_range=(1.5, 1.5)), ] )
def test_lut_transforms_raise_errors(value_range, to_catch): with pytest.raises(to_catch): slt.ImageGammaCorrection(gamma_range=value_range) with pytest.raises(to_catch): slt.ImageRandomContrast(contrast_range=value_range)
def train_test_transforms(conf, mean=None, std=None): trf = conf['training'] prob = trf['transform_probability'] crop_size = tuple(trf['crop_size']) # Training transforms if trf['uCT']: train_transforms = [ slt.RandomProjection(slc.Stream([ slt.RandomRotate(rotation_range=tuple(trf['rotation_range']), p=prob), slt.RandomScale(range_x=tuple(trf['scale_range']), range_y=tuple(trf['scale_range']), same=False, p=prob), slt.RandomShear(range_x=tuple(trf['shear_range']), range_y=tuple(trf['shear_range']), p=prob), slt.RandomTranslate(range_x=trf['translation_range'], range_y=trf['translation_range'], p=prob) ]), v_range=tuple(trf['v_range'])), # Spatial slt.RandomFlip(p=prob), slt.PadTransform(pad_to=crop_size), slt.CropTransform(crop_mode='r', crop_size=crop_size), # Intensity #slt.ImageGammaCorrection(gamma_range=tuple(trf['gamma_range']), p=prob), #slt.ImageRandomHSV(h_range=tuple(trf['hsv_range']), # s_range=tuple(trf['hsv_range']), # v_range=tuple(trf['hsv_range']), p=prob), # Brightness/contrast slc.SelectiveStream([ slt.ImageRandomBrightness(brightness_range=tuple( trf['brightness_range']), p=prob), slt.ImageRandomContrast(contrast_range=trf['contrast_range'], p=prob) ]), # Noise slc.SelectiveStream([ slt.ImageSaltAndPepper(p=prob, gain_range=trf['gain_range_sp']), slt.ImageAdditiveGaussianNoise( p=prob, gain_range=trf['gain_range_gn']), slc.SelectiveStream([ slt.ImageBlur(p=prob, blur_type='g', k_size=(3, 7, 11), gaussian_sigma=tuple(trf['sigma'])), slt.ImageBlur(p=prob, blur_type='m', k_size=(3, 7, 11), gaussian_sigma=tuple(trf['sigma'])) ]) ]) ] else: train_transforms = [ # Projection slt.RandomProjection( slc.Stream([ slt.RandomRotate(rotation_range=tuple( trf['rotation_range']), p=prob), slt.RandomScale(range_x=tuple(trf['scale_range']), range_y=tuple(trf['scale_range']), same=False, p=prob), #slt.RandomShear(range_x=tuple(trf['shear_range']), # range_y=tuple(trf['shear_range']), p=prob), #slt.RandomTranslate(range_x=trf['translation_range'], range_y=trf['translation_range'], p=prob) ]), v_range=tuple(trf['v_range'])), # Spatial slt.RandomFlip(p=prob), slt.PadTransform(pad_to=crop_size[1]), slt.CropTransform(crop_mode='r', crop_size=crop_size), # Intensity # Add an empty stream #slc.SelectiveStream([]), slc.SelectiveStream([ slt.ImageGammaCorrection(gamma_range=tuple(trf['gamma_range']), p=prob), slt.ImageRandomHSV(h_range=tuple(trf['hsv_range']), s_range=tuple(trf['hsv_range']), v_range=tuple(trf['hsv_range']), p=prob) ]), slc.SelectiveStream([ slt.ImageRandomBrightness(brightness_range=tuple( trf['brightness_range']), p=prob), slt.ImageRandomContrast(contrast_range=trf['contrast_range'], p=prob) ]), slc.SelectiveStream([ slt.ImageSaltAndPepper(p=prob, gain_range=trf['gain_range_sp']), slt.ImageAdditiveGaussianNoise( p=prob, gain_range=trf['gain_range_gn']), slc.SelectiveStream([ slt.ImageBlur(p=prob, blur_type='g', k_size=(3, 7, 11), gaussian_sigma=tuple(trf['sigma'])), slt.ImageBlur(p=prob, blur_type='m', k_size=(3, 7, 11), gaussian_sigma=tuple(trf['sigma'])) ]) ]) ] train_trf = [ wrap_solt, #slc.Stream(train_transforms), slc.Stream([ slt.PadTransform(pad_to=crop_size[1]), slt.CropTransform(crop_mode='r', crop_size=crop_size) ]), unwrap_solt, ApplyTransform(numpy2tens, (0, 1, 2)) ] # Validation transforms val_trf = [ wrap_solt, slc.Stream([ slt.PadTransform(pad_to=crop_size[1]), slt.CropTransform(crop_mode='r', crop_size=crop_size) ]), unwrap_solt, ApplyTransform(numpy2tens, idx=(0, 1, 2)) ] # Test transforms test_trf = [unwrap_solt, ApplyTransform(numpy2tens, idx=(0, 1, 2))] # Use normalize_channel_wise if mean and std not calculated if mean is not None and std is not None: train_trf.append( ApplyTransform(partial(normalize_channel_wise, mean=mean, std=std))) if mean is not None and std is not None: val_trf.append( ApplyTransform(partial(normalize_channel_wise, mean=mean, std=std))) # Compose transforms train_trf_cmp = Compose(train_trf) val_trf_cmp = Compose(val_trf) test_trf_cmp = Compose(test_trf) return { 'train': train_trf_cmp, 'val': val_trf_cmp, 'test': test_trf_cmp, 'train_list': train_trf, 'val_list': val_trf, 'test_list': test_trf }
def train_test_transforms(conf, mean=None, std=None, crop_size=(512, 1024)): """ Compiles the different image augmentations that are used for input images. :param conf: Transformation parameters :param mean: Dataset image mean :param std: Dataset image std :param crop_size: Image size for the segmentation model :return: Compiled transformation objects, and lists of the used transforms """ trf = conf['training'] prob = trf['transform_probability'] # Training transforms # 3D transforms if trf['experiment'] == '3D': train_transforms = [ slc.SelectiveStream([ slc.Stream([ slt.RandomProjection( slc.Stream([ slt.RandomRotate(rotation_range=tuple( trf['rotation_range']), p=prob), slt.RandomScale(range_x=tuple(trf['scale_range']), range_y=tuple(trf['scale_range']), same=False, p=prob), #slt.RandomShear(range_x=tuple(trf['shear_range']), # range_y=tuple(trf['shear_range']), p=prob), slt.RandomTranslate( range_x=trf['translation_range'], range_y=trf['translation_range'], p=prob) ]), v_range=None #tuple(trf['v_range']) ), # Spatial slt.RandomFlip(p=prob), slt.PadTransform(pad_to=crop_size), slt.CropTransform(crop_mode='r', crop_size=crop_size), # Intensity # Brightness/contrast slc.SelectiveStream([ slt.ImageRandomBrightness(brightness_range=tuple( trf['brightness_range']), p=prob), slt.ImageRandomContrast( contrast_range=trf['contrast_range'], p=prob) ]), # Noise slc.SelectiveStream([ slt.ImageSaltAndPepper( p=prob, gain_range=trf['gain_range_sp']), slt.ImageAdditiveGaussianNoise( p=prob, gain_range=trf['gain_range_gn']), slc.SelectiveStream([ slt.ImageBlur(p=prob, blur_type='g', k_size=(3, 7, 11), gaussian_sigma=tuple(trf['sigma'])), slt.ImageBlur(p=prob, blur_type='m', k_size=(3, 7, 11), gaussian_sigma=tuple(trf['sigma'])) ]) ]) ]), # Empty stream slc.Stream([ slt.PadTransform(pad_to=crop_size), slt.CropTransform(crop_mode='r', crop_size=crop_size) ]) ]) ] # 2D transforms else: train_transforms = [ slc.SelectiveStream([ slc.Stream([ # Projection slt.RandomProjection( slc.Stream([ slt.RandomRotate(rotation_range=tuple( trf['rotation_range']), p=prob), slt.RandomScale(range_x=tuple(trf['scale_range']), range_y=tuple(trf['scale_range']), same=False, p=prob), # slt.RandomShear(range_x=tuple(trf['shear_range']), # range_y=tuple(trf['shear_range']), p=prob), slt.RandomTranslate( range_x=trf['translation_range'], range_y=trf['translation_range'], p=prob) ]), v_range=tuple(trf['v_range'])), # Spatial slt.RandomFlip(p=prob), slt.PadTransform(pad_to=crop_size), slt.CropTransform(crop_mode='r', crop_size=crop_size), # Intensity slc.SelectiveStream([ slt.ImageGammaCorrection(gamma_range=tuple( trf['gamma_range']), p=prob), slt.ImageRandomHSV(h_range=tuple(trf['hsv_range']), s_range=tuple(trf['hsv_range']), v_range=tuple(trf['hsv_range']), p=prob) ]), slc.SelectiveStream([ slt.ImageRandomBrightness(brightness_range=tuple( trf['brightness_range']), p=prob), slt.ImageRandomContrast( contrast_range=trf['contrast_range'], p=prob) ]), slc.SelectiveStream([ slt.ImageSaltAndPepper( p=prob, gain_range=trf['gain_range_sp']), slt.ImageAdditiveGaussianNoise( p=prob, gain_range=trf['gain_range_gn']), slc.SelectiveStream([ slt.ImageBlur(p=prob, blur_type='g', k_size=(3, 7, 11), gaussian_sigma=tuple(trf['sigma'])), slt.ImageBlur(p=prob, blur_type='m', k_size=(3, 7, 11), gaussian_sigma=tuple(trf['sigma'])) ]) ]) ]), # Empty stream slc.Stream([ slt.PadTransform(pad_to=crop_size), slt.CropTransform(crop_mode='r', crop_size=crop_size) ]) ]) ] # Compile training transforms train_trf = [ # Move to SOLT format wrap_solt, # Transforms slc.Stream(train_transforms), # Extract image unwrap_solt, # Move to tensor ApplyTransform(numpy2tens, (0, 1, 2)) ] # Validation transforms val_trf = [ wrap_solt, slc.Stream([ slt.PadTransform(pad_to=crop_size[1]), slt.CropTransform(crop_mode='r', crop_size=crop_size) ]), unwrap_solt, ApplyTransform(numpy2tens, idx=(0, 1, 2)) ] # Test transforms test_trf = [unwrap_solt, ApplyTransform(numpy2tens, idx=(0, 1, 2))] # Normalize train and val images if mean and std are given if mean is not None and std is not None: train_trf.append( ApplyTransform(partial(normalize_channel_wise, mean=mean, std=std))) if mean is not None and std is not None: val_trf.append( ApplyTransform(partial(normalize_channel_wise, mean=mean, std=std))) # Compose transforms train_trf_cmp = Compose(train_trf) val_trf_cmp = Compose(val_trf) test_trf_cmp = Compose(test_trf) return { 'train': train_trf_cmp, 'val': val_trf_cmp, 'test': test_trf_cmp, 'train_list': train_trf, 'val_list': val_trf, 'test_list': test_trf }