Exemple #1
0
 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))])
Exemple #2
0
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])
Exemple #3
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)),
         ]
     )
Exemple #4
0
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)
Exemple #5
0
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
    }
Exemple #6
0
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
    }