image_fft_playground / generate_samples.py
Andrei Cozma
Updates
861a311
raw
history blame
2.97 kB
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")