def segment(self, k, m): self.k.value = k self.m.value = m self.interval.value = sqrt(self.lab.shape[0]*self.lab.shape[1]/k) self.frame.value = max(self.interval.value/2, 3) shp_cp = (((self.img_shape[0] - self.frame.value - 2)/self.interval.value + 1), ((self.img_shape[1] - self.frame.value - 2)/self.interval.value + 1)) #using 'self.img_shape[1] - self.frame.value - 2' to prevent centers beeing placed at image edges self.cluster_lab.value = np.zeros(shp_cp + (4,), np.float64) self.cluster_xy.value = np.zeros(shp_cp + (2,), np.int32) self.new_cluster_lab.value = np.zeros(shp_cp + (4,), np.float64) self.new_cluster_xy.value = np.zeros(shp_cp + (2,), np.int32) self.diff.value = np.zeros(shp_cp + (1,), np.uint8) self.clus_sz0.value = shp_cp[1] self.clus_sz1.value = shp_cp[0] #begin slic self.set_center() self.label_px() self.sum_new_ctrs() self.set_new_ctrs() #re-run until convergence cnt = 0 while not(max_reduce(self.diff) == 0): self.label_px() self.sum_new_ctrs() self.set_new_ctrs() cnt += 1 self.enf_conn_c() self.sync_buffers_from_lab()
def update(self): self.neighsearch.search(h=self.h, maxneighs=self.maxneighs) self.autoset_dt() self.steps['compute_bound_mass']() self.steps['compute_density']() self.steps['reset_force']() self.steps['apply_gravity']() self.steps['apply_viscosity']() self.steps['apply_surface_tension']() self.steps['compute_vel_adv']() self.steps['compute_dii']() self.steps['compute_rho_adv_init_press']() self.steps['compute_aii']() for i in range(self.maxiter): self.steps['compute_sum_dijpjl']() self.steps['compute_pressure']() self.steps['set_pressure_clamped']() self.steps['compute_new_rho']() self.steps['compute_density_error']() maxerr = max_reduce(self.particles.rho_err) avgerr = maxerr/len(self.particles.rho_err) if ((maxerr < self.maxdvar) or (avgerr < self.avgdvar)) and (i >= 2): #print 'pressure solve iterations: ', i break self.steps['compute_pressure_force']() self.steps['integrate']()