import imageio,numpy as np
from skimage import transform,io
def randcoord(img_size_out,img_size=1024):
a=(.5+.1**6*np.random.randint(1,999999))*\
np.random.choice([-1,1],1)[0]
b=np.random.randint(3,10)
c=.1**3*np.random.randint(1,99)*\
np.random.choice([-1,1],1)[0]
t=np.arange(0,12*np.pi,1/7200)
fx=np.sin(t/6)+a*np.sin(b*t)*np.cos(t)-c*np.sin(16*b*t)
fy=np.cos(t/6)+a*np.sin(b*t)*np.sin(t)-c*np.cos(16*b*t)
fx=.05+.9*(fx-fx.min())/(fx.max()-fx.min())
fy=.05+.9*(fy-fy.min())/(fy.max()-fy.min())
f=np.array([[fx[i],fy[i]] for i in range(len(t))])
return f,np.around(a,6),b,np.around(c,3)
def interpolate_hypersphere(v1,v2,steps):
v1norm=np.linalg.norm(v1); v2norm=np.linalg.norm(v2)
v2normalized=v2*(v1norm/v2norm); vectors=[]
for step in range(steps):
interpolated=v1+(v2normalized-v1)*step/(steps-int(1))
interpolated_norm=np.linalg.norm(interpolated)
interpolated_normalized=\
interpolated*(v1norm/interpolated_norm)
vectors.append(interpolated_normalized)
def create_imgs(coords_int,img_size_out,img_size=1024):
for i in range(coords_int.shape[0]):
fx=coords_int[i,:,1]; fy=coords_int[i,:,0]
fx=np.array(np.clip(fx*img_size,0,img_size-1),
fy=np.array(np.clip(fy*img_size,0,img_size-1),
f=np.array([[fx[i],fy[i]] for i in range(len(fx))])
img=np.ones((img_size,img_size))
for [x,y] in f: img[x,y]=0
img=transform.resize(img,(img_size_out,img_size_out))
img_size_out=256; num_images=4; steps=10
sh=randcoord(img_size_out)[0].shape
coords=np.zeros((num_images,sh[0],sh[1]),dtype=np.float32)
labels=np.zeros((num_images,),dtype=np.int32)
targets=np.zeros((num_images,2),dtype=np.float32)
for i in range(num_images):
print('=>',end='',flush=True)
coord,a,b,c=randcoord(img_size_out)
labels[i],targets[i,0],targets[i,1]=b-3,a,c
[interpolate_hypersphere(coords[el[0]],coords[el[1]],steps)
for el in [[0,1],[1,2],[2,3],[3,2],[2,1],[1,0]]])
imgs=create_imgs(coords_int,img_size_out)
def mplot(imgs,i,fig_size=4):
imgs[i],figsize=(fig_size,fig_size),frame=False)
animate([mplot(imgs,i) for i in range(60)])
No comments:
Post a Comment