def on_doneOverlaysAvailable(self):
     s = self.ilastik._activeImage.Interactive_Segmentation
     
     bluetable    = [QtGui.qRgb(0, 0, 255) for i in range(256)]
     bluetable[0] = long(0) #transparency
     
     randomColorTable    = [QtGui.qRgb(random.randint(0,255),random.randint(0,255),random.randint(0,255)) for i in range(256)] 
     randomColorTable[0] = long(0) #transparency
     
     self.doneBinaryOverlay = OverlayItem(s.done, color = 0, colorTable=bluetable, alpha = 0.5, autoAdd = True, autoVisible = True, min = 0, max = 255)
     self.ilastik._activeImage.overlayMgr["Segmentation/Done"] = self.doneBinaryOverlay
     self.doneObjectsOverlay = OverlayItem(s.done, color=0, colorTable=randomColorTable, alpha=0.7, autoAdd=False, autoVisible=False, min = 0, max = 255)
     self.ilastik._activeImage.overlayMgr["Segmentation/Objects"] = self.doneObjectsOverlay
     
     self.overlayWidget.addOverlayRef(self.doneBinaryOverlay.getRef())
    def on_overlaysChanged(self):
        if type(self.parent.labelWidget.labelWidget) is DummyLabelWidget: return
        
        s = self.ilastik._activeImage.Interactive_Segmentation
        
        if s.segmentation is None:
            #the segmentation has been cleared, remove overlay
            self.activeImage.overlayMgr.remove("Segmentation/Segmentation")
            self.segmentationOverlay = None
        elif self.activeImage.overlayMgr["Segmentation/Segmentation"] is None:
            #ensure that we have a 'Segmentation' overlay which will display the result of the segmentation algorithm
            origColorTable = copy.deepcopy(self.parent.labelWidget.labelWidget.colorTab)
            origColorTable[1] = 255
            
            self.segmentationOverlay = OverlayItem(self.localMgr.segmentation, color = 0, alpha = 1.0, colorTable = origColorTable, autoAdd = True, autoVisible = True, linkColorTable = True)
            #this overlay can be shown in 3D
            #the label 0 never occurs, label 1 is assigned to the background  class
            self.segmentationOverlay.displayable3D = True
            self.segmentationOverlay.backgroundClasses = set([1])
            self.activeImage.overlayMgr["Segmentation/Segmentation"] = self.segmentationOverlay

        if s.segmentation is not None:
            #create Overlay for segmentation:
            res = self.localMgr.segmentation
            self.segmentationOverlay._data = DataAccessor(res)
            origColorTable = copy.deepcopy(self.parent.labelWidget.labelWidget.colorTab)
            origColorTable[1] = 255            
            self.segmentationOverlay.colorTable = origColorTable
            
        if self.localMgr.potentials is not None:
            origColorTable = copy.deepcopy(self.parent.labelWidget.labelWidget.colorTab)
            ov = OverlayItem(self.localMgr.potentials,color = origColorTable[1], alpha = 1.0, autoAdd = True, autoVisible = True, min = 0.0, max = 1.0)
            self.activeImage.overlayMgr["Segmentation/Potentials"] = ov
        else:
            self.activeImage.overlayMgr.remove("Segmentation/Potentials")
            
        if self.localMgr.borders is not None:
            #colorTab = []
            #for i in range(256):
            #    color = QtGui.QColor(random.randint(0,255),random.randint(0,255),random.randint(0,255)).rgba()
            #    colorTab.append(color)
                
            ov = OverlayItem(self.localMgr.borders, color = QtGui.QColor(), alpha = 1.0, autoAdd = True, autoVisible = False, min = 0, max = 1.0)
            self.activeImage.overlayMgr["Segmentation/Supervoxels"] = ov
        else:
            self.activeImage.overlayMgr.remove("Segmentation/Supervoxels")
    
        self.parent.labelWidget.repaint()
