Beispiel #1
0
 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()
Beispiel #2
0
 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']()