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()
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)
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))
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)