def _initPredictionLayers(self, predictionSlot): layers = [] opLane = self.topLevelOperatorView colors = opLane.PmapColors.value names = opLane.LabelNames.value # Use a slicer to provide a separate slot for each channel layer #opSlicer = OpMultiArraySlicer2( parent=opLane.viewed_operator() ) #opSlicer.Input.connect( predictionSlot ) #opSlicer.AxisFlag.setValue('c') if predictionSlot.ready(): from volumina import colortables predictLayer = ColortableLayer(LazyflowSource(predictionSlot), colorTable=colortables.jet(), normalize='auto') #predictLayer = AlphaModulatedLayer( predictsrc, # tintColor=QColor(*colors[channel]), # range=(0.0, 1.0), # normalize=(0.0, 1.0) ) predictLayer.opacity = 0.25 predictLayer.visible = True predictLayer.name = "Prediction" layers.append(predictLayer) return layers
def setupLayers(self): """ Called by our base class when one of our data slots has changed. This function creates a layer for each slot we want displayed in the volume editor. """ # Base class provides the label layer. layers = super(Counting3dGui, self).setupLayers() # Add each of the predictions labels = self.labelListData slots = {'density' : self.op.Density} for name, slot in slots.items(): if slot.ready(): from volumina import colortables layer = ColortableLayer(LazyflowSource(slot), colorTable = colortables.jet(), normalize = 'auto') layer.name = name layers.append(layer) boxlabelsrc = LazyflowSinkSource(self.op.BoxLabelImages,self.op.BoxLabelInputs ) boxlabellayer = ColortableLayer(boxlabelsrc, colorTable = self._colorTable16, direct = False) boxlabellayer.name = "boxLabels" boxlabellayer.opacity = 0.3 layers.append(boxlabellayer) self.boxlabelsrc = boxlabelsrc inputDataSlot = self.topLevelOperatorView.InputImages if inputDataSlot.ready(): inputLayer = self.createStandardLayerFromSlot( inputDataSlot ) inputLayer.name = "Input Data" inputLayer.visible = True inputLayer.opacity = 1.0 def toggleTopToBottom(): index = self.layerstack.layerIndex( inputLayer ) self.layerstack.selectRow( index ) if index == 0: self.layerstack.moveSelectedToBottom() else: self.layerstack.moveSelectedToTop() inputLayer.shortcutRegistration = ( "Prediction Layers", "Bring Input To Top/Bottom", QShortcut( QKeySequence("i"), self.viewerControlWidget(), toggleTopToBottom), inputLayer ) layers.append(inputLayer) self.handleLabelSelectionChange() return layers
# Generate # array[:] = np.random.randint(0,255,500*500).reshape(shape).astype(np.uint8) a = np.zeros(500 * 500).reshape(500, 500).astype(np.uint8) ii = np.random.randint(0, 500, 1) jj = np.random.randint(0, 500, 1) a[ii, jj] = 1 a = vigra.filters.discDilation(a, radius=20) array[:] = a.reshape(shape).view(np.ndarray) * 255 op.Input.setDirty() do() cron.timeout.connect(do) ds = createDataSource(op.Output) layer = ColortableLayer(ds, jet()) mainwin = Viewer() mainwin.layerstack.append(layer) mainwin.dataShape = (1, h, w, 1, 1) print(mainwin.centralWidget()) BoxContr = BoxController(mainwin.editor, op.Output, boxListModel) BoxInt = BoxInterpreter(mainwin.editor.navInterpret, mainwin.editor.posModel, BoxContr, mainwin.centralWidget()) mainwin.editor.setNavigationInterpreter(BoxInt) # boxListModel.boxRemoved.connect(BoxContr.deleteItem) LV.show() mainwin.show()
#Generate #array[:] = np.random.randint(0,255,500*500).reshape(shape).astype(np.uint8) a = np.zeros(500*500).reshape(500,500).astype(np.uint8) ii=np.random.randint(0,500,1) jj=np.random.randint(0,500,1) a[ii,jj]=1 a=vigra.filters.discDilation(a,radius=20) array[:]=a.reshape(shape).view(np.ndarray)*255 op.Input.setDirty() do() cron.connect(cron, SIGNAL('timeout()'), do) ds = LazyflowSource( op.Output ) layer = ColortableLayer(ds,jet()) mainwin=Viewer() mainwin.layerstack.append(layer) mainwin.dataShape=(1,h,w,1,1) print mainwin.centralWidget() BoxContr=BoxController(mainwin.editor,op.Output,boxListModel) BoxInt=BoxInterpreter(mainwin.editor.navInterpret,mainwin.editor.posModel,BoxContr,mainwin.centralWidget()) mainwin.editor.setNavigationInterpreter(BoxInt) # boxListModel.boxRemoved.connect(BoxContr.deleteItem) LV.show()
def _initPredictionLayers(self, predictionSlot): layers = [] opLane = self.topLevelOperatorView colors = opLane.PmapColors.value names = opLane.LabelNames.value # Use a slicer to provide a separate slot for each channel layer #opSlicer = OpMultiArraySlicer2( parent=opLane.viewed_operator() ) #opSlicer.Input.connect( predictionSlot ) #opSlicer.AxisFlag.setValue('c') if predictionSlot.ready() : from volumina import colortables predictLayer = ColortableLayer(LazyflowSource(predictionSlot), colorTable = colortables.jet(), normalize = 'auto') #predictLayer = AlphaModulatedLayer( predictsrc, # tintColor=QColor(*colors[channel]), # range=(0.0, 1.0), # normalize=(0.0, 1.0) ) predictLayer.opacity = 0.25 predictLayer.visible = True predictLayer.name = "Prediction" layers.append(predictLayer) return layers
def setupLayers(self): """ Called by our base class when one of our data slots has changed. This function creates a layer for each slot we want displayed in the volume editor. """ # Base class provides the label layer. layers = super(PixelClassificationGui, self).setupLayers() ActionInfo = ShortcutManager.ActionInfo if ilastik_config.getboolean('ilastik', 'debug'): # Add the label projection layer. labelProjectionSlot = self.topLevelOperatorView.opLabelPipeline.opLabelArray.Projection2D if labelProjectionSlot.ready(): projectionSrc = LazyflowSource(labelProjectionSlot) try: # This colortable requires matplotlib from volumina.colortables import jet projectionLayer = ColortableLayer( projectionSrc, colorTable=[QColor(0,0,0,128).rgba()]+jet(N=255), normalize=(0.0, 1.0) ) except (ImportError, RuntimeError): pass else: projectionLayer.name = "Label Projection" projectionLayer.visible = False projectionLayer.opacity = 1.0 layers.append(projectionLayer) # Show the mask over everything except labels maskSlot = self.topLevelOperatorView.PredictionMasks if maskSlot.ready(): maskLayer = self._create_binary_mask_layer_from_slot( maskSlot ) maskLayer.name = "Mask" maskLayer.visible = True maskLayer.opacity = 1.0 layers.append( maskLayer ) # Add the uncertainty estimate layer uncertaintySlot = self.topLevelOperatorView.UncertaintyEstimate if uncertaintySlot.ready(): uncertaintySrc = LazyflowSource(uncertaintySlot) uncertaintyLayer = AlphaModulatedLayer( uncertaintySrc, tintColor=QColor( Qt.cyan ), range=(0.0, 1.0), normalize=(0.0, 1.0) ) uncertaintyLayer.name = "Uncertainty" uncertaintyLayer.visible = False uncertaintyLayer.opacity = 1.0 uncertaintyLayer.shortcutRegistration = ( "u", ActionInfo( "Prediction Layers", "Uncertainty", "Show/Hide Uncertainty", uncertaintyLayer.toggleVisible, self.viewerControlWidget(), uncertaintyLayer ) ) layers.append(uncertaintyLayer) labels = self.labelListData # Add each of the segmentations for channel, segmentationSlot in enumerate(self.topLevelOperatorView.SegmentationChannels): if segmentationSlot.ready() and channel < len(labels): ref_label = labels[channel] segsrc = LazyflowSource(segmentationSlot) segLayer = AlphaModulatedLayer( segsrc, tintColor=ref_label.pmapColor(), range=(0.0, 1.0), normalize=(0.0, 1.0) ) segLayer.opacity = 1 segLayer.visible = False #self.labelingDrawerUi.liveUpdateButton.isChecked() segLayer.visibleChanged.connect(self.updateShowSegmentationCheckbox) def setLayerColor(c, segLayer_=segLayer, initializing=False): if not initializing and segLayer_ not in self.layerstack: # This layer has been removed from the layerstack already. # Don't touch it. return segLayer_.tintColor = c self._update_rendering() def setSegLayerName(n, segLayer_=segLayer, initializing=False): if not initializing and segLayer_ not in self.layerstack: # This layer has been removed from the layerstack already. # Don't touch it. return oldname = segLayer_.name newName = "Segmentation (%s)" % n segLayer_.name = newName if not self.render: return if oldname in self._renderedLayers: label = self._renderedLayers.pop(oldname) self._renderedLayers[newName] = label setSegLayerName(ref_label.name, initializing=True) ref_label.pmapColorChanged.connect(setLayerColor) ref_label.nameChanged.connect(setSegLayerName) #check if layer is 3d before adding the "Toggle 3D" option #this check is done this way to match the VolumeRenderer, in #case different 3d-axistags should be rendered like t-x-y #_axiskeys = segmentationSlot.meta.getAxisKeys() if len(segmentationSlot.meta.shape) == 4: #the Renderer will cut out the last shape-dimension, so #we're checking for 4 dimensions self._setup_contexts(segLayer) layers.append(segLayer) # Add each of the predictions for channel, predictionSlot in enumerate(self.topLevelOperatorView.PredictionProbabilityChannels): if predictionSlot.ready() and channel < len(labels): ref_label = labels[channel] predictsrc = LazyflowSource(predictionSlot) predictLayer = AlphaModulatedLayer( predictsrc, tintColor=ref_label.pmapColor(), range=(0.0, 1.0), normalize=(0.0, 1.0) ) predictLayer.opacity = 0.25 predictLayer.visible = self.labelingDrawerUi.liveUpdateButton.isChecked() predictLayer.visibleChanged.connect(self.updateShowPredictionCheckbox) def setLayerColor(c, predictLayer_=predictLayer, initializing=False): if not initializing and predictLayer_ not in self.layerstack: # This layer has been removed from the layerstack already. # Don't touch it. return predictLayer_.tintColor = c def setPredLayerName(n, predictLayer_=predictLayer, initializing=False): if not initializing and predictLayer_ not in self.layerstack: # This layer has been removed from the layerstack already. # Don't touch it. return newName = "Prediction for %s" % n predictLayer_.name = newName setPredLayerName(ref_label.name, initializing=True) ref_label.pmapColorChanged.connect(setLayerColor) ref_label.nameChanged.connect(setPredLayerName) layers.append(predictLayer) # Add the raw data last (on the bottom) inputDataSlot = self.topLevelOperatorView.InputImages if inputDataSlot.ready(): inputLayer = self.createStandardLayerFromSlot( inputDataSlot ) inputLayer.name = "Input Data" inputLayer.visible = True inputLayer.opacity = 1.0 # the flag window_leveling is used to determine if the contrast # of the layer is adjustable if isinstance( inputLayer, GrayscaleLayer ): inputLayer.window_leveling = True else: inputLayer.window_leveling = False def toggleTopToBottom(): index = self.layerstack.layerIndex( inputLayer ) self.layerstack.selectRow( index ) if index == 0: self.layerstack.moveSelectedToBottom() else: self.layerstack.moveSelectedToTop() inputLayer.shortcutRegistration = ( "i", ActionInfo( "Prediction Layers", "Bring Input To Top/Bottom", "Bring Input To Top/Bottom", toggleTopToBottom, self.viewerControlWidget(), inputLayer ) ) layers.append(inputLayer) # The thresholding button can only be used if the data is displayed as grayscale. if inputLayer.window_leveling: self.labelingDrawerUi.thresToolButton.show() else: self.labelingDrawerUi.thresToolButton.hide() self.handleLabelSelectionChange() return layers