in ocr/word_and_line_segmentation.py [0:0]
def augment_transform(image, label):
'''
1) Function that randomly translates the input image by +-width_range and +-height_range.
The labels (bounding boxes) are also translated by the same amount.
2) Each line can also be randomly removed for augmentation. Labels are also reduced to correspond to this
data and label are converted into tensors by calling the "transform" function.
'''
ty = random.uniform(-random_y_translation, random_y_translation)
tx = random.uniform(-random_x_translation, random_x_translation)
st = skimage_tf.SimilarityTransform(translation=(tx*image.shape[1], ty*image.shape[0]))
image = skimage_tf.warp(image, st, cval=1.0)
label[:, 0] = label[:, 0] - tx/2 #NOTE: Check why it has to be halfed (found experimentally)
label[:, 1] = label[:, 1] - ty/2
index = np.random.uniform(0, 1.0, size=label.shape[0]) > random_remove_box
for i, should_output_bb in enumerate(index):
if should_output_bb == False:
(x, y, w, h) = label[i]
(x1, y1, x2, y2) = (x, y, x + w, y + h)
(x1, y1, x2, y2) = (x1 * image.shape[1], y1 * image.shape[0],
x2 * image.shape[1], y2 * image.shape[0])
(x1, y1, x2, y2) = (int(x1), int(y1), int(x2), int(y2))
x1 = 0 if x1 < 0 else x1
y1 = 0 if y1 < 0 else y1
x2 = 0 if x2 < 0 else x2
y2 = 0 if y2 < 0 else y2
image_h, image_w = image.shape
x1 = image_w-1 if x1 >= image_w else x1
y1 = image_h-1 if y1 >= image_h else y1
x2 = image_w-1 if x2 >= image_w else x2
y2 = image_h-1 if y2 >= image_h else y2
image[y1:y2, x1:x2] = image[y1, x1]
augmented_labels = label[index, :]
return transform(image*255., augmented_labels)