Ejemplo n.º 3
0
    def importOverlay(dataItem, filename, prefix="File Overlays/", attrs=None):
        theDataItem = DataImpex.importDataItem(filename, None)
        if theDataItem is None:
            print "could not load", filename
            return None

        data = theDataItem[:, :, :, :, :]

        if attrs == None:
            attrs = OverlayAttributes(filename)
        if attrs.min is None:
            attrs.min = numpy.min(data)
        if attrs.max is None:
            attrs.max = numpy.max(data)

        if data.shape[0:-1] == dataItem.shape[0:-1]:
            ov = OverlayItem(data,
                             color=attrs.color,
                             alpha=attrs.alpha,
                             colorTable=attrs.colorTable,
                             autoAdd=attrs.autoAdd,
                             autoVisible=attrs.autoVisible,
                             min=attrs.min,
                             max=attrs.max)
            ov.key = attrs.key
            if len(prefix) > 0:
                if prefix[-1] != "/":
                    prefix = prefix + "/"
            dataItem.overlayMgr[prefix + ov.key] = ov
            return ov
    def on_activation(self):
        if self.ilastik.project is None: return

        self._initContent()
        self._initConnects()
        self.interactionLog = []
        self.defaultSegmentor = False
        
        #initially add 'Raw Data' overlay
        ovs = self.ilastik._activeImage.module[self.__class__.moduleName].getOverlayRefs()
        if "Raw Data" in self.ilastik._activeImage.overlayMgr.keys():
            raw = self.ilastik._activeImage.overlayMgr["Raw Data"]
            if raw is not None: ovs.append(raw.getRef())
        
        self.ilastik.labelWidget.interactionLog = self.interactionLog        
        self.ilastik.labelWidget._history.volumeEditor = self.ilastik.labelWidget

        self.overlayWidget = OverlayWidget(self.ilastik.labelWidget, self.ilastik.project.dataMgr)
        self.ilastik.labelWidget.setOverlayWidget(self.overlayWidget)
        
        if self.parent.project.dataMgr.Interactive_Segmentation.segmentor is None:
            segmentors = self.parent.project.dataMgr.Interactive_Segmentation.segmentorClasses
            for i, seg in enumerate(segmentors):
                if seg.name == "Supervoxel Segmentation":
                    self.parent.project.dataMgr.Interactive_Segmentation.segmentor = seg()
                    ui = self.parent.project.dataMgr.Interactive_Segmentation.segmentor.getInlineSettingsWidget(self.inlineSettings.childWidget, view='default')
                    self.inlineSettings.changeWidget(ui)
                    self.defaultSegmentor = True
                    break
        
        #Finally, initialize the core module        
        s = self.ilastik._activeImage.Interactive_Segmentation
        self.connect(s, QtCore.SIGNAL('overlaysChanged()'), self.on_overlaysChanged)
        self.connect(s, QtCore.SIGNAL('doneOverlaysAvailable()'), self.on_doneOverlaysAvailable)
        self.connect(s, QtCore.SIGNAL('weightsSetup()'), self.on_setupWeights)
        self.connect(s, QtCore.SIGNAL('newSegmentation()'), self.on_newSegmentation)
        self.connect(s, QtCore.SIGNAL('numColorsNeeded(int)'), self.on_numColorsNeeded)
        self.connect(s, QtCore.SIGNAL('saveAsPossible(bool)'), lambda b: self.btnSaveAs.setEnabled(b))
        self.connect(s, QtCore.SIGNAL('savePossible(bool)'), lambda b: self.btnSave.setEnabled(b))
        self.connect(s, QtCore.SIGNAL('seedsAvailable(bool)'), lambda b: self.btnSegment.setEnabled(b))
        s.init()
        
        #add 'Seeds' overlay
        self.seedOverlay = OverlayItem(s.seedLabelsVolume._data, color = 0, alpha = 1.0, colorTable = s.seedLabelsVolume.getColorTab(), autoAdd = True, autoVisible = True,  linkColorTable = True)
        self.ilastik._activeImage.overlayMgr["Segmentation/Seeds"] = self.seedOverlay
        self.seedWidget = SeedListWidget(self.ilastik.project.dataMgr.Interactive_Segmentation.seedMgr,  s.seedLabelsVolume,  self.ilastik.labelWidget,  self.seedOverlay)
        self.ilastik.labelWidget.setLabelWidget(self.seedWidget)
        
        self.seedOverlay.displayable3D = True
        self.seedOverlay.backgroundClasses = set([0])
        self.seedOverlay.smooth3D = False
    def finalizeResults(self):
        colortable = OverlayItem.createDefaultColorTable('RGB', 256)

        #create Overlay for segmentation:
        if self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr[
                "Auto Segmentation/Segmentation"] is None:
            ov = OverlayItem(self.res,
                             color=0,
                             alpha=1.0,
                             colorTable=colortable,
                             autoAdd=True,
                             autoVisible=True)
            self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr[
                "Auto Segmentation/Segmentation"] = ov
        else:
            self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr[
                "Auto Segmentation/Segmentation"]._data = DataAccessor(
                    self.res)
 def finalizeResults(self):
     #create Overlay for connected components:
     if self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr[
             "Connected Components/CC Results"] is None:
         colortab = OverlayItem.createDefault16ColorColorTable()
         myColor = OverlayItem.qrgb(255, 0, 0)
         ov = OverlayItem(self.ccThread.result,
                          color=myColor,
                          alpha=1.0,
                          colorTable=colortab,
                          autoAdd=True,
                          autoVisible=True)
         self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr[
             "Connected Components/CC Results"] = ov
     else:
         self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr[
             "Connected Components/CC Results"]._data = DataAccessor(
                 self.ccThread.result)
