コード例 #1
0
ファイル: opTrackingBase.py プロジェクト: fdiego/ilastik
    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
コード例 #2
0
        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.'
コード例 #3
0
ファイル: trackingBaseGui.py プロジェクト: bheuer/ilastik
    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.'
コード例 #4
0
    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
コード例 #5
0
ファイル: opTrackingBase.py プロジェクト: fblumenthal/ilastik
 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          
コード例 #6
0
        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.' )
コード例 #7
0
    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])
コード例 #8
0
    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])
コード例 #9
0
    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