def test__draw_samples__tuple_as_hysteresis(self): seed = 1 nb_images = 10 aug = iaa.Canny( alpha=0.2, hysteresis_thresholds=([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], iap.DiscreteUniform(5, 100)), sobel_kernel_size=[3, 5, 7], random_state=iarandom.RNG(seed)) aug.alpha = remove_prefetching(aug.alpha) aug.hysteresis_thresholds = ( remove_prefetching(aug.hysteresis_thresholds[0]), remove_prefetching(aug.hysteresis_thresholds[1]) ) aug.sobel_kernel_size = remove_prefetching(aug.sobel_kernel_size) example_image = np.zeros((5, 5, 3), dtype=np.uint8) samples = aug._draw_samples([example_image] * nb_images, random_state=iarandom.RNG(seed)) alpha_samples = samples[0] hthresh_samples = samples[1] sobel_samples = samples[2] rss = iarandom.RNG(seed).duplicate(4) alpha_expected = iap.Deterministic(0.2).draw_samples((nb_images,), rss[0]) hthresh_expected = [None, None] hthresh_expected[0] = iap.Choice( [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]).draw_samples((nb_images,), rss[1]) # TODO simplify this to rss[2].randint(5, 100+1) # would currenlty be a bit more ugly, because DiscrUniform # samples two values for a and b first from rss[2] hthresh_expected[1] = iap.DiscreteUniform(5, 100).draw_samples( (nb_images,), rss[2]) hthresh_expected = np.stack(hthresh_expected, axis=-1) sobel_expected = iap.Choice([3, 5, 7]).draw_samples((nb_images,), rss[3]) invalid = hthresh_expected[:, 0] > hthresh_expected[:, 1] hthresh_expected[invalid, :] = hthresh_expected[invalid, :][:, [1, 0]] assert hthresh_expected.shape == (nb_images, 2) assert not np.any(hthresh_expected[:, 0] > hthresh_expected[:, 1]) assert np.allclose(alpha_samples, alpha_expected) assert np.allclose(hthresh_samples, hthresh_expected) assert np.allclose(sobel_samples, sobel_expected)
def example_unusual_distributions(): print("Example: Unusual Distributions") from imgaug import augmenters as iaa from imgaug import parameters as iap images = np.random.randint(0, 255, (16, 128, 128, 3), dtype=np.uint8) # Blur by a value sigma which is sampled from a uniform distribution # of range 0.1 <= x < 3.0. # The convenience shortcut for this is: iaa.GaussianBlur((0.1, 3.0)) blurer = iaa.GaussianBlur(iap.Uniform(0.1, 3.0)) images_aug = blurer.augment_images(images) # Blur by a value sigma which is sampled from a normal distribution N(1.0, 0.1), # i.e. sample a value that is usually around 1.0. # Clip the resulting value so that it never gets below 0.1 or above 3.0. blurer = iaa.GaussianBlur(iap.Clip(iap.Normal(1.0, 0.1), 0.1, 3.0)) images_aug = blurer.augment_images(images) # Same again, but this time the mean of the normal distribution is not constant, # but comes itself from a uniform distribution between 0.5 and 1.5. blurer = iaa.GaussianBlur( iap.Clip(iap.Normal(iap.Uniform(0.5, 1.5), 0.1), 0.1, 3.0)) images_aug = blurer.augment_images(images) # Use for sigma one of exactly three allowed values: 0.5, 1.0 or 1.5. blurer = iaa.GaussianBlur(iap.Choice([0.5, 1.0, 1.5])) images_aug = blurer.augment_images(images) # Sample sigma from a discrete uniform distribution of range 1 <= sigma <= 5, # i.e. sigma will have any of the following values: 1, 2, 3, 4, 5. blurer = iaa.GaussianBlur(iap.DiscreteUniform(1, 5)) images_aug = blurer.augment_images(images)
def test___init___custom_settings(self): aug = iaa.Canny( alpha=0.2, hysteresis_thresholds=([0, 1, 2], iap.DiscreteUniform(1, 10)), sobel_kernel_size=[3, 5], colorizer=iaa.RandomColorsBinaryImageColorizer( color_true=10, color_false=20) ) assert is_parameter_instance(aug.alpha, iap.Deterministic) assert isinstance(aug.hysteresis_thresholds, tuple) assert is_parameter_instance(aug.sobel_kernel_size, iap.Choice) assert isinstance(aug.colorizer, iaa.RandomColorsBinaryImageColorizer) assert np.isclose(aug.alpha.value, 0.2) assert len(aug.hysteresis_thresholds) == 2 assert is_parameter_instance(aug.hysteresis_thresholds[0], iap.Choice) assert aug.hysteresis_thresholds[0].a == [0, 1, 2] assert is_parameter_instance(aug.hysteresis_thresholds[1], iap.DiscreteUniform) assert np.isclose(aug.hysteresis_thresholds[1].a.value, 1) assert np.isclose(aug.hysteresis_thresholds[1].b.value, 10) assert is_parameter_instance(aug.sobel_kernel_size, iap.Choice) assert aug.sobel_kernel_size.a == [3, 5] assert is_parameter_instance(aug.colorizer.color_true, iap.Deterministic) assert is_parameter_instance(aug.colorizer.color_false, iap.Deterministic) assert aug.colorizer.color_true.value == 10 assert aug.colorizer.color_false.value == 20
def test___init___stochastic_parameters(self): colorizer = iaa.RandomColorsBinaryImageColorizer( color_true=iap.DiscreteUniform(0, 100), color_false=iap.Choice([200, 201, 202])) assert isinstance(colorizer.color_true, iap.DiscreteUniform) assert isinstance(colorizer.color_false, iap.Choice) assert colorizer.color_true.a.value == 0 assert colorizer.color_true.b.value == 100 assert colorizer.color_false.a[0] == 200 assert colorizer.color_false.a[1] == 201 assert colorizer.color_false.a[2] == 202
def test__draw_samples__tuple_as_hysteresis(self): seed = 1 nb_images = 10 aug = iaa.Canny( alpha=0.2, hysteresis_thresholds=([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], iap.DiscreteUniform(5, 100)), sobel_kernel_size=[3, 5, 7], random_state=np.random.RandomState(seed)) example_image = np.zeros((5, 5, 3), dtype=np.uint8) samples = aug._draw_samples([example_image] * nb_images, random_state=np.random.RandomState(seed)) alpha_samples = samples[0] hthresh_samples = samples[1] sobel_samples = samples[2] rss = ia.derive_random_states(np.random.RandomState(seed), 4) alpha_expected = [0.2] * nb_images hthresh_expected = ( rss[1].choice([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], size=(nb_images, )), # TODO simplify this to rss[2].randint(5, 100+1) # would currenlty be a bit more ugly, because DiscrUniform # samples two values for a and b first from rss[2] iap.DiscreteUniform(5, 100).draw_samples((nb_images, ), rss[2])) hthresh_expected = np.stack(hthresh_expected, axis=-1) sobel_expected = rss[3].choice([3, 5, 7], size=(nb_images, )) invalid = hthresh_expected[:, 0] > hthresh_expected[:, 1] hthresh_expected[invalid, :] = hthresh_expected[invalid, :][:, [1, 0]] assert hthresh_expected.shape == (nb_images, 2) assert not np.any(hthresh_expected[:, 0] > hthresh_expected[:, 1]) assert np.allclose(alpha_samples, alpha_expected) assert np.allclose(hthresh_samples, hthresh_expected) assert np.allclose(sobel_samples, sobel_expected)
def chapter_parameters_discrete(): ia.seed(1) # ----------------------- # Binomial # ----------------------- from imgaug import parameters as iap params = [iap.Binomial(0.5), iap.Binomial(0.9)] gridarr = draw_distributions_grid(params, rows=1) save("parameters", "continuous_binomial.jpg", gridarr) # ----------------------- # DiscreteUniform # ----------------------- from imgaug import parameters as iap params = [ iap.DiscreteUniform(0, 10), iap.DiscreteUniform(-10, 10), iap.DiscreteUniform([-10, -9, -8, -7], 10), iap.DiscreteUniform((-10, -7), 10) ] gridarr = draw_distributions_grid(params) save("parameters", "continuous_discreteuniform.jpg", gridarr) # ----------------------- # Poisson # ----------------------- from imgaug import parameters as iap params = [ iap.Poisson(1), iap.Poisson(2.5), iap.Poisson((1, 2.5)), iap.RandomSign(iap.Poisson(2.5)) ] gridarr = draw_distributions_grid(params) save("parameters", "continuous_poisson.jpg", gridarr)
def main(): image = ia.quokka(size=0.5) kps = [ia.KeypointsOnImage( [ia.Keypoint(x=245, y=203, vis=None, label=None), ia.Keypoint(x=365, y=195, vis=None, label=None), ia.Keypoint(x=313, y=269, vis=None, label=None)], shape=(image.shape[0]*2, image.shape[1]*2) )] kps[0] = kps[0].on(image.shape) print("image shape:", image.shape) augs = [ iaa.CropAndPad(px=50, name="pad-by-50px"), iaa.CropAndPad(px=(10, 20, 30, 40), name="pad-by-10-20-30-40px"), iaa.CropAndPad(percent=0.1, name="pad-by-01percent"), iaa.CropAndPad(percent=(0.01, 0.02, 0.03, 0.04), name="pad-by-001-002-003-004percent"), iaa.CropAndPad(px=-20, name="crop-by-20px"), iaa.CropAndPad(px=(-10, -20, -30, -40), name="crop-by-10-20-30-40px"), iaa.CropAndPad(percent=-0.1, name="crop-by-01percent"), iaa.CropAndPad(percent=(-0.01, -0.02, -0.03, -0.04), name="crop-by-001-002-003-004percent") ] augs_many = [ iaa.Crop(px=(0, 50), name="native-crop-0-to-50px"), iaa.Crop(px=iap.DiscreteUniform(0, 50), name="native-crop-0-to-50px-iap"), iaa.Pad(px=(0, 50), pad_mode="linear_ramp", pad_cval=(0, 255), name="native-pad-0-to-50px-pad-modes"), iaa.CropAndPad(px=(0, 50), sample_independently=False, name="pad-by-0-to-50px-same"), iaa.CropAndPad(px=(0, 50), name="pad-by-0-to-50px"), iaa.CropAndPad(px=(0, 50), pad_mode=ia.ALL, pad_cval=(0, 255), name="pad-by-0-to-50px-random-pad-modes-cvals"), iaa.CropAndPad(px=((0, 50), (0, 50), (0, 50), (0, 50)), name="pad-by-0-to-50px-each"), iaa.CropAndPad(percent=(0, 0.1), sample_independently=False, name="pad-by-0-to-01percent-same"), iaa.CropAndPad(percent=(0, 0.1), name="pad-by-0-to-01percent"), iaa.CropAndPad(percent=(0, 0.1), pad_mode=ia.ALL, pad_cval=(0, 255), name="pad-by-0-to-01percent-random-pad-modes-cvals"), iaa.CropAndPad(percent=((0, 0.1), (0, 0.1), (0, 0.1), (0, 0.1)), name="pad-by-0-to-01percent-each"), iaa.CropAndPad(px=(-50, 0), name="crop-by-50-to-0px"), iaa.CropAndPad(px=((-50, 0), (-50, 0), (-50, 0), (-50, 0)), name="crop-by-50-to-0px-each"), iaa.CropAndPad(percent=(-0.1, 0), name="crop-by-01-to-0percent"), iaa.CropAndPad(percent=((-0.1, 0), (-0.1, 0), (-0.1, 0), (-0.1, 0)), name="crop-by-01-to-0percent-each"), iaa.CropAndPad(px=(-50, 50), name="pad-and-crop-by-50px") ] print("original", image.shape) ia.imshow(kps[0].draw_on_image(image)) print("-----------------") print("Same aug per image") print("-----------------") for aug in augs: img_aug = aug.augment_image(image) kps_aug = aug.augment_keypoints(kps)[0] img_aug_kps = kps_aug.draw_on_image(img_aug) print(aug.name, img_aug_kps.shape, img_aug_kps.shape[1]/img_aug_kps.shape[0]) ia.imshow(img_aug_kps) print("-----------------") print("Random aug per image") print("-----------------") for aug in augs_many: images_aug = [] for _ in range(64): aug_det = aug.to_deterministic() img_aug = aug_det.augment_image(image) kps_aug = aug_det.augment_keypoints(kps)[0] img_aug_kps = kps_aug.draw_on_image(img_aug) img_aug_kps = np.pad(img_aug_kps, ((1, 1), (1, 1), (0, 0)), mode="constant", constant_values=255) images_aug.append(img_aug_kps) print(aug.name) ia.imshow(ia.draw_grid(images_aug))