File size: 2,974 Bytes
50413ea
 
 
 
 
 
 
a216b5c
861a311
 
50413ea
 
 
 
861a311
50413ea
 
 
 
 
861a311
50413ea
 
 
 
 
861a311
50413ea
 
 
 
 
 
 
 
 
 
861a311
50413ea
 
 
 
 
 
861a311
50413ea
 
 
861a311
50413ea
 
 
861a311
50413ea
861a311
50413ea
 
 
 
 
861a311
50413ea
861a311
50413ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import os

import numpy as np
from PIL import Image
from scipy.ndimage import gaussian_filter


def create_blank_image(size=512):
    img = np.ones((size, size)) * 255
    return img.astype(np.uint8)


def add_horizontal_lines(image, spacing=10):
    for i in range(0, image.shape[0], spacing):
        image[i, :] = 0
    return image


def add_vertical_lines(image, spacing=10):
    for i in range(0, image.shape[1], spacing):
        image[:, i] = 0
    return image


def add_diagonal_lines(image, spacing=10):
    for i in range(0, image.shape[0], spacing):
        np.fill_diagonal(image[i:, i:], 0)
    return image


# Add a circle to the image
def add_circle(image, radius=50):
    center_x, center_y = image.shape[1] // 2, image.shape[0] // 2
    y, x = np.ogrid[
        -center_y : image.shape[0] - center_y, -center_x : image.shape[1] - center_x
    ]
    mask = x * x + y * y <= radius * radius
    image[mask] = 0
    return image


def add_checkerboard(image, square_size=16):
    for i in range(0, image.shape[0], square_size * 2):
        for j in range(0, image.shape[1], square_size * 2):
            image[i : i + square_size, j : j + square_size] = 0
            image[
                i + square_size : i + square_size * 2,
                j + square_size : j + square_size * 2,
            ] = 0
    return image


def add_horizontal_sinusoidal(image, frequency=1 / 20, amplitude=255):
    x = np.linspace(0, 1, image.shape[1])
    y = np.sin(2 * np.pi * frequency * x) * amplitude
    for i in range(image.shape[0]):
        image[i, :] = y
    return image


def add_vertical_sinusoidal(image, frequency=1 / 20, amplitude=255):
    x = np.linspace(0, 1, image.shape[0])
    y = np.sin(2 * np.pi * frequency * x) * amplitude
    for i in range(image.shape[1]):
        image[:, i] = y
    return image


def add_random_noise(image, std_dev=50):
    noise = np.random.normal(0, std_dev, image.shape).astype(np.float32)
    image = image.astype(np.float32) + noise
    np.clip(image, 0, 255, out=image)
    image = image.astype(np.uint8)
    return image


def save_image(image, filename):
    image = Image.fromarray(image)
    image.save(filename)


savedir = "./images/"

os.makedirs(savedir, exist_ok=True)

save_image(create_blank_image(), savedir + "blank.png")
save_image(add_horizontal_lines(create_blank_image()), savedir + "horizontal.png")
save_image(add_vertical_lines(create_blank_image()), savedir + "vertical.png")
save_image(add_diagonal_lines(create_blank_image()), savedir + "diagonal.png")
save_image(add_circle(create_blank_image()), savedir + "circle.png")
save_image(add_checkerboard(create_blank_image()), savedir + "checkerboard.png")
save_image(
    add_horizontal_sinusoidal(create_blank_image()),
    savedir + "horizontal_sinusoidal.png",
)
save_image(
    add_vertical_sinusoidal(create_blank_image()), savedir + "vertical_sinusoidal.png"
)
save_image(add_random_noise(create_blank_image()), savedir + "random_noise.png")