File size: 1,689 Bytes
a80d6bb
 
 
 
 
 
 
 
 
c74a070
a80d6bb
 
 
 
 
c74a070
a80d6bb
 
c74a070
 
 
a80d6bb
c74a070
 
 
 
 
a80d6bb
c74a070
a80d6bb
c74a070
a80d6bb
c74a070
 
 
a80d6bb
 
 
 
 
c74a070
a80d6bb
 
 
 
 
 
c74a070
a80d6bb
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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