From 342206d94317f058baa6fbc22bed0ee53ab38394 Mon Sep 17 00:00:00 2001 From: Tim Laibacher <tim.laibacher@idiap.ch> Date: Mon, 26 Aug 2019 10:11:39 +0200 Subject: [PATCH] Remove distortions --- bob/ip/binseg/data/transforms.py | 113 ------------------------------- 1 file changed, 113 deletions(-) diff --git a/bob/ip/binseg/data/transforms.py b/bob/ip/binseg/data/transforms.py index b81163fa..1336ff13 100644 --- a/bob/ip/binseg/data/transforms.py +++ b/bob/ip/binseg/data/transforms.py @@ -330,119 +330,6 @@ class RandomResizedCrop: return format_string -class Distortion: - """ - Applies random elastic distortion to a PIL Image, adapted from https://github.com/mdbloice/Augmentor/blob/master/Augmentor/Operations.py : - As well as the probability, the granularity of the distortions - produced by this class can be controlled using the width and - height of the overlaying distortion grid. The larger the height - and width of the grid, the smaller the distortions. This means - that larger grid sizes can result in finer, less severe distortions. - As well as this, the magnitude of the distortions vectors can - also be adjusted. - - Attributes - ---------- - grid_width : int - the width of the gird overlay, which is used by the class to apply the transformations to the image. Defaults to ``8`` - grid_height : int - the height of the gird overlay, which is used by the class to apply the transformations to the image. Defaults to ``8`` - magnitude : int - controls the degree to which each distortion is applied to the overlaying distortion grid. Defaults to ``1`` - - prob : float - probability that the operation is performend. Defaults to ``0.5`` - """ - def __init__(self,grid_width=8, grid_height=8, magnitude=1, prob=0.5): - self.grid_width = grid_width - self.grid_height = grid_height - self.magnitude = magnitude - self.prob = prob - - def _generatemesh(self, image): - w, h = image.size - horizontal_tiles = self.grid_width - vertical_tiles = self.grid_height - width_of_square = int(floor(w / float(horizontal_tiles))) - height_of_square = int(floor(h / float(vertical_tiles))) - width_of_last_square = w - (width_of_square * (horizontal_tiles - 1)) - height_of_last_square = h - (height_of_square * (vertical_tiles - 1)) - dimensions = [] - for vertical_tile in range(vertical_tiles): - for horizontal_tile in range(horizontal_tiles): - if vertical_tile == (vertical_tiles - 1) and horizontal_tile == (horizontal_tiles - 1): - dimensions.append([horizontal_tile * width_of_square, - vertical_tile * height_of_square, - width_of_last_square + (horizontal_tile * width_of_square), - height_of_last_square + (height_of_square * vertical_tile)]) - elif vertical_tile == (vertical_tiles - 1): - dimensions.append([horizontal_tile * width_of_square, - vertical_tile * height_of_square, - width_of_square + (horizontal_tile * width_of_square), - height_of_last_square + (height_of_square * vertical_tile)]) - elif horizontal_tile == (horizontal_tiles - 1): - dimensions.append([horizontal_tile * width_of_square, - vertical_tile * height_of_square, - width_of_last_square + (horizontal_tile * width_of_square), - height_of_square + (height_of_square * vertical_tile)]) - else: - dimensions.append([horizontal_tile * width_of_square, - vertical_tile * height_of_square, - width_of_square + (horizontal_tile * width_of_square), - height_of_square + (height_of_square * vertical_tile)]) - last_column = [] - for i in range(vertical_tiles): - last_column.append((horizontal_tiles-1)+horizontal_tiles*i) - last_row = range((horizontal_tiles * vertical_tiles) - horizontal_tiles, horizontal_tiles * vertical_tiles) - polygons = [] - for x1, y1, x2, y2 in dimensions: - polygons.append([x1, y1, x1, y2, x2, y2, x2, y1]) - polygon_indices = [] - for i in range((vertical_tiles * horizontal_tiles) - 1): - if i not in last_row and i not in last_column: - polygon_indices.append([i, i + 1, i + horizontal_tiles, i + 1 + horizontal_tiles]) - for a, b, c, d in polygon_indices: - dx = random.randint(-self.magnitude, self.magnitude) - dy = random.randint(-self.magnitude, self.magnitude) - x1, y1, x2, y2, x3, y3, x4, y4 = polygons[a] - polygons[a] = [x1, y1, - x2, y2, - x3 + dx, y3 + dy, - x4, y4] - x1, y1, x2, y2, x3, y3, x4, y4 = polygons[b] - polygons[b] = [x1, y1, - x2 + dx, y2 + dy, - x3, y3, - x4, y4] - x1, y1, x2, y2, x3, y3, x4, y4 = polygons[c] - polygons[c] = [x1, y1, - x2, y2, - x3, y3, - x4 + dx, y4 + dy] - x1, y1, x2, y2, x3, y3, x4, y4 = polygons[d] - polygons[d] = [x1 + dx, y1 + dy, - x2, y2, - x3, y3, - x4, y4] - generated_mesh = [] - for i in range(len(dimensions)): - generated_mesh.append([dimensions[i], polygons[i]]) - - return generated_mesh - - def __call__(self,*args): - if random.random() < self.prob: - # img, gt and mask have same resolution, we only generate mesh once: - mesh = self._generatemesh(args[0]) - imgs = [] - for img in args: - img = img.transform(img.size, Image.MESH, mesh, resample=Image.BICUBIC) - imgs.append(img) - return imgs - else: - return args - - class Resize: """Resize to given size. -- GitLab