Spaces:
Running
Running
import cv2 | |
import numpy as np | |
import random | |
def random_brightness_np(image, max_abs_change=50): | |
delta = random.uniform(-max_abs_change, max_abs_change) | |
return np.clip(image + delta, 0, 255) | |
def random_contrast_np(image, strength_range=[0.3, 1.5]): | |
delta = random.uniform(*strength_range) | |
mean = image.mean() | |
return np.clip((image - mean) * delta + mean, 0, 255) | |
def motion_blur_np(img, max_kernel_size=3): | |
# Either vertial, hozirontal or diagonal blur | |
mode = np.random.choice(["h", "v", "diag_down", "diag_up"]) | |
ksize = np.random.randint(0, (max_kernel_size + 1) / 2) * 2 + 1 # make sure is odd | |
center = int((ksize - 1) / 2) | |
kernel = np.zeros((ksize, ksize)) | |
if mode == "h": | |
kernel[center, :] = 1.0 | |
elif mode == "v": | |
kernel[:, center] = 1.0 | |
elif mode == "diag_down": | |
kernel = np.eye(ksize) | |
elif mode == "diag_up": | |
kernel = np.flip(np.eye(ksize), 0) | |
var = ksize * ksize / 16.0 | |
grid = np.repeat(np.arange(ksize)[:, np.newaxis], ksize, axis=-1) | |
gaussian = np.exp( | |
-(np.square(grid - center) + np.square(grid.T - center)) / (2.0 * var) | |
) | |
kernel *= gaussian | |
kernel /= np.sum(kernel) | |
img = cv2.filter2D(img, -1, kernel) | |
return np.clip(img, 0, 255) | |
def additive_gaussian_noise(image, stddev_range=[5, 95]): | |
stddev = random.uniform(*stddev_range) | |
noise = np.random.normal(size=image.shape, scale=stddev) | |
noisy_image = np.clip(image + noise, 0, 255) | |
return noisy_image | |
def photaug(img): | |
img = random_brightness_np(img) | |
img = random_contrast_np(img) | |
# img = additive_gaussian_noise(img) | |
img = motion_blur_np(img) | |
return img | |