def execute(self, slot, subindex, roi, result): if slot is self.Output: result = self.LabelImage.get(roi).wait() if not self.Parameters.ready(): raise Exception("Parameter slot is not ready") parameters = self.Parameters.value t_start = roi.start[0] t_end = roi.stop[0] for t in range(t_start, t_end): if ('time_range' in parameters and t <= parameters['time_range'][-1] and t >= parameters['time_range'][ 0]) and len(self.label2color) > t: result[t - t_start, ..., 0] = relabel(result[t - t_start, ..., 0], self.label2color[t]) else: result[t - t_start, ...] = 0 return result elif slot == self.AllBlocks: # if nothing was computed, return empty list if len(self.label2color) == 0: result[0] = [] return result all_block_rois = [] shape = self.Output.meta.shape # assumes t,x,y,z,c slicing = [slice(None), ] * 5 for t in range(shape[0]): slicing[0] = slice(t, t + 1) all_block_rois.append(sliceToRoi(slicing, shape)) result[0] = all_block_rois return result
def _export(): num_files = float(len(label2color)) for t, label2color_at in enumerate(label2color): if len(label2color_at) == 0: continue print 'exporting tiffs for t = ' + str(t) roi = SubRegion(self.mainOperator.LabelImage, start=[ t, ] + 4 * [ 0, ], stop=[ t + 1, ] + list(lshape[1:])) labelImage = self.mainOperator.LabelImage.get(roi).wait() relabeled = relabel(labelImage[0, ..., 0], label2color_at) for i in range(relabeled.shape[2]): out_im = relabeled[:, :, i] out_fn = str(directory) + '/vis_t' + str(t).zfill( 4) + '_z' + str(i).zfill(4) + '.tif' vigra.impex.writeImage(np.asarray(out_im, dtype=np.uint32), out_fn) _handle_progress(t / num_files * 100) print 'Tiffs exported.'
def _onExportTifButtonPressed(self): options = QFileDialog.Options() if ilastik_config.getboolean("ilastik", "debug"): options |= QFileDialog.DontUseNativeDialog directory = QFileDialog.getExistingDirectory(self, 'Select Directory',os.getenv('HOME'), options=options) if directory is None: print "cancelled." return print 'Saving results as tiffs...' label2color = self.mainOperator.label2color lshape = list(self.mainOperator.LabelImage.meta.shape) for t, label2color_at in enumerate(label2color): if len(label2color_at) == 0: continue print 'exporting tiffs for t = ' + str(t) roi = SubRegion(self.mainOperator.LabelImage, start=[t,] + 4*[0,], stop=[t+1,] + list(lshape[1:])) labelImage = self.mainOperator.LabelImage.get(roi).wait() relabeled = relabel(labelImage[0,...,0],label2color_at) for i in range(relabeled.shape[2]): out_im = relabeled[:,:,i] out_fn = str(directory) + '/vis_t' + str(t).zfill(4) + '_z' + str(i).zfill(4) + '.tif' vigra.impex.writeImage(np.asarray(out_im,dtype=np.uint32), out_fn) print 'Tiffs exported.'
def execute(self, slot, subindex, roi, result): if slot is self.Output: result = self.LabelImage.get(roi).wait() if not self.Parameters.ready(): raise Exception("Parameter slot is not ready") parameters = self.Parameters.value t_start = roi.start[0] t_end = roi.stop[0] for t in range(t_start, t_end): if ('time_range' in parameters and t <= parameters['time_range'][-1] and t >= parameters['time_range'][0]): result[t-t_start, ..., 0] = relabel(result[t-t_start, ..., 0], self.label2color[t]) else: result[t-t_start,...] = 0 return result
def _export(): num_files = float(len(label2color)) for t, label2color_at in enumerate(label2color): if len(label2color_at) == 0: continue logger.info( 'exporting tiffs for t = ' + str(t) ) roi = SubRegion(self.mainOperator.LabelImage, start=[t,] + 4*[0,], stop=[t+1,] + list(lshape[1:])) labelImage = self.mainOperator.LabelImage.get(roi).wait() relabeled = relabel(labelImage[0,...,0],label2color_at) for i in range(relabeled.shape[2]): out_im = relabeled[:,:,i] out_fn = str(directory) + '/vis_t' + str(t).zfill(4) + '_z' + str(i).zfill(4) + '.tif' vigra.impex.writeImage(np.asarray(out_im,dtype=np.uint32), out_fn) _handle_progress(t/num_files * 100) logger.info( 'Tiffs exported.' )
def _relabelMergers(self, volume, time, pixel_offsets=[0, 0, 0], onlyMergers=False, noRelabeling=False): if self.CoordinateMap.value.size() == 0: logger.info( "Skipping merger relabeling because coordinate map is empty") if onlyMergers: return np.zeros_like(volume) else: return volume if time >= len(self.resolvedto): if onlyMergers: return np.zeros_like(volume) else: return volume coordinate_map = self.CoordinateMap.value valid_ids = [] for old_id, new_ids in self.resolvedto[time].iteritems(): for new_id in new_ids: # TODO Reliable distinction between 2d and 3d? if self._ndim == 2: # Assume we have 2d data: bind z to zero relabel_volume = volume[..., 0] else: # For 3d data use the whole volume relabel_volume = volume # relabel pgmlink.update_labelimage( coordinate_map, relabel_volume, np.array(pixel_offsets, dtype=np.int64), int(time), int(new_id)) valid_ids.append(new_id) if onlyMergers: # find indices of merger ids, set everything else to zero idx = np.in1d(volume.ravel(), valid_ids).reshape(volume.shape) volume[-idx] = 0 if noRelabeling: return volume else: return relabel(volume, self.label2color[time])
def _relabelMergers(self, volume, time, pixel_offsets=[0, 0, 0], onlyMergers=False, noRelabeling=False): if self.CoordinateMap.value.size() == 0: logger.info("Skipping merger relabeling because coordinate map is empty") if onlyMergers: return np.zeros_like(volume) else: return volume if time >= len(self.resolvedto): if onlyMergers: return np.zeros_like(volume) else: return volume coordinate_map = self.CoordinateMap.value valid_ids = [] for old_id, new_ids in self.resolvedto[time].iteritems(): for new_id in new_ids: # TODO Reliable distinction between 2d and 3d? if self._ndim == 2: # Assume we have 2d data: bind z to zero relabel_volume = volume[..., 0] else: # For 3d data use the whole volume relabel_volume = volume # relabel pgmlink.update_labelimage( coordinate_map, relabel_volume, np.array(pixel_offsets, dtype=np.int64), int(time), int(new_id)) valid_ids.append(new_id) if onlyMergers: # find indices of merger ids, set everything else to zero idx = np.in1d(volume.ravel(), valid_ids).reshape(volume.shape) volume[-idx] = 0 if noRelabeling: return volume else: return relabel(volume, self.label2color[time])
def execute(self, slot, subindex, roi, result): if slot is self.Output: result = self.LabelImage.get(roi).wait() if not self.Parameters.ready(): raise Exception("Parameter slot is not ready") parameters = self.Parameters.value t_start = roi.start[0] t_end = roi.stop[0] for t in range(t_start, t_end): if ('time_range' in parameters and t <= parameters['time_range'][-1] and t >= parameters['time_range'][0]) and len( self.label2color) > t: result[t - t_start, ..., 0] = relabel(result[t - t_start, ..., 0], self.label2color[t]) else: result[t - t_start, ...] = 0 return result