import os import numpy as np from PIL import Image from scipy.ndimage import gaussian_filter def create_blank_image(size=256): 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")