예제 #1
0
def get(fixed=None, visualize=False, order=2, moving=None):
    """
    get point SSD similarity 
    """

    # data
    qf = fixed[0]

    N = qf.shape[0]
    DIM = qf.shape[1]

    ## visualization
    reggrid = None
    if visualize:
        plt.figure(0)
        plt.clf()
        plt.plot(qf[:, 0], qf[:, 1], "bo")

        if moving:  # moving points needed in order to find grid size
            qm = moving[0]
            reggrid = pg.getGrid(
                np.vstack((qf, qm))[:, 0].min() - 1,
                np.vstack((qf, qm))[:, 0].max() + 1,
                np.vstack((qf, qm))[:, 1].min() - 1,
                np.vstack((qf, qm))[:, 1].max() + 1,
                xpts=10,
                ypts=10,
            )
            pg.plotGrid(*reggrid)

    f = partial(psim, fixed=fixed, N=N, DIM=DIM, visualize=visualize, order=order, grid=reggrid)
    sim = {"f": f, "N": N, "DIM": DIM}

    return sim
예제 #2
0
def get(fixed=None, visualize=False, moving=None):
    """
    get point SSD similarity 
    """

    # data
    qf = fixed[0]

    N = qf.shape[0]
    DIM = qf.shape[1]
    
    ## visualization
    reggrid = None
    if visualize:
        if moving: # moving points needed in order to find grid size
            qm = moving[0]
            reggrid = pg.getGrid(np.vstack((qf,qm))[:,0].min()-1,np.vstack((qf,qm))[:,0].max()+1,np.vstack((qf,qm))[:,1].min()-1,np.vstack((qf,qm))[:,1].max()+1,xpts=40,ypts=40)
            #pg.plotGrid(*reggrid,coloring=True)

    f = partial(psim, fixed=fixed, moving=moving, N=N, DIM=DIM, visualize=visualize, grid=reggrid)
    sim = {'f': f, 'N': N, 'DIM': DIM}

    return sim