Ejemplo n.º 7
0
 def on_activation(self):
     if self.ilastik.project is None:
         return
     ovs = self.ilastik._activeImage._dataVol.backgroundOverlays
     if len(ovs) == 0:
         raw = self.ilastik._activeImage.overlayMgr["Raw Data"]
         if raw is not None:
             ovs.append(raw.getRef())
                     
     overlayWidget = OverlayWidget(self.ilastik.labelWidget, self.ilastik.project.dataMgr)
     self.ilastik.labelWidget.setOverlayWidget(overlayWidget)
     
     
     #create background overlay
     ov = OverlayItem(self.ilastik._activeImage._dataVol.background._data, color=0, alpha=1.0, colorTable = self.ilastik._activeImage._dataVol.background.getColorTab(), autoAdd = True, autoVisible = True, linkColorTable = True)
     self.ilastik._activeImage.overlayMgr["Connected Components/Background"] = ov
     ov = self.ilastik._activeImage.overlayMgr["Connected Components/Background"]
     
     self.ilastik.labelWidget.setLabelWidget(BackgroundWidget(self.ilastik.project.backgroundMgr, self.ilastik._activeImage._dataVol.background, self.ilastik.labelWidget, ov))    
Ejemplo n.º 8
0
    def __init__(self, labelMgr, volumeLabels, volumeEditor):
        QtGui.QGroupBox.__init__(self, "Object Picker")
        BaseLabelWidget.__init__(self, None)
        self.setLayout(QtGui.QVBoxLayout())

        self.layout().setMargin(5)
        self.listWidget = QtGui.QListWidget(self)
        self.layout().addWidget(self.listWidget)

        self.volumeEditor = volumeEditor
        self.labelMgr = labelMgr
        self.listWidget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.listWidget.connect(
            self.listWidget,
            QtCore.SIGNAL("customContextMenuRequested(QPoint)"),
            self.onContext)
        self.volumeLabels = volumeLabels
        self.colorTab = []
        self.items = []
        self.volumeEditor = volumeEditor
        self.labelColorTable = [
            QtGui.QColor(QtCore.Qt.red),
            QtGui.QColor(QtCore.Qt.green),
            QtGui.QColor(QtCore.Qt.yellow),
            QtGui.QColor(QtCore.Qt.blue),
            QtGui.QColor(QtCore.Qt.magenta),
            QtGui.QColor(QtCore.Qt.darkYellow),
            QtGui.QColor(QtCore.Qt.lightGray)
        ]
        #self.connect(self, QtCore.SIGNAL("currentTextChanged(QString)"), self.changeText)
        self.labelPropertiesChanged_callback = None
        self.listWidget.setSelectionMode(
            QtGui.QAbstractItemView.SingleSelection)
        self.initFromVolumeLabels(volumeLabels)

        if self.listWidget.model().rowCount() == 0:
            self.addLabel("Picker", 1, QtGui.QColor(0, 0, 255))

        self.overlayItem = OverlayItem(self.labelMgr.objects._data)
    def filterSynapses(self, inputOverlay, label, minsize, maxsize):
        #This is a special function to filter synapses. It assumes that the input overlay
        #is a threhsold overlay and computes it for equal probabilities, and then dilates the
        #the current connected components to the size of their counterparts in the equal
        #probability connected components. The resulting objects are filtered to be between minsize
        #and maxsize pixels in volume.

        #FIXME: This function is very specific and is only put here until ilastik 0.6 allows
        #to make it into a special workflow. Remove as soon as possible!
        parts = label.split(" ")
        labelnum = int(parts[0])
        #labelname = parts[1]
        thres = self.dataMgr[
            self.dataMgr._activeImageNumber].Connected_Components.inputData
        cc = self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr[
            "Connected Components/CC Results"]
        if thres is None:
            print "no threshold overlay"
            return

        if not isinstance(thres._data, MultivariateThresholdAccessor):
            print "no threshold overlay used for connected components"
            return
        if cc is None:
            print "No connected components overlay"
            return

        sfad = SynapseFilterAndSegmentor(self.dataMgr, labelnum, minsize,
                                         maxsize, cc, inputOverlay)
        objs_user = sfad.computeUserThreshObjects()
        objs_ref = sfad.computeReferenceObjects()
        #goodsizes = [s for s in goodsizes if s>100]

        #mingoodsize = min(goodsizes)
        #maxgoodsize = max(goodsizes)
        objs_final = sfad.filterObjects(objs_user, objs_ref)
        #create a new, filtered overlay:
        result = numpy.zeros(cc.shape, dtype='int32')
        objcounter = 1
        for iobj in objs_final:
            for i in range(len(iobj[0])):
                result[0, iobj[0][i], iobj[1][i], iobj[2][i],
                       0] = int(objcounter)
            objcounter = objcounter + 1

        if self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr[
                "Connected Components/CC Filtered"] is None:
            #colortab = [QtGui.qRgb(i, i, i) for i in range(256)]
            colortab = OverlayItem.createDefault16ColorColorTable()
            myColor = OverlayItem.qrgb(255, 0, 0)  #QtGui.QColor(255, 0, 0)
            ov = OverlayItem(result,
                             color=myColor,
                             alpha=1.0,
                             colorTable=colortab,
                             autoAdd=True,
                             autoVisible=True)
            self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr[
                "Connected Components/CC Filtered"] = ov
        else:
            self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr[
                "Connected Components/CC Filtered"]._data = DataAccessor(
                    result)