예제 #1
0
def prealign(data):
    mmin,mmax = find_min_max(data)
    pars = [0.5,1, 2*n, 4, 5, 1.1, 4]
    for k in range(4):
       with dc.SolverDeform(720, nz, n, 20) as dslv:
           flow = dslv.registration_flow_batch(
                        data[k*720:(k+1)*720], data[0*720:(0+1)*720], mmin[:720], mmax[:720], None, pars, 20) 
           data[k*720:(k+1)*720] = dslv.apply_flow_gpu_batch(data[k*720:(k+1)*720], flow)
    return data
예제 #2
0
        ptheta = 40
        dxchange.write_tiff_stack(data, name + '/data/d', overwrite=True)
        #exit()
        #if(il==0):
        u = np.zeros([nz, ne, ne], dtype='float32')
        psi = data.copy() * 0
        lamd = np.zeros([ntheta, nz, n], dtype='float32')
        flow = np.zeros([ntheta, nz, n, 2], dtype='float32')
        #else:
        #   u, psi, lamd, flow = interpdense(u,psi,lamd,flow)

        # optical flow parameters
        pars = [0.5, 1, w[il], 4, 5, 1.1, 4]
        with tc.SolverTomo(theta, ntheta, nz, ne, pnz,
                           center / pow(2, binning), ngpus) as tslv:
            with dc.SolverDeform(ntheta, nz, n, ptheta) as dslv:
                rho = 0.5
                h0 = psi
                for k in range(niter[il]):
                    # registration
                    # print(np.linalg.norm(psi-data))
                    tic()
                    flow = dslv.registration_flow_batch(
                        psi, data, mmin, mmax, flow.copy(), pars, 40)
                    print(toc())
                    # Tpsi = dslv.apply_flow_gpu_batch(psi, flow)
                    # print(np.linalg.norm(Tpsi-data))

                    # deformation subproblem
                    tic()
                    psi = dslv.cg_deform_gpu_batch(
    # initial guess
    u = np.zeros([det, det, det], dtype='float32')
    psi1 = data.copy()
    psi2 = np.zeros([3, det, det, det], dtype='float32')
    lamd1 = np.zeros([ntheta, det, det], dtype='float32')
    lamd2 = np.zeros([3, det, det, det], dtype='float32')

    flow = np.zeros([ntheta, det, det, 2], dtype='float32')

    # optical flow parameters
    pars = [0.5, 1, 1024, 4, 5, 1.1, 4]
    niter = 257
    alpha = 8e-14

    with lcg.SolverLam(det, det, det, det, ntheta, phi, 1e-2) as tslv:
        with dc.SolverDeform(ntheta, det, det, 42) as dslv:
            rho1 = 0.5
            rho2 = 0.5

            h01 = psi1
            h02 = psi2

            for k in range(niter):
                # registration
                tic()

                flow = dslv.registration_flow_batch(psi1,
                                                    data,
                                                    mmin,
                                                    mmax,
                                                    flow.copy(),
예제 #4
0
    nz = 128  # object size in z
    ntheta = 1  # number of angles (rotations)
    ptheta = 1

    # Load object
    u0 = dxchange.read_tiff('data/delta-chip-128.tiff')[:, 64:64 +
                                                        ntheta].swapaxes(0, 1)

    # deform it
    u = deform(u0)

    mmin = np.min(u, axis=(1, 2))
    mmax = np.max(u, axis=(1, 2))

    flow = np.zeros([ntheta, nz, n, 2], dtype='float32')
    with df.SolverDeform(ntheta, nz, n, ptheta) as slv:
        flow = slv.registration_flow_batch(u0,
                                           u,
                                           mmin,
                                           mmax,
                                           flow,
                                           pars=[0.5, 1, 16, 20, 5, 1.1, 0])
        rec = slv.cg_deform(u, u * 0, flow, 12, dbg=False)

    dxchange.write_tiff(u0[ntheta // 2],
                        'res/delta-chip-128.tiff',
                        overwrite=True)
    dxchange.write_tiff(u[ntheta // 2],
                        'res/defdelta-chip-128.tiff',
                        overwrite=True)
    dxchange.write_tiff(rec[ntheta // 2],