def main(): print "Starting..." if not os.path.isdir('warp'): os.mkdir ( 'warp' ) if not os.path.isdir('warp/baked'): os.mkdir ( 'warp/baked' ) if not os.path.isdir('warp/warped'): os.mkdir ( 'warp/warped' ) arr = bak.calc() gx, gy = np.gradient(arr) field = np.zeros((N,N,Nz)).astype(np.uint8) + np.uint8(255) #global v #maxx = 100000 gx2 = np.zeros((N,N)) # vector field gy2 = np.zeros((N,N)) # vector field shx = gx.shape[0]-1 shy = gy.shape[1]-1 print "Computing vector field from baking..." # the same foreach z for i in range(0,N): for j in range(0,N): dist = np.sqrt(((i-N/2)*(i-N/2)+(j-N/2)*(j-N/2))) u = i*(shx/(np.float32(N)-1)) v = j*(shy/(np.float32(N)-1)) gx2[i,j] = gx[u,v]*dist gy2[i,j] = gy[u,v]*dist cageReal,cageNew,cageOrig = computeCages() I = Image.new('L',(N,Nz*N),0.0) print "Proving..." for i in range(3,N/24,1): cubr = 4*0.4/20 maxrank = cubr*N*N*Nz/(np.power(i,4.7)) if(maxrank >0): print i, maxrank for j in range(0,int(np.floor(maxrank))): shape(np.random.randint(0,N),np.random.randint(0,N),np.random.randint(0,Nz),i,field) else: break if(i%5==0): print "Saving proving..." for w in range(Nz): III = Image.frombuffer('L',(N,N), np.array(field[:,:,w]).astype(np.uint8),'raw','L',0,1) I.paste(III,(0,N*w)) print 'warp/proving'+str(i)+'.png' I.save('warp/proving'+str(i)+'.png') field2 = np.zeros((N,N,Nz)).astype(np.uint8) + np.uint8(255) k = float(10.0) print "Baking..." for x in range(0,N): for y in range(0,N): u = np.round(x+k*gx2[x,y]) v = np.round(y+k*gy2[x,y]) if(u < 0 or u >= N or v < 0 or v >= N): value = 100 else: for z in range(0,Nz): field2[x,y,z] = field[u,v,z] I3 = Image.new('L',(N/2,(N/2)*(Nz/2)),0.0) for w in range(Nz): I2 = Image.frombuffer('L',(N/2,N/2), 255-np.array(field2[N/4:N*3/4,N/4:N*3/4,w]).astype(np.uint8),'raw','L',0,1) I2.save('warp/baked/bakedslice'+str(w)+'.png') I3.paste(I2,(0,N*w)) print 'warp/baked'+str(i)+'.png' I3.save('warp/baked'+str(i)+'.png') field3 = np.zeros((N,N,Nz)).astype(np.uint8) + np.uint8(255) print "Warping..." for x in range(0,N): for y in range(0,N): barycoords = mvc([x,y],cageOrig) arr = np.zeros((2)).astype(np.float32) for h in range(len(barycoords)): arr += barycoords[h]*cageNew[h] arr = np.array(arr).astype(int) arr = np.clip(arr,0,N-1) for z in range(0,Nz): field3[x,y,z] = field2[int(arr[0]),int(arr[1]),z] #for h in range(len(cageReal)): #a = cageReal[h] #field3 = paint([a[0],a[1],10],N,field3) I3 = Image.new('L',(N,Nz*N),0.0) print "Saving Image..." for w in range(Nz): #I2 = Image.frombuffer('L',(N/2,N/2), np.array(field2[N/4:N*3/4,N/4:N*3/4,w]).astype(np.uint8),'raw','L',0,1) #I.paste(I2,(0,N/2*w)) II = Image.frombuffer('L',(N,N), np.array(field3[:,:,w]).astype(np.uint8),'raw','L',0,1) I2.save('warp/warped/warpedslice'+str(w)+'.png') I3.paste(II,(0,N*w)) #II = Image.frombuffer('L',(N,N), np.array(field3[:,:,w]).astype(np.uint8),'raw','L',0,1) #I3.paste(II,(0,N*w)) I3.save('warp/warped'+str(i)+'.png') print "Image "+ str(i) +" saved"
def main(): global I,gx,gy bufferr = np.zeros((N,N)).astype(np.uint8) print "Proving..." for i in range(3,N/20,1): cubr = f(i) maxrank = 0.4*N*N/cubr/(np.power(i,2.6)) if(maxrank >0): print i, maxrank for j in range(0,int(maxrank)): shape2(np.random.randint(0,N),np.random.randint(0,N),i) print "fractal"+str(i+1)+"Bread.png" I.save('warp/fractal'+str(i+1)+'Bread.png') data = np.array(I.getdata()).reshape((N,N)) p = 100 # Arbitrary shape, mean value coordinates cageOrig = np.array([[p,N-1-p],[N/2,N-1-p],[N/2+50,N-1-p],[N-1-p,N-1-p],[N-1-p,N/2+50],[N-1-p,N/2],[N-1-p,N/2-50],[N-1-p,p],[N/2+50,p],[N/2,p],[N/2-50,p],[p,p]]).astype(np.float32) cageReal = np.array(cageOrig) cageNew = np.array(cageOrig) # control points displacements trs=[[0,0],[15,20],[15,20],[30,0],[25,0],[20,0],[0,45],[0,40],[0,35],[0,20],[0,35],[0,40]] for i in range(len(cageOrig)): cageReal[i] = cageOrig[i]+trs[i] cageNew[i] = cageOrig[i]-trs[i] #print cageOrig #print cageReal #print cageNew #print satx #print saty sx = gx.shape[0] sy = gy.shape[0] gx2 = np.zeros((N,N)).astype(np.float32) # vector field gy2 = np.zeros((N,N)).astype(np.float32) # vector field print gx.shape print gy.shape #gx = np.vstack((gx[:sx/2],gx[sx/2+1:])) #gy = np.hstack((gy[:,:sy/2],gy[:,sy/2+1:])) print gx.shape print gy.shape shx = gx.shape[0]-1 shy = gx.shape[1]-1 for i in range(0,N): for j in range(0,N): dist = np.sqrt(((i-N/2)*(i-N/2)+(j-N/2)*(j-N/2))) u = np.round(i*(shx/(np.float32(N)-1))).astype(np.int32) v = np.round(j*(shy/(np.float32(N)-1))).astype(np.int32) gx2[i,j] = gx[u,v]*dist gy2[i,j] = gy[u,v]*dist shx = gx.shape[0] shy = gy.shape[1] print "Baking.." d = 2 k = 20 for x in range(0,N): for y in range(0,N): u = np.round(x+k*gx2[x,y]) v = np.round(y+k*gy2[x,y]) if(u < 0 or u >= N or v < 0 or v >= N): value = 0 else: bufferr[x,y] = data[u,v] I2 = Image.new("L",(N,N)) for x in range(N): for y in range(N): I2.putpixel((x,y),bufferr[x,y]) print "fractal"+str(i)+"Bread.png" I2.save('warp/fractal'+str(i)+'Bread.png') #exit() print "Warping.." bufferr2 = np.zeros((N,N)) for x in range(0,N): for y in range(0,N): barycoords = mvc([x,y],cageOrig) value = 0 v = np.zeros((2)).astype(np.float32) #v = barycoords*cageNew for h in range(len(barycoords)): v += barycoords[h]*cageNew[h] v = np.array(v).astype(int) v = np.clip(v,0,N-1) bufferr2[x,y] = bufferr[int(v[0]),int(v[1])] I3 = Image.new("L",(N,N)) for x in range(N): for y in range(N): I3.putpixel((x,y),bufferr2[x,y]) #map(lambda i: paint(i,N,I3), cageReal) print "Image saving...", i I3.save('warp/fractalBreadWarp'+str(i)+'.png')