ImageTransformationTool / bulk_bulge_generation.py
nick-leland's picture
Big grind session, still working on implimenting the model correctly
ef63822
raw
history blame
2.42 kB
import numpy as np
from PIL import Image
from transformation import apply_vector_field_transform
import os
from os import path
def definitions(generator):
# The image bulge should be entirly contained within the image. For instance, if we have a radius of 0.5 (the max), the image should be force to be at 0.5 (x and y) locations.
# radius = generator.random() * 0.5
radius = generator.normal(loc=0.25, scale=(0.5/6))
# print(f"Radius is {radius}")
# strengtH = Generator.random()
strength = generator.normal(loc=1, scale=(1/6))
# print(f"Strength is {strength}")
smoothness = generator.normal(loc=1, scale=(1/6))
# print(f"Smoothness is {smoothness}")
# size = 3
vmin = min([1-radius, radius])
vmax = max([1-radius, radius])
print()
print("Radius is {radius}")
print("Max and Min positions to calculate mean + std")
print(vmin)
print(vmax)
print()
print("Mean and Std Dev")
mean = (vmax+vmin) / 2
std = (vmax-vmin) / 4
print(mean)
print(std)
print()
# x = generator.normal(loc=mean, scale=std, size=(2))
x = np.random.uniform(low=vmin, high=vmax, size=(2))
# print(x)
# print(f"({np.random.uniform(vmin, vmax)}, {np.random.uniform(vmin, vmax)})")
# print(f"({x[0]}, {x[1]})")
return radius, x, strength, smoothness
def smooth(generator, strength):
# edge
emaxval, eminval = 0.75, 0.25
emean = (emaxval + eminval) / 2
estd = (emaxval - eminval) / 6
# center
cmaxval, cminval = 0.5, 0.25
cmean = (cmaxval + cminval) / 2
cstd = (cmaxval - cminval) / 4
edge = generator.normal(loc=emean, scale=estd)
center = generator.normal(loc=cmean, scale=cstd)
return edge, center
def bulge(x, y):
return -np.sqrt(x**2 + y**2)
if __name__ == "__main__":
# Sets the numpy generator
rng = np.random.default_rng()
os.chdir("data/")
os.makedirs("grid", exist_ok=True)
os.makedirs("output", exist_ok=True)
files = os.listdir("grid/")
os.chdir("grid/")
for _ in files:
rad, location, strth, smth = definitions(rng)
I = np.asarray(Image.open(_))
transformed, (gx, gy) = apply_vector_field_transform(I, bulge, rad, location, strth, smth)
os.chdir("../output/")
result = Image.fromarray(transformed)
result.save(f"{_.title()}.jpg")
os.chdir("../grid/")