def score_state_full(self, state, img): assert len(img.shape)== 2 x = state['x'] y = state['y'] theta = state['theta'] phi = state['phi'] img_thold = img.copy() img_thold[img_thold < self.params['pix-threshold']] = 0 if self.img_cache == None or (self.img_cache != img_thold).any(): self.img_cache = img_thold.copy() coordinates = skimage.feature.peak_local_max(img, min_distance=30, threshold_rel=0.8) frame_regions = filters.label_regions(img_thold) filtered_regions = filters.filter_regions(frame_regions, max_width = 30, max_height=30) fc = filters.points_in_mask(filtered_regions > 0, coordinates) self.coordinates = fc # pylab.imshow(img, interpolation='nearest', cmap=pylab.cm.gray) # pylab.plot([p[1] for p in self.coordinates], # [p[0] for p in self.coordinates], 'r.') # pylab.show() # get the points coordinates = self.coordinates if len(coordinates) == 0: return 0 x_pix, y_pix = self.env.gc.real_to_image(x, y) x_pix = int(x_pix) y_pix = int(y_pix) front_pos_pix, back_pos_pix = util.compute_pos(self.template_obj.length, x_pix, y_pix, phi, theta) front_deltas = np.abs((coordinates - np.array(front_pos_pix)[:2][::-1])) front_dists = np.sqrt(np.sum(front_deltas**2, axis=1)) assert len(front_dists) == len(coordinates) back_deltas = np.abs((coordinates - np.array(back_pos_pix)[:2][::-1])) back_dists = np.sqrt(np.sum(back_deltas**2, axis=1)) dist_thold = self.params.get('dist-thold', None) if dist_thold != None: front_deltas= front_deltas[front_deltas < dist_thold] back_deltas = back_deltas[back_deltas < dist_thold] closest_n = self.params.get('closest-n', None) if closest_n != None: front_deltas = np.sort(front_deltas)[::-1] back_deltas = np.sort(back_deltas)[::-1] front_deltas= front_deltas[:closest_n] back_deltas = back_deltas[:closest_n] power = self.params.get('power', 1) delta_sum = np.sum(front_dists**power) + np.sum(back_dists**power) if self.params.get('normalize', True): delta_sum = delta_sum / len(coordinates) if len(coordinates) == 0: score = -1e10 elif self.params.get('log', False): score = -np.log(delta_sum) elif self.params.get('exp', False): score = -np.exp(delta_sum) else: score = -delta_sum return score
def score_state_full(self, state, img): assert len(img.shape) == 2 x = state['x'] y = state['y'] theta = state['theta'] phi = state['phi'] img_thold = img.copy() img_thold[img_thold < self.params['pix-threshold']] = 0 if self.img_cache == None or (self.img_cache != img_thold).any(): self.img_cache = img_thold.copy() coordinates = skimage.feature.peak_local_max(img, min_distance=30, threshold_rel=0.8) frame_regions = filters.label_regions(img_thold) filtered_regions = filters.filter_regions(frame_regions, max_width=30, max_height=30) fc = filters.points_in_mask(filtered_regions > 0, coordinates) self.coordinates = fc # pylab.imshow(img, interpolation='nearest', cmap=pylab.cm.gray) # pylab.plot([p[1] for p in self.coordinates], # [p[0] for p in self.coordinates], 'r.') # pylab.show() # get the points coordinates = self.coordinates if len(coordinates) == 0: return 0 x_pix, y_pix = self.env.gc.real_to_image(x, y) x_pix = int(x_pix) y_pix = int(y_pix) front_pos_pix, back_pos_pix = util.compute_pos( self.template_obj.length, x_pix, y_pix, phi, theta) front_deltas = np.abs( (coordinates - np.array(front_pos_pix)[:2][::-1])) front_dists = np.sqrt(np.sum(front_deltas**2, axis=1)) assert len(front_dists) == len(coordinates) back_deltas = np.abs((coordinates - np.array(back_pos_pix)[:2][::-1])) back_dists = np.sqrt(np.sum(back_deltas**2, axis=1)) dist_thold = self.params.get('dist-thold', None) if dist_thold != None: front_deltas = front_deltas[front_deltas < dist_thold] back_deltas = back_deltas[back_deltas < dist_thold] closest_n = self.params.get('closest-n', None) if closest_n != None: front_deltas = np.sort(front_deltas)[::-1] back_deltas = np.sort(back_deltas)[::-1] front_deltas = front_deltas[:closest_n] back_deltas = back_deltas[:closest_n] power = self.params.get('power', 1) delta_sum = np.sum(front_dists**power) + np.sum(back_dists**power) if self.params.get('normalize', True): delta_sum = delta_sum / len(coordinates) if len(coordinates) == 0: score = -1e10 elif self.params.get('log', False): score = -np.log(delta_sum) elif self.params.get('exp', False): score = -np.exp(delta_sum) else: score = -delta_sum return score
clear_ticks(ax_frames) ax_truth.plot(frame_pos, truth_interp[frame_pos]['x'], label='x') ax_truth.plot(frame_pos, truth_interp[frame_pos]['y'], label='y') coordinates = data['coordinates'] regions = data['regions'] eo_params = data['eo_params'] filtered_regions = np.zeros_like(data['regions']) point_est_track = data['point_est_track'] region_props = [] max_dim = (eo_params[1] + eo_params[2])*2*1.2 for fi, f in enumerate(frame_pos): filtered_regions[fi] = filters.filter_regions(regions[fi], max_width = max_dim, max_height = max_dim) fc = filters.points_in_mask(filtered_regions[fi] > 0, coordinates[fi]) region_props.append(skimage.measure.regionprops((filtered_regions[fi]>0).astype(int))) ### how many coordinate points #ax_point_cnt.plot(frame_pos, [len(x) for x in filtered_coordinates]) ax_point_cnt.plot(frame_pos, [len(x) for x in coordinates]) ax_phi_theta.plot(frame_pos, derived_truth['phi'][frame_pos] % (2*np.pi)) coord = point_est_track cand_pts_per_frame = np.array([p.shape[0] for p in coord])
vmax=255, cmap=pylab.cm.gray) clear_ticks(ax_frames) ax_truth.plot(frame_pos, truth_interp[frame_pos]['x'], label='x') ax_truth.plot(frame_pos, truth_interp[frame_pos]['y'], label='y') coordinates = data['coordinates'] regions = data['regions'] eo_params = data['eo_params'] filtered_regions = np.zeros_like(data['regions']) point_est_track = data['point_est_track'] region_props = [] max_dim = (eo_params[1] + eo_params[2]) * 2 * 1.2 for fi, f in enumerate(frame_pos): filtered_regions[fi] = filters.filter_regions(regions[fi], max_width=max_dim, max_height=max_dim) fc = filters.points_in_mask(filtered_regions[fi] > 0, coordinates[fi]) region_props.append( skimage.measure.regionprops( (filtered_regions[fi] > 0).astype(int))) ### how many coordinate points #ax_point_cnt.plot(frame_pos, [len(x) for x in filtered_coordinates]) ax_point_cnt.plot(frame_pos, [len(x) for x in coordinates]) ax_phi_theta.plot(frame_pos, derived_truth['phi'][frame_pos] % (2 * np.pi)) coord = point_est_track cand_pts_per_frame = np.array([p.shape[0] for p in coord])