예제 #3
0
def get(pointsPerAxis, immname, imfname, immT=None, visualize=False, border=0, normalize=False, order=2, smoothscaleFactor=0.5, SIGMAF=2., h=None, splineS=None, visRes=25j):
    """
    get image similarity measure
    """

    logging.info("Image sim parameters: visualize %s, border %d, normalize %s, order %d, smoothscaleFactor %g, sigmaF %g, splineS %s, visRes %s",visualize,border,normalize,order,smoothscaleFactor,SIGMAF,splineS,visRes)

    # load
    imm = np.double(np.load(immname))
    imf = np.double(np.load(imfname))
    imshape = imf.shape

    Nx = np.shape(imm)[0]-2*border
    Ny = np.shape(imm)[1]-2*border
    assert Nx == Ny
    assert Nx > 0
    N = Nx*Ny
    
    Ns = pointsPerAxis**2 # sample points
    relsmoothscale = smoothscaleFactor/sqrt(Ns)
    if not h:
        h = sqrt(N)/sqrt(Ns) # length scale h, dist h between particles
    logging.info("h: " + str(h))
    smoothscale = relsmoothscale*sqrt(N)
    logging.info("smoothscale: " + str(smoothscale))
    SIGMA = SIGMAF*sqrt(N)/sqrt(Ns)
    logging.info("SIGMA: " + str(SIGMA))
    
    # smooth
    imms = smooth(imm, smoothscale)
    imfs = smooth(imf, smoothscale)

    # normalize
    if normalize:
        imms = imms-np.min(imms)
        if np.max(imms) > 1e-5:
            imms = imms/np.max(imms)
        imfs = imfs-np.min(imfs)
        if np.max(imfs) > 1e-5:
            imfs = imfs/np.max(imfs)
    # grid
    indent = Nx/(2*sqrt(Ns))
    sgrid = np.mgrid[border+indent:border+Nx-indent:complex(0,sqrt(Ns)),border+indent:border+Ny-indent:complex(0,sqrt(Ns))] 
    sgridxy = (sgrid[0,:,0], sgrid[0,0,:])

    # plot
    if visualize:
        # plotting setup
        mpl.rcParams['image.interpolation'] = 'nearest'
        mpl.rcParams['image.origin'] = 'lower'

        # splot befine spline interpolation
        plt.figure(0)
        plt.imshow(imfs.T)
        plt.figure(1)
        plt.imshow(imms.T)
        #plt.show(block=True)

    # spline
    imfs = splineIM(imfs, splineS=splineS)
    imms = splineIM(imms, T=immT, splineS=splineS)
    # original images for visualization
    imf = splineIM(imf, kind='cubic', splineS=splineS)
    imm = splineIM(imm, T=immT, kind='cubic', splineS=splineS)

    # downsample
    samplesgrid = partial(sample,sgrid, hscaling=h*sqrt(Ns)/sqrt(N))
    simfs = samplesgrid(imfs)       
    #sDimfs = [apply_2d_slices(samplesgrid, Dimfs[i]) for i in range(np.shape(Dimfs)[0])]
    sDimfs = [apply_2d_slices(partial(samplesgrid, imfs), derivs[i]) for i in range(len(derivs))]

    f = partial(imsim, N=Ns, imshape=imshape, DIM=2, h=h, imms=imms, simfs=simfs, sDimfs=sDimfs, hscaling=h*sqrt(Ns)/sqrt(N), SIGMA=SIGMA, order=order)

    ## visualization
    reggrid = None
    if visualize:
        plt.figure(1)
        reggrid = pg.getGrid(border,border+Nx,border,border+Ny,xpts=40,ypts=40)
        pg.plotGrid(*reggrid)

        # attach grids
        f = partial(f, sgrid=sgrid, grid=reggrid)

        # image grid for warping
        pointsPerAxis = complex(0,visRes)
        imborder = 0 # -15
        imgrid = d2zip(np.mgrid[border+imborder:border+Nx-imborder:pointsPerAxis,border+imborder:border+Ny-imborder:pointsPerAxis])
        f = partial(f, imgrid=imgrid, imf=imf, imm=imm, imfs=imfs)

        plt.figure(0)
        plt.clf()
        x = np.arange(imshape[0])
        y = np.arange(imshape[1])
        scimfs = samplecross((x,y),imfs).reshape(imshape)
        cmin = np.min([np.min(simfs),np.min(scimfs)])
        cmax = np.max([np.max(simfs),np.max(scimfs)])
        plt.imshow(scimfs.T,vmin=cmin,vmax=cmax)
        plt.gray()
        plt.colorbar()
        q = d2zip(sgrid)
        plt.plot(q[:,0],q[:,1],'bo')
        plt.xlim(0,imshape[0])
        plt.ylim(0,imshape[1])
        # Jacobians
        DIM = 2
        N = q.shape[0]
        q_1 = np.outer(np.ones(N),np.eye(DIM)).reshape([N,DIM,DIM])
        plotJacobians(q,q_1)

        plt.figure(11)
        plt.clf()
        x = np.arange(imshape[0])
        y = np.arange(imshape[1])
        scimms = samplecross((x,y),imms).reshape(imshape)
        plt.imshow(scimms.T)
        plt.gray()
        plt.colorbar()
        plt.plot(d2zip(sgrid)[:,0],d2zip(sgrid)[:,1],'bo')
        plt.xlim(0,imshape[0])
        plt.ylim(0,imshape[1])

        plt.figure(12)
        plt.clf()
        scDimms = samplecross((x,y),imms,(1,0),hscaling=h*sqrt(Ns)/sqrt(N)).reshape(imshape)
        plt.imshow(scDimms.T)
        plt.gray()
        plt.colorbar()

        plt.figure(13)
        plt.clf()
        scDimms = samplecross((x,y),imms,(2,0),hscaling=h*sqrt(Ns)/sqrt(N)).reshape(imshape)
        plt.imshow(scDimms.T)
        plt.gray()
        plt.colorbar()

    sim = {'f': f, 'N': Ns, 'SIGMA': SIGMA, 'DIM': 2, 'order': order, 'initial': (d2zip(sgrid),)}

    return sim
예제 #4
0
# default
q_1 = np.outer(np.ones(N),np.eye(DIM)).reshape([N,DIM,DIM])
q_2 = np.zeros([N,DIM,DIM,DIM])

#tj.test_functions(0)
state0 = tj.weinstein_darboux_to_state(q, q_1, q_2, p, mu_1, mu_2 )
(t_span, y_span) = tj.integrate(state0, T=1.)

print 'initial energy was \n' + str(tj.energy(y_span[0]))
print 'final energy is \n'    + str(tj.energy(y_span[-1]))

# plot
save = True
xlim = (-2.5,2.5)
ylim = (-2.5,2.5)
reggrid = pg.getGrid(xlim[0],xlim[1],ylim[0],ylim[1],xpts=40,ypts=40)

(ggrid,gNx,gNy) = reggrid
(_,_,mgridts) = tj.integrate(state0,pts=ggrid)
mgridT = mgridts[-1:].reshape(-1,DIM)

#plt.figure(1)
#pg.plotGrid(*reggrid)
#pg.axis('equal')
plt.figure(2)
pg.plotGrid(mgridT,gNx,gNy,coloring=True)
plt.plot(y_span[:,0:DIM*N:2],y_span[:,1:DIM*N:2],'r-',linewidth=2)
plt.plot(q[:,0],q[:,1],'bo',markersize=10,markeredgewidth=3)
plt.plot(y_span[-1,0:DIM*N:2],y_span[-1,1:DIM*N:2],'rx',markersize=10,markeredgewidth=3)
plt.axis('equal')
plt.xlim(xlim)