def __init__(self, output_dir, config_name, letter_match=None): self.num_points = None self.domain_max = None self.dx = None self.verbose_file_output = False self.output_dir = output_dir self.spline_interp = False # used only for letter examples self.letter_match = letter_match smoothImageConfig.configure(self, config_name) self.rg = regularGrid.RegularGrid(self.dim, self.num_points, \ self.domain_max, self.dx, "meta") self.times = numpy.linspace(self.time_min, self.time_max, \ self.num_times) self.dt = (self.time_max - self.time_min) / (self.num_times - 1) self.optimize_iteration = 0 self.g_eps = 1. logging.info("sigma: %f" % self.sigma) logging.info("sfactor: %f" % self.sfactor) logging.info("num_points: %s" % str(self.rg.num_points)) logging.info("domain_max: %s" % str(self.rg.domain_max)) logging.info("dx: %s" % str(self.rg.dx)) logging.info("dt: %f" % self.dt) rg = self.rg self.x0 = self.rg.nodes.copy() self.xt = numpy.zeros((rg.num_nodes, 3, self.num_times)) self.v = numpy.zeros((rg.num_nodes, 3, self.num_times)) self.m = numpy.zeros((rg.num_nodes, self.num_times)) self.z = numpy.zeros((rg.num_nodes, 3, self.num_times)) self.J = numpy.ones((rg.num_nodes, self.num_times)) self.id_x = self.rg.nodes[:,0].copy() self.id_y = self.rg.nodes[:,1].copy() self.m = numpy.zeros((rg.num_nodes, self.num_times)) self.alpha = numpy.zeros(rg.num_nodes) self.alpha_state = numpy.zeros_like(self.alpha) rg.create_vtk_sg() rg.add_vtk_point_data(self.template_in, "template_in") rg.add_vtk_point_data(self.target_in, "target_in") rg.vtk_write(0, "images", output_dir=self.output_dir) if self.spline_interp: si = SplineInterp(rg, self.KH, self.template_in) self.dual_template = si.minimize() si = SplineInterp(rg, self.KH, self.target_in) self.dual_target = si.minimize() else: self.dual_template = self.template_in.copy() self.dual_target = self.target_in.copy() (templ, dtempl) = kernelMatrix_fort.applyk_and_diff( \ rg.nodes, rg.nodes, self.dual_template, self.khs, self.kho, self.rg.num_nodes) self.target = kernelMatrix_fort.applyk( \ rg.nodes, rg.nodes, self.dual_target, self.khs, self.kho, self.rg.num_nodes) self.template = templ self.D_template = dtempl if True: temp = numpy.zeros(rg.num_nodes) temp[50] = 1. kvt = kernelMatrix_fort.applyk( \ rg.nodes, rg.nodes, temp, self.kvs, self.kvo, self.rg.num_nodes) kht = kernelMatrix_fort.applyk( \ rg.nodes, rg.nodes, temp, self.khs, self.kho, self.rg.num_nodes) rg.create_vtk_sg() rg.add_vtk_point_data(self.template, "template") rg.add_vtk_point_data(self.D_template, "D_template") rg.add_vtk_point_data(self.target, "target") rg.add_vtk_point_data(kvt, "kvt") rg.add_vtk_point_data(kht, "kht") rg.vtk_write(0, "initial_data", output_dir=self.output_dir) tmpMax = numpy.max(numpy.abs(self.template)) tarMax = numpy.max(numpy.abs(self.target)) self.template /= tmpMax self.dual_template /= tmpMax self.target /= tarMax self.dual_target /= tarMax
def __init__(self, output_dir, config_name, letter_match=None): self.num_points = None self.domain_max = None self.dx = None self.verbose_file_output = False self.output_dir = output_dir self.spline_interp = False self.noJ = True self.unconstrained = False # used only for letter examples self.letter_match = letter_match smoothImageConfig.configure(self, config_name) self.rg = regularGrid.RegularGrid(self.dim, self.num_points, \ self.domain_max, self.dx, "meta") self.times = numpy.linspace(self.time_min, self.time_max, \ self.num_times) self.dt = (self.time_max - self.time_min) / (self.num_times - 1) self.optimize_iteration = 0 self.g_eps = 1. self.khSmooth =0.2*numpy.asarray(self.rg.dx).max() # self.khs/2 logging.info("sigma: %f" % self.sigma) logging.info("sfactor: %f" % self.sfactor) logging.info("num_points: %s" % str(self.rg.num_points)) logging.info("domain_max: %s" % str(self.rg.domain_max)) logging.info("dx: %s" % str(self.rg.dx)) logging.info("dt: %f" % self.dt) logging.info('khSmooth: %f'% self.khSmooth) rg = self.rg self.x0 = self.rg.nodes.copy() self.xt = numpy.zeros((rg.num_nodes, 3, self.num_times)) self.v = numpy.zeros((rg.num_nodes, 3, self.num_times)) self.m = numpy.zeros((rg.num_nodes, self.num_times)) self.z = numpy.zeros((rg.num_nodes, 3, self.num_times)) self.id_x = self.rg.nodes[:,0].copy() self.id_y = self.rg.nodes[:,1].copy() self.m = numpy.zeros((rg.num_nodes, self.num_times)) self.alpha = numpy.zeros(rg.num_nodes) self.alpha_state = numpy.zeros_like(self.alpha) if self.unconstrained: self.noJ = True self.z0 = numpy.zeros((rg.num_nodes, 3)) self.z0weight = 100*numpy.ones((rg.num_nodes,1)) self.z0_state = numpy.zeros((rg.num_nodes, 3)) if not self.noJ: self.J = numpy.ones((rg.num_nodes, self.num_times)) rg.create_vtk_sg() rg.add_vtk_point_data(self.template_in, "template_in") rg.add_vtk_point_data(self.target_in, "target_in") rg.vtk_write(0, "images", output_dir=self.output_dir) if self.spline_interp: trg = kernelMatrix_fort.applyk( \ rg.nodes, rg.nodes, self.target_in, self.khs/4, self.kho, self.rg.num_nodes) tpl = kernelMatrix_fort.applyk( \ rg.nodes, rg.nodes, self.template_in, self.khs/4, self.kho, self.rg.num_nodes) self.khSmooth = self.khs logging.info('RKHS Projection Template') si = SplineInterp(rg, self.khs, self.kho, tpl,True) self.dual_template = si.minimize() logging.info('RKHS Projection Target') si = SplineInterp(rg, self.khs, self.kho, trg) self.dual_target = si.minimize() else: self.dual_template = self.template_in.copy() self.dual_target = self.target_in.copy() (templ, dtempl) = kernelMatrix_fort.applyk_and_diff( \ rg.nodes, rg.nodes, self.dual_template, self.khSmooth, self.kho, self.rg.num_nodes) self.target = kernelMatrix_fort.applyk( \ rg.nodes, rg.nodes, self.dual_target, self.khSmooth, self.kho, self.rg.num_nodes) self.template = templ self.D_template = dtempl if True: temp = numpy.zeros(rg.num_nodes) temp[rg.num_nodes/2 + rg.num_points[1]/2] = 1. kvt = kernelMatrix_fort.applyk( \ rg.nodes, rg.nodes, temp, self.kvs, self.kvo, self.rg.num_nodes) kht = kernelMatrix_fort.applyk( \ rg.nodes, rg.nodes, temp, self.khs, self.kho, self.rg.num_nodes) rg.create_vtk_sg() rg.add_vtk_point_data(self.template, "template") rg.add_vtk_point_data(self.D_template, "D_template") rg.add_vtk_point_data(self.target, "target") rg.add_vtk_point_data(kvt, "kvt") rg.add_vtk_point_data(kht, "kht") rg.vtk_write(0, "initial_data", output_dir=self.output_dir) tmpMax = numpy.max(numpy.abs(self.template)) tarMax = numpy.max(numpy.abs(self.target)) self.D_template /= tmpMax self.template /= tmpMax self.dual_template /= tmpMax self.target /= tarMax self.dual_target /= tarMax self.z0weight[:] = numpy.sqrt(1e-6 + (self.D_template**2).sum(axis=1)[..., numpy.newaxis])