Esempio n. 1
0
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"
Esempio n. 2
0
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')