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
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(),
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],