def _initContent(self):
     tl = QtGui.QHBoxLayout()
     tl.setMargin(0)
  
     self.btnSelectFeatures    = TabButton('Select Features', ilastikIcons.Select)
     self.btnStartLive         = TabButton('Start Live Prediction', ilastikIcons.Play)
     self.btnStartLive.setCheckable(True)
     self.btnTrainPredict      = TabButton('Train and Predict', ilastikIcons.System)
     self.btnExportClassifier  = TabButton('Export Classifier', ilastikIcons.Select)
     self.btnClassifierOptions = TabButton('Classifier Options', ilastikIcons.Select)
     
     self.btnSelectFeatures.setToolTip('Select and compute features')
     self.btnStartLive.setToolTip('Toggle interactive prediction of the current image while labeling')
     self.btnTrainPredict.setToolTip('Train and predict all images offline; this step is necessary for automation')
     self.btnExportClassifier.setToolTip('Save current classifier and its feature settings')
     self.btnClassifierOptions.setToolTip('Select a classifier and change its settings')
     
     self.on_otherProject()
     
     tl.addWidget(self.btnSelectFeatures)
     tl.addWidget(self.btnStartLive)
     tl.addWidget(self.btnTrainPredict)
     tl.addStretch()
     tl.addWidget(self.btnExportClassifier)
     tl.addWidget(self.btnClassifierOptions)
     
     self.setLayout(tl)
 def _initContent(self):
     tl = QtGui.QHBoxLayout()
     tl.setMargin(0)
     
     self.btnChooseOverlay = TabButton('Select overlay', ilastikIcons.Select)
     self.btn3D            = TabButton('3D', ilastikIcons.Play)
     self.btnReport        = TabButton('Generate report', ilastikIcons.Play)
     self.btnSelectAll     = TabButton('Select all', ilastikIcons.Select)
     self.btnClearAll      = TabButton('Clear all', ilastikIcons.Select)
     
     self.btnChooseOverlay.setToolTip('Choose the overlay with objects')
     self.btn3D.setToolTip('Display the currently selected objects in 3D')
     self.btnReport.setToolTip('Generate a report for all currently selected objects')
     
     self.btnSelectAll.setToolTip('Select all the objects')
     self.btnClearAll.setToolTip('Clear selection')
     
     tl.addWidget(self.btnChooseOverlay)
     tl.addWidget(self.btn3D)
     tl.addWidget(self.btnReport)
     tl.addStretch()
     tl.addWidget(self.btnSelectAll)
     tl.addWidget(self.btnClearAll)
     
     self.setLayout(tl)
 def _initContent(self):
     tl = QtGui.QHBoxLayout()
     tl.setMargin(0)
     
     self.btnInputOverlay = TabButton('Select Overlay', ilastikIcons.Select)
     self.btnCC           = TabButton('CC', ilastikIcons.System)
     self.btnCCBack       = TabButton('CC with background', ilastikIcons.System)
     self.btnFilter       = TabButton('Filter synapses', ilastikIcons.System)
     
     self.btnInputOverlay.setToolTip('Select an overlay for connected components search')
     self.btnCC.setToolTip('Run connected components on the selected overlay')
     self.btnCCBack.setToolTip('Run connected components with background')
     self.btnFilter.setToolTip('Perform synapse filtering and dilation')
     
     self.btnInputOverlay.setEnabled(True)
     self.btnCC.setEnabled(False)
     self.btnCCBack.setEnabled(False)
     self.btnFilter.setEnabled(True)
     
     tl.addWidget(self.btnInputOverlay)
     tl.addWidget(self.btnCC)
     tl.addWidget(self.btnCCBack)
     tl.addStretch()
     tl.addWidget(self.btnFilter)
     
     self.setLayout(tl)
Ejemplo n.º 4
0
class HelpTab(IlastikTabBase, QtGui.QWidget):
    name = 'Help'
    position = 101
    moduleName = "Help"
    
    def __init__(self, parent=None):
        IlastikTabBase.__init__(self, parent)
        QtGui.QWidget.__init__(self, parent)
        
        self._initContent()
        self._initConnects()
        
    def on_activation(self):
        ovs = self.ilastik._activeImage.module[self.__class__.moduleName].getOverlayRefs()
        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)
        overlayWidget.setVisible(False)
        self.ilastik.labelWidget.setOverlayWidget(overlayWidget)
        self.ilastik.labelWidget.setLabelWidget(ve.DummyLabelWidget())
               
    def on_deActivation(self):
        pass
        
    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)
        
        self.btnShortcuts = TabButton('Shortcuts', ilastikIcons.Help)
        self.btnAbout     = TabButton('About', ilastikIcons.Ilastik)
      
        self.btnShortcuts.setToolTip('Show a list of ilastik shortcuts')
        
        tl.addWidget(self.btnShortcuts)
        tl.addWidget(self.btnAbout)
        tl.addStretch()
        
        self.setLayout(tl)
        #self.shortcutManager = shortcutManager()
        
    def _initConnects(self):
        self.connect(self.btnShortcuts, QtCore.SIGNAL('clicked()'), self.on_btnShortcuts_clicked)
        self.connect(self.btnAbout, QtCore.SIGNAL('clicked()'), self.on_btnAbout_clicked)
        
    def on_btnShortcuts_clicked(self):
        shortcutManager.showDialog(self.ilastik)

    def on_btnAbout_clicked(self):
        about = About(self.ilastik)
        about.show()
Ejemplo n.º 5
0
    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)

        self.btnBatchProcess = TabButton('Batch Process', ilastikIcons.Play)

        self.btnBatchProcess.setToolTip(
            'Select and batch predict files with the currently trained classifier'
        )
        tl.addWidget(self.btnBatchProcess)
        tl.addStretch()

        self.setLayout(tl)
Ejemplo n.º 6
0
 def _initContent(self):
     tl = QtGui.QHBoxLayout()
     tl.setMargin(0)
     
     self.btnInputOverlay = TabButton('Select Overlay', ilastikIcons.Select)
     self.btnCC           = TabButton('CC', ilastikIcons.System)
     self.btnCCBack       = TabButton('CC with background', ilastikIcons.System)
     self.btnCCOptions    = TabButton('Options', ilastikIcons.System)
     
     self.btnInputOverlay.setToolTip('Select an overlay for connected components search')
     self.btnCC.setToolTip('Run connected componets on the selected overlay')
     self.btnCCBack.setToolTip('Run connected components with background')
     self.btnCCOptions.setToolTip('Set options')
     
     self.btnInputOverlay.setEnabled(True)
     self.btnCC.setEnabled(False)
     self.btnCCBack.setEnabled(False)
     self.btnCCOptions.setEnabled(True)
     
     tl.addWidget(self.btnInputOverlay)
     tl.addWidget(self.btnCC)
     tl.addWidget(self.btnCCBack)
     tl.addStretch()
     tl.addWidget(self.btnCCOptions)
     
     self.setLayout(tl)
 def _initContent(self):
     tl = QtGui.QHBoxLayout()
     tl.setMargin(0)
     
     self.btnChooseWeights = TabButton('Choose Border Probability Overlay', ilastikIcons.Select)
     self.btnSegment       = TabButton('Segment', ilastikIcons.Play)
     self.btnChooseWeights.setToolTip('Choose the input overlay that contains border probabilities')
     self.btnSegment.setToolTip('Segment the image')
     
     tl.addWidget(self.btnChooseWeights)
     tl.addWidget(self.btnSegment)
     tl.addStretch()
     
     self.setLayout(tl)
Ejemplo n.º 8
0
    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)

        self.btnNew = TabButton('New', ilastikIcons.New, 'Create new project')
        self.btnOpen = TabButton('Open', ilastikIcons.Open,
                                 'Open existing project')
        self.btnSave = TabButton('Save', ilastikIcons.Save,
                                 'Save current project to file')
        self.btnEdit = TabButton('Edit', ilastikIcons.Edit,
                                 'Edit current project')
        self.btnOptions = TabButton('Options', ilastikIcons.Edit,
                                    'Edit ilastik options')

        tl.addWidget(self.btnNew)
        tl.addWidget(self.btnOpen)
        tl.addWidget(self.btnSave)
        tl.addWidget(self.btnEdit)
        tl.addStretch()
        tl.addWidget(self.btnOptions)

        self.btnSave.setEnabled(False)
        self.btnEdit.setEnabled(False)
        self.btnOptions.setEnabled(False)

        self.setLayout(tl)
Ejemplo n.º 9
0
    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)

        self.btnShortcuts = TabButton('Shortcuts', ilastikIcons.Help)
        self.btnAbout = TabButton('About', ilastikIcons.Ilastik)

        self.btnShortcuts.setToolTip('Show a list of ilastik shortcuts')

        tl.addWidget(self.btnShortcuts)
        tl.addWidget(self.btnAbout)
        tl.addStretch()

        self.setLayout(tl)
Ejemplo n.º 10
0
    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)

        self.btnChooseWeights = TabButton('Choose Border Probability Overlay',
                                          ilastikIcons.Select)
        self.btnSegment = TabButton('Segment', ilastikIcons.Play)
        self.btnChooseWeights.setToolTip(
            'Choose the input overlay that contains border probabilities')
        self.btnSegment.setToolTip('Segment the image')

        tl.addWidget(self.btnChooseWeights)
        tl.addWidget(self.btnSegment)
        tl.addStretch()

        self.setLayout(tl)
Ejemplo n.º 11
0
class AutomateTab(IlastikTabBase, QtGui.QWidget):
    name = 'Automate'
    position = 100
    moduleName = "Classification"

    def __init__(self, parent=None):
        IlastikTabBase.__init__(self, parent)
        QtGui.QWidget.__init__(self, parent)

        self._initContent()
        self._initConnects()

    def on_activation(self):

        overlayWidget = OverlayWidget(self.ilastik.labelWidget,
                                      self.ilastik.project.dataMgr)
        overlayWidget.setVisible(False)

        self.ilastik.labelWidget.setOverlayWidget(overlayWidget)

        self.ilastik.labelWidget.setLabelWidget(ve.DummyLabelWidget())

    def on_deActivation(self):
        pass

    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)

        self.btnBatchProcess = TabButton('Batch Process', ilastikIcons.Play)

        self.btnBatchProcess.setToolTip(
            'Select and batch predict files with the currently trained classifier'
        )
        tl.addWidget(self.btnBatchProcess)
        tl.addStretch()

        self.setLayout(tl)

    def _initConnects(self):
        self.connect(self.btnBatchProcess, QtCore.SIGNAL('clicked()'),
                     self.on_btnBatchProcess_clicked)

    def on_btnBatchProcess_clicked(self):
        dialog = BatchProcess(self.parent)
        dialog.exec_()
Ejemplo n.º 12
0
class AutomateTab(IlastikTabBase, QtGui.QWidget):
    name = 'Automate'
    position = 100
    moduleName = "Classification"
    
    def __init__(self, parent=None):
        IlastikTabBase.__init__(self, parent)
        QtGui.QWidget.__init__(self, parent)
        
        self._initContent()
        self._initConnects()
    
    def on_activation(self):
        
        overlayWidget = OverlayWidget(self.ilastik.labelWidget, self.ilastik.project.dataMgr)
        overlayWidget.setVisible(False)
        
        self.ilastik.labelWidget.setOverlayWidget(overlayWidget)
        
        self.ilastik.labelWidget.setLabelWidget(ve.DummyLabelWidget())
                                
    def on_deActivation(self):
        pass
        
    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)
        
        self.btnBatchProcess = TabButton('Batch Process', ilastikIcons.Play)
       
        self.btnBatchProcess.setToolTip('Select and batch predict files with the currently trained classifier')
        tl.addWidget(self.btnBatchProcess)
        tl.addStretch()
        
        self.setLayout(tl)
        
    def _initConnects(self):
        self.connect(self.btnBatchProcess, QtCore.SIGNAL('clicked()'), self.on_btnBatchProcess_clicked)
        
    def on_btnBatchProcess_clicked(self): 
        dialog = BatchProcess(self.parent)
        dialog.exec_()
Ejemplo n.º 13
0
 def _initContent(self):
     tl = QtGui.QHBoxLayout()
     tl.setMargin(0)
     
     self.btnBatchProcess = TabButton('Batch Process', ilastikIcons.Play)
    
     self.btnBatchProcess.setToolTip('Select and batch predict files with the currently trained classifier')
     tl.addWidget(self.btnBatchProcess)
     tl.addStretch()
     
     self.setLayout(tl)
Ejemplo n.º 14
0
    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)

        self.btnSelectFeatures = TabButton('Select Features',
                                           ilastikIcons.Select)
        self.btnStartLive = TabButton('Start Live Prediction',
                                      ilastikIcons.Play)
        self.btnStartLive.setCheckable(True)
        self.btnTrainPredict = TabButton('Train and Predict',
                                         ilastikIcons.System)
        self.btnExportClassifier = TabButton('Export Classifier',
                                             ilastikIcons.Select)
        self.btnClassifierOptions = TabButton('Classifier Options',
                                              ilastikIcons.Select)

        self.btnSelectFeatures.setToolTip('Select and compute features')
        self.btnStartLive.setToolTip(
            'Toggle interactive prediction of the current image while labeling'
        )
        self.btnTrainPredict.setToolTip(
            'Train and predict all images offline; this step is necessary for automation'
        )
        self.btnExportClassifier.setToolTip(
            'Save current classifier and its feature settings')
        self.btnClassifierOptions.setToolTip(
            'Select a classifier and change its settings')

        self.on_otherProject()

        tl.addWidget(self.btnSelectFeatures)
        tl.addWidget(self.btnStartLive)
        tl.addWidget(self.btnTrainPredict)
        tl.addStretch()
        tl.addWidget(self.btnExportClassifier)
        tl.addWidget(self.btnClassifierOptions)

        self.setLayout(tl)
Ejemplo n.º 15
0
 def _initContent(self):
     tl = QtGui.QHBoxLayout()
     tl.setMargin(0)
     
     self.btnShortcuts = TabButton('Shortcuts', ilastikIcons.Help)
     self.btnAbout     = TabButton('About', ilastikIcons.Ilastik)
   
     self.btnShortcuts.setToolTip('Show a list of ilastik shortcuts')
     
     tl.addWidget(self.btnShortcuts)
     tl.addWidget(self.btnAbout)
     tl.addStretch()
     
     self.setLayout(tl)
Ejemplo n.º 16
0
    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)
        
        self.btnChooseOverlays      = TabButton('Select Overlay', ilastikIcons.Select)
        self.btnDecompose           = TabButton('decompose', ilastikIcons.Play)
        self.btnUnsupervisedOptions = TabButton('Unsupervised Decomposition Options', ilastikIcons.System)

        self.btnDecompose.setEnabled(False)     
        self.btnUnsupervisedOptions.setEnabled(False)     
        
        self.btnChooseOverlays.setToolTip('Choose the overlays for unsupervised decomposition')
        self.btnDecompose.setToolTip('perform unsupervised decomposition')
        self.btnUnsupervisedOptions.setToolTip('select an unsupervised decomposition plugin and change settings')
        
        tl.addWidget(self.btnChooseOverlays)
        tl.addWidget(self.btnDecompose)
        tl.addStretch()
        tl.addWidget(self.btnUnsupervisedOptions)
        
        self.setLayout(tl)
Ejemplo n.º 17
0
class ClassificationTab(IlastikTabBase, QtGui.QWidget):
    name = 'Classification'
    position = 1
    moduleName = "Classification"

    def __init__(self, parent=None):
        IlastikTabBase.__init__(self, parent)
        QtGui.QWidget.__init__(self, parent)

        self._initContent()
        self._initConnects()

    def on_activation(self):
        if self.ilastik.project is None:
            return
        if self.ilastik._activeImage.module[self.name] is None:
            self.ilastik._activeImage.module[self.name] = PropertyMgr(
                self.ilastik._activeImage)

        ovs = self.ilastik._activeImage.module[self.name].getOverlayRefs()

        raw = self.ilastik._activeImage.overlayMgr["Raw Data"]

        self.ilastik.labelWidget._history.volumeEditor = self.ilastik.labelWidget

        overlayWidget = OverlayWidget(self.ilastik.labelWidget,
                                      self.ilastik.project.dataMgr)
        self.ilastik.labelWidget.setOverlayWidget(overlayWidget)

        ov = self.ilastik._activeImage.overlayMgr["Classification/Labels"]

        overlayWidget.addOverlayRef(ov.getRef())
        overlayWidget.addOverlayRef(raw.getRef())

        self.ilastik.labelWidget.setLabelWidget(
            LabelListWidget(
                self.ilastik.project.dataMgr.module["Classification"].labelMgr,
                self.ilastik.project.dataMgr.module["Classification"]
                ["labelDescriptions"], self.ilastik.labelWidget, ov))

    def on_deActivation(self):
        if self.ilastik.project is None:
            return
        if hasattr(self.parent, "classificationInteractive"):
            self.btnStartLive.click()
        if self.ilastik.labelWidget is not None and self.ilastik.labelWidget._history != self.ilastik._activeImage.module[
                "Classification"]["labelHistory"]:
            self.ilastik._activeImage.module["Classification"][
                "labelHistory"] = self.ilastik.labelWidget._history

    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)

        self.btnSelectFeatures = TabButton('Select Features',
                                           ilastikIcons.Select)
        self.btnStartLive = TabButton('Start Live Prediction',
                                      ilastikIcons.Play)
        self.btnStartLive.setCheckable(True)
        self.btnTrainPredict = TabButton('Train and Predict',
                                         ilastikIcons.System)
        self.btnExportClassifier = TabButton('Export Classifier',
                                             ilastikIcons.Select)
        self.btnClassifierOptions = TabButton('Classifier Options',
                                              ilastikIcons.Select)

        self.btnSelectFeatures.setToolTip('Select and compute features')
        self.btnStartLive.setToolTip(
            'Toggle interactive prediction of the current image while labeling'
        )
        self.btnTrainPredict.setToolTip(
            'Train and predict all images offline; this step is necessary for automation'
        )
        self.btnExportClassifier.setToolTip(
            'Save current classifier and its feature settings')
        self.btnClassifierOptions.setToolTip(
            'Select a classifier and change its settings')

        self.on_otherProject()

        tl.addWidget(self.btnSelectFeatures)
        tl.addWidget(self.btnStartLive)
        tl.addWidget(self.btnTrainPredict)
        tl.addStretch()
        tl.addWidget(self.btnExportClassifier)
        tl.addWidget(self.btnClassifierOptions)

        self.setLayout(tl)

    def _initConnects(self):
        self.connect(self.btnSelectFeatures, QtCore.SIGNAL('clicked()'),
                     self.on_btnSelectFeatures_clicked)
        self.connect(self.btnStartLive, QtCore.SIGNAL('toggled(bool)'),
                     self.on_btnStartLive_clicked)
        self.connect(self.btnTrainPredict, QtCore.SIGNAL('clicked()'),
                     self.on_btnTrainPredict_clicked)
        self.connect(self.btnExportClassifier, QtCore.SIGNAL('clicked()'),
                     self.on_btnExportClassifier_clicked)
        self.connect(self.btnClassifierOptions, QtCore.SIGNAL('clicked()'),
                     self.on_btnClassifierOptions_clicked)

    def on_otherProject(self):
        self.btnSelectFeatures.setEnabled(True)
        self.btnStartLive.setEnabled(False)
        self.btnTrainPredict.setEnabled(False)
        self.btnExportClassifier.setEnabled(False)
        self.btnClassifierOptions.setEnabled(True)

    def on_btnSelectFeatures_clicked(self):
        preview = self.parent.project.dataMgr[0]._dataVol._data[0, 0, :, :,
                                                                0:3]
        newFeatureDlg = FeatureDlg(self.ilastik, preview)
        answer = newFeatureDlg.exec_()
        if answer == QtGui.QDialog.Accepted:
            self.featureComputation = FeatureComputation(self.ilastik)
        newFeatureDlg.close()
        newFeatureDlg.deleteLater()
        del newFeatureDlg
        gc.collect()

    def on_btnStartLive_clicked(self, state):
        if state:
            self.ilastik.ribbon.getTab('Classification').btnStartLive.setText(
                'Stop Live Prediction')
            self.classificationInteractive = ClassificationInteractive(
                self.ilastik)
        else:
            self.classificationInteractive.stop()
            self.ilastik.ribbon.getTab('Classification').btnStartLive.setText(
                'Start Live Prediction')

    def on_btnTrainPredict_clicked(self):
        self.classificationTrain = ClassificationTrain(self.ilastik)
        self.connect(self.classificationTrain,
                     QtCore.SIGNAL("trainingFinished()"),
                     self.on_trainingFinished)

    def on_trainingFinished(self):
        print "Training finished"
        self.classificationPredict = ClassificationPredict(self.ilastik)

    def on_btnExportClassifier_clicked(self):
        fileName = QtGui.QFileDialog.getSaveFileName(
            self, "Export Classifier", filter="HDF5 Files (*.h5)")

        try:
            self.ilastik.project.dataMgr.Classification.exportClassifiers(
                fileName)
        except (RuntimeError, AttributeError, IOError) as e:
            QtGui.QMessageBox.warning(self, 'Error', str(e),
                                      QtGui.QMessageBox.Ok)
            return

        try:
            self.ilastik.project.dataMgr.Classification.featureMgr.exportFeatureItems(
                fileName)
        except RuntimeError as e:
            QtGui.QMessageBox.warning(self, 'Error', str(e),
                                      QtGui.QMessageBox.Ok)
            return

        QtGui.QMessageBox.information(
            self, 'Success',
            "The classifier and the feature information have been saved successfully to:\n %s"
            % str(fileName), QtGui.QMessageBox.Ok)

    def on_btnClassifierOptions_clicked(self):
        dialog = ClassifierSelectionDlg(self.parent)
        self.parent.project.dataMgr.module[
            "Classification"].classifier = dialog.exec_()
Ejemplo n.º 18
0
class ObjectsTab(IlastikTabBase, QtGui.QWidget):
    name = 'Objects'
    moduleName = "Object_Picking"

    def __init__(self, parent=None):
        IlastikTabBase.__init__(self, parent)
        QtGui.QWidget.__init__(self, parent)

        self._initContent()
        self._initConnects()

    def on_activation(self):
        if self.ilastik.project is None:
            return
        ovs = self.ilastik._activeImage.module[
            self.__class__.moduleName].getOverlayRefs()
        if len(ovs) == 0:
            raw = self.ilastik._activeImage.overlayMgr["Raw Data"]
            if raw is not None:
                ovs.append(raw.getRef())

        self.ilastik.labelWidget._history.volumeEditor = self.ilastik.labelWidget

        overlayWidget = OverlayWidget(self.ilastik.labelWidget,
                                      self.ilastik.project.dataMgr)
        self.ilastik.labelWidget.setOverlayWidget(overlayWidget)

        self.objectLabels = ObjectListWidget(
            self.ilastik._activeImage.Object_Picking,
            self.ilastik._activeImage.Object_Picking.objects,
            self.ilastik.labelWidget)
        self.ilastik.labelWidget.setLabelWidget(self.objectLabels)

        #create ObjectsOverlay
        ov = ObjectOverlayItem(
            self.objectLabels,
            self.ilastik._activeImage.Object_Picking.objects._data,
            color=0,
            alpha=1.0,
            autoAdd=True,
            autoVisible=True,
            linkColorTable=True)
        self.ilastik._activeImage.overlayMgr["Objects/Selection"] = ov
        ov = self.ilastik._activeImage.overlayMgr["Objects/Selection"]

        self.ilastik.labelWidget.setLabelWidget(self.objectLabels)

    def on_deActivation(self):
        if self.ilastik.project is None:
            return
        self.ilastik._activeImage.Object_Picking.objects._history = self.ilastik.labelWidget._history

        if self.ilastik._activeImage.Object_Picking.objects._history is not None:
            self.ilastik.labelWidget._history = self.ilastik._activeImage.Object_Picking.objects._history

    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)

        self.btnChooseOverlay = TabButton('Select overlay',
                                          ilastikIcons.Select)
        self.btn3D = TabButton('3D', ilastikIcons.Play)
        self.btnReport = TabButton('Generate report', ilastikIcons.Play)
        self.btnSelectAll = TabButton('Select all', ilastikIcons.Select)
        self.btnClearAll = TabButton('Clear all', ilastikIcons.Select)

        self.btnChooseOverlay.setToolTip('Choose the overlay with objects')
        self.btn3D.setToolTip('Display the currently selected objects in 3D')
        self.btnReport.setToolTip(
            'Generate a report for all currently selected objects')

        self.btnSelectAll.setToolTip('Select all the objects')
        self.btnClearAll.setToolTip('Clear selection')

        tl.addWidget(self.btnChooseOverlay)
        tl.addWidget(self.btn3D)
        tl.addWidget(self.btnReport)
        tl.addStretch()
        tl.addWidget(self.btnSelectAll)
        tl.addWidget(self.btnClearAll)

        self.setLayout(tl)

    def _initConnects(self):
        self.connect(self.btnChooseOverlay, QtCore.SIGNAL('clicked()'),
                     self.on_btnChooseOverlay_clicked)
        self.connect(self.btn3D, QtCore.SIGNAL('clicked()'),
                     self.on_btn3D_clicked)
        self.connect(self.btnReport, QtCore.SIGNAL('clicked()'),
                     self.on_btnReport_clicked)
        self.connect(self.btnSelectAll, QtCore.SIGNAL('clicked()'),
                     self.on_btnSelectAll_clicked)
        self.connect(self.btnClearAll, QtCore.SIGNAL('clicked()'),
                     self.on_btnClearAll_clicked)

    def on_btnChooseOverlay_clicked(self):
        dlg = OverlaySelectionDialog(self.parent, singleSelection=True)
        answer = dlg.exec_()

        if len(answer) > 0:
            import ilastik.core.overlays.selectionOverlay
            if self.parent.project.dataMgr[
                    self.parent._activeImageNumber].overlayMgr[
                        "Objects/Selection Result"] is None:
                ov = ilastik.core.overlays.selectionOverlay.SelectionOverlay(
                    answer[0]._data,
                    color=long(QtGui.QColor(0, 255, 255).rgba()))
                ov.displayable3D = True
                ov.backgroundClasses = set([0])
                ov.smooth3D = True

                self.parent.project.dataMgr[
                    self.parent._activeImageNumber].overlayMgr[
                        "Objects/Selection Result"] = ov
                ov = self.parent.project.dataMgr[
                    self.parent.
                    _activeImageNumber].overlayMgr["Objects/Selection Result"]

            ref = answer[0].getRef()
            ref.setAlpha(0.4)
            self.parent.labelWidget.overlayWidget.addOverlayRef(ref)

            self.parent.project.dataMgr[
                self.parent.project.dataMgr.
                _activeImageNumber].Object_Picking.setInputData(
                    answer[0]._data)

            self.parent.labelWidget.repaint()

    def on_btn3D_clicked(self):
        pass

    def on_btnSelectAll_clicked(self):
        self.parent.project.dataMgr[
            self.parent.project.dataMgr.
            _activeImageNumber].Object_Picking.selectAll()

    def on_btnClearAll_clicked(self):
        self.parent.project.dataMgr[
            self.parent.project.dataMgr.
            _activeImageNumber].Object_Picking.clearAll()

    def on_btnReport_clicked(self):
        fileName = QtGui.QFileDialog.getSaveFileName(
            self, "Save Report", ilastik.gui.LAST_DIRECTORY,
            "Reports (*.html)")
        fn = str(QtCore.QDir.convertSeparators(fileName))
        ilastik.gui.LAST_DIRECTORY = QtCore.QFileInfo(fn).path()
        self.parent.project.dataMgr[
            self.parent.project.dataMgr.
            _activeImageNumber].Object_Picking.generateReport(fn)
Ejemplo n.º 19
0
class AutoSegmentationTab(IlastikTabBase, QtGui.QWidget):
    name = 'Auto Segmentation'
    position = 2
    moduleName = "Automatic_Segmentation"

    def __init__(self, parent=None):
        IlastikTabBase.__init__(self, parent)
        QtGui.QWidget.__init__(self, parent)

        self._initContent()
        self._initConnects()
        self.weights = None

    def on_activation(self):
        if self.ilastik.project is None:
            return
        ovs = self.ilastik._activeImage.module[
            self.__class__.moduleName].getOverlayRefs()
        if len(ovs) == 0:
            raw = self.ilastik._activeImage.overlayMgr["Raw Data"]
            if raw is not None:
                ovs.append(raw.getRef())

        self.ilastik.labelWidget._history.volumeEditor = self.ilastik.labelWidget

        overlayWidget = OverlayWidget(self.ilastik.labelWidget,
                                      self.ilastik.project.dataMgr)
        self.ilastik.labelWidget.setOverlayWidget(overlayWidget)

        self.ilastik.labelWidget.setLabelWidget(ve.DummyLabelWidget())

    def on_deActivation(self):
        pass

    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)

        self.btnChooseWeights = TabButton('Choose Border Probability Overlay',
                                          ilastikIcons.Select)
        self.btnSegment = TabButton('Segment', ilastikIcons.Play)
        self.btnChooseWeights.setToolTip(
            'Choose the input overlay that contains border probabilities')
        self.btnSegment.setToolTip('Segment the image')

        tl.addWidget(self.btnChooseWeights)
        tl.addWidget(self.btnSegment)
        tl.addStretch()

        self.setLayout(tl)

    def _initConnects(self):
        self.connect(self.btnChooseWeights, QtCore.SIGNAL('clicked()'),
                     self.on_btnChooseWeights_clicked)
        self.connect(self.btnSegment, QtCore.SIGNAL('clicked()'),
                     self.on_btnSegment_clicked)

    def on_btnChooseWeights_clicked(self):
        dlg = OverlaySelectionDialog(self.ilastik, singleSelection=True)
        answer = dlg.exec_()

        if len(answer) > 0:
            overlay = answer[0]
            self.parent.labelWidget.overlayWidget.addOverlayRef(
                overlay.getRef())

            volume = overlay._data[0, :, :, :, 0]

            borderIndicator = QtGui.QInputDialog.getItem(
                self.ilastik,
                "Select border indicator type",
                "Select the border probability type : \n (Normal: bright pixels mean high border probability, Inverted: dark pixels mean high border probability) ",
                ["Normal", "Inverted"],
                editable=False)
            borderIndicator = str(borderIndicator[0])
            if borderIndicator == "Normal":
                weights = volume[:, :, :]
            elif borderIndicator == "Inverted":
                weights = self.parent.project.dataMgr.Automatic_Segmentation.invertPotential(
                    volume)
            weights = self.parent.project.dataMgr.Automatic_Segmentation.normalizePotential(
                weights)

            self.weights = weights

    def on_btnSegment_clicked(self):

        if self.weights is not None:
            self.parent.project.dataMgr.Automatic_Segmentation.computeResults(
                self.weights)
            self.parent.project.dataMgr.Automatic_Segmentation.finalizeResults(
            )

            self.parent.labelWidget.repaint()

    def on_btnSegmentorsOptions_clicked(self):
        pass
Ejemplo n.º 20
0
class ConnectedComponentsTab(IlastikTabBase, QtGui.QWidget):
    name = 'Connected Components'
    position = 2
    moduleName = "Connected_Components"

    def __init__(self, parent=None):
        IlastikTabBase.__init__(self, parent)
        QtGui.QWidget.__init__(self, parent)

        self._initContent()
        self._initConnects()

    def on_activation(self):
        if self.ilastik.project is None:
            return
        ovs = self.ilastik._activeImage.module[
            self.__class__.moduleName].getOverlayRefs()
        if len(ovs) == 0:
            raw = self.ilastik._activeImage.overlayMgr["Raw Data"]
            if raw is not None:
                ovs.append(raw.getRef())

        self.ilastik.labelWidget._history.volumeEditor = self.ilastik.labelWidget

        overlayWidget = OverlayWidget(self.ilastik.labelWidget,
                                      self.ilastik.project.dataMgr)
        self.ilastik.labelWidget.setOverlayWidget(overlayWidget)

        self.backgroundLabels = BackgroundWidget(
            self.ilastik._activeImage.Connected_Components,
            self.ilastik._activeImage.Connected_Components.background,
            self.ilastik.labelWidget)
        self.ilastik.labelWidget.setLabelWidget(self.backgroundLabels)

        #create ObjectsOverlay
        ov = BackgroundOverlayItem(
            self.backgroundLabels,
            self.ilastik._activeImage.Connected_Components.background._data,
            color=0,
            alpha=1.0,
            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(self.backgroundLabels)

    def on_deActivation(self):
        if self.ilastik.project is None:
            return
        self.ilastik._activeImage.Connected_Components.background._history = self.ilastik.labelWidget._history

        if self.ilastik._activeImage.Connected_Components.background._history is not None:
            self.ilastik.labelWidget._history = self.ilastik._activeImage.Connected_Components.background._history

    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)

        self.btnInputOverlay = TabButton('Select Overlay', ilastikIcons.Select)
        self.btnCC = TabButton('CC', ilastikIcons.System)
        self.btnCCBack = TabButton('CC with background', ilastikIcons.System)
        self.btnFilter = TabButton('Filter synapses', ilastikIcons.System)

        self.btnInputOverlay.setToolTip(
            'Select an overlay for connected components search')
        self.btnCC.setToolTip(
            'Run connected components on the selected overlay')
        self.btnCCBack.setToolTip('Run connected components with background')
        self.btnFilter.setToolTip('Perform synapse filtering and dilation')

        self.btnInputOverlay.setEnabled(True)
        self.btnCC.setEnabled(False)
        self.btnCCBack.setEnabled(False)
        self.btnFilter.setEnabled(True)

        tl.addWidget(self.btnInputOverlay)
        tl.addWidget(self.btnCC)
        tl.addWidget(self.btnCCBack)
        tl.addStretch()
        tl.addWidget(self.btnFilter)

        self.setLayout(tl)

    def _initConnects(self):
        self.connect(self.btnInputOverlay, QtCore.SIGNAL('clicked()'),
                     self.on_btnInputOverlay_clicked)
        self.connect(self.btnCC, QtCore.SIGNAL('clicked()'),
                     self.on_btnCC_clicked)
        self.connect(self.btnCCBack, QtCore.SIGNAL('clicked()'),
                     self.on_btnCCBack_clicked)
        self.connect(self.btnFilter, QtCore.SIGNAL('clicked()'),
                     self.on_btnFilter_clicked)
        #self.connect(self.btnCCOptions, QtCore.SIGNAL('clicked()'), self.on_btnCCOptions_clicked)

    def on_btnInputOverlay_clicked(self):
        dlg = OverlaySelectionDialog(self.ilastik, singleSelection=True)
        answer = dlg.exec_()

        if len(answer) > 0:
            ref = answer[0].getRef()
            ref.setAlpha(0.4)
            self.inputOverlay = answer[0]
            self.parent.labelWidget.overlayWidget.addOverlayRef(ref)
            self.parent.project.dataMgr[
                self.parent.project.dataMgr.
                _activeImageNumber].Connected_Components.setInputData(
                    answer[0]._data)
            self.parent.labelWidget.repaint()
            self.btnCC.setEnabled(True)
            self.btnCCBack.setEnabled(True)

    def on_btnCC_clicked(self):
        self.connComp = CC(self.ilastik)
        self.connComp.start(None)
        #self.parent.project.dataMgr[self.parent.project.dataMgr._activeImageNumber].Connected_Components.connect(background = False)
    def on_btnCCBack_clicked(self):
        self.connComp = CC(self.ilastik)
        self.connComp.start(self.parent.project.dataMgr[
            self.parent.project.dataMgr._activeImageNumber].
                            Connected_Components.connCompBackgroundClasses)
        self.btnFilter.setEnabled(True)
        #self.parent.project.dataMgr[self.parent.project.dataMgr._activeImageNumber].Connected_Components.connect(background = True)

    def on_btnFilter_clicked(self):
        descriptions = self.parent.project.dataMgr.module["Classification"][
            "labelDescriptions"]
        desc_names = []
        for i, d in enumerate(descriptions):
            tempstr = str(i) + " " + d.name
            desc_names.append(tempstr)
        dlg = LabelSelectionForm(self.ilastik, desc_names)
        label, minsize, maxsize = dlg.exec_()
        print label, minsize, maxsize
        # call core function
        self.parent.project.dataMgr.Connected_Components.filterSynapses(
            self.inputOverlay, label, minsize, maxsize)
        self.ilastik.labelWidget.repaint()
 def _initContent(self):
     tl = QtGui.QHBoxLayout()
     tl.setMargin(0)
     
     self.btnChooseWeights     = TabButton('Choose Weights', ilastikIcons.Select)
     self.btnChooseDimensions  = TabButton('Using 3D', ilastikIcons.Select)
     self.btnSegment           = TabButton('Segment', ilastikIcons.Play)
     self.btnSaveAs            = TabButton('Save As', ilastikIcons.SaveAs)
     self.btnSave              = TabButton('Save', ilastikIcons.Save)
     self.btnSegmentorsOptions = TabButton('Change Segmentor', ilastikIcons.System)
     
     self.inlineSettings = InlineSettingsWidget(self)
     
     self.only2D = False
     
     self.btnChooseWeights.setToolTip('Choose the edge weights for the segmentation task')
     self.btnSegment.setToolTip('Segment the image into foreground/background')
     self.btnChooseDimensions.setToolTip('Switch between slice based 2D segmentation and full 3D segmentation\n This is mainly useful for 3D Date with very weak border indicators, where seeds placed in one slice can bleed out badly to other regions')
     self.btnSegmentorsOptions.setToolTip('Select a segmentation plugin and change settings')
     
     
     tl.addWidget(self.btnChooseWeights)
     
     #tl.addWidget(self.btnChooseDimensions)
     tl.addWidget(self.btnSegment)        
     tl.addWidget(self.inlineSettings)
     tl.addWidget(self.btnSave)
     tl.addWidget(self.btnSaveAs)
     tl.addStretch()
     tl.addWidget(self.btnSegmentorsOptions)
     
     self.btnSegment.setEnabled(False)
     self.btnSaveAs.setEnabled(False)
     self.btnSave.setEnabled(False)
     self.btnChooseDimensions.setEnabled(False)
     self.btnSegmentorsOptions.setEnabled(False)
     
     self.setLayout(tl)
Ejemplo n.º 22
0
class ProjectTab(IlastikTabBase, QtGui.QWidget):
    name = 'Project'
    position = 0
    moduleName = "Project"

    def __init__(self, parent=None):
        IlastikTabBase.__init__(self, parent)
        QtGui.QWidget.__init__(self, parent)
        self._initContent()
        self._initConnects()

    def on_activation(self):
        if self.ilastik.project is None:
            self.ilastik.setTabBusy(True)
            return
        ovs = self.ilastik._activeImage.module[
            self.__class__.moduleName].getOverlayRefs()
        if len(ovs) == 0:
            raw = self.ilastik._activeImage.overlayMgr["Raw Data"]
            if raw is not None:
                ovs.append(raw.getRef())

        self.ilastik.labelWidget._history.volumeEditor = self.ilastik.labelWidget

        overlayWidget = OverlayWidget(self.ilastik.labelWidget,
                                      self.ilastik.project.dataMgr)
        overlayWidget.setVisible(False)

        self.ilastik.labelWidget.setOverlayWidget(overlayWidget)

        self.ilastik.labelWidget.setLabelWidget(ve.DummyLabelWidget())

    def on_deActivation(self):
        pass

    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)

        self.btnNew = TabButton('New', ilastikIcons.New, 'Create new project')
        self.btnOpen = TabButton('Open', ilastikIcons.Open,
                                 'Open existing project')
        self.btnSave = TabButton('Save', ilastikIcons.Save,
                                 'Save current project to file')
        self.btnEdit = TabButton('Edit', ilastikIcons.Edit,
                                 'Edit current project')
        self.btnOptions = TabButton('Options', ilastikIcons.Edit,
                                    'Edit ilastik options')

        tl.addWidget(self.btnNew)
        tl.addWidget(self.btnOpen)
        tl.addWidget(self.btnSave)
        tl.addWidget(self.btnEdit)
        tl.addStretch()
        tl.addWidget(self.btnOptions)

        self.btnSave.setEnabled(False)
        self.btnEdit.setEnabled(False)
        self.btnOptions.setEnabled(False)

        self.setLayout(tl)

    def _initConnects(self):
        self.connect(self.btnNew, QtCore.SIGNAL('clicked()'),
                     self.on_btnNew_clicked)
        self.connect(self.btnOpen, QtCore.SIGNAL('clicked()'),
                     self.on_btnOpen_clicked)
        self.connect(self.btnSave, QtCore.SIGNAL('clicked()'),
                     self.on_btnSave_clicked)
        self.connect(self.btnEdit, QtCore.SIGNAL('clicked()'),
                     self.on_btnEdit_clicked)
        self.connect(self.btnOptions, QtCore.SIGNAL('clicked()'),
                     self.on_btnOptions_clicked)

    # Custom Callbacks
    def on_btnNew_clicked(self):
        self.parent.projectDlg = ProjectDlg(self.parent)
        if self.parent.projectDlg.exec_() == QtGui.QDialog.Accepted:
            self.btnSave.setEnabled(True)
            self.btnEdit.setEnabled(True)
            self.btnOptions.setEnabled(True)
            self.parent.updateFileSelector()
            self.parent._activeImageNumber = 0
            self.ilastik.setTabBusy(False)

    def on_btnSave_clicked(self):
        self.parent.saveProject()

    def openProject(self, fileName):
        labelWidget = None
        self.parent.project = projectClass.Project.loadFromDisk(
            str(fileName), self.parent.featureCache)
        self.btnSave.setEnabled(True)
        self.btnEdit.setEnabled(True)
        self.btnOptions.setEnabled(True)
        self.parent.updateFileSelector()
        self.parent.on_otherProject()
        self.ilastik.setTabBusy(False)
        ilastik.gui.LAST_DIRECTORY = QtCore.QFileInfo(fileName).path()
        gc.collect()
        if labelWidget is not None:
            if labelWidget() is not None:
                refs = gc.get_referrers(labelWidget())
                for i, r in enumerate(refs):
                    print type(r)
                    print "##################################################################"
                    print r

    def on_btnOpen_clicked(self):
        fileName = QtGui.QFileDialog.getOpenFileName(
            self, "Open Project", ilastik.gui.LAST_DIRECTORY,
            "Project Files (*.ilp)")
        if str(fileName) != "":
            self.openProject(fileName)

    def on_btnEdit_clicked(self):
        self.parent.projectDlg = ProjectDlg(self.parent, False)
        self.parent.projectDlg.updateDlg(self.parent.project)
        self.parent.projectModified()

    def on_btnOptions_clicked(self):
        tmp = ProjectSettingsDlg(self.ilastik, self.ilastik.project)
        tmp.exec_()
Ejemplo n.º 23
0
class ObjectsTab(IlastikTabBase, QtGui.QWidget):
    name = 'Objects'
    moduleName = "Object_Picking"
    
    def __init__(self, parent=None):
        IlastikTabBase.__init__(self, parent)
        QtGui.QWidget.__init__(self, parent)
        
        self._initContent()
        self._initConnects()
        
    def on_activation(self):
        if self.ilastik.project is None:
            return
        ovs = self.ilastik._activeImage.module[self.__class__.moduleName].getOverlayRefs()
        if len(ovs) == 0:
            raw = self.ilastik._activeImage.overlayMgr["Raw Data"]
            if raw is not None:
                ovs.append(raw.getRef())        
        
        self.ilastik.labelWidget._history.volumeEditor = self.ilastik.labelWidget

        overlayWidget = OverlayWidget(self.ilastik.labelWidget, self.ilastik.project.dataMgr)
        self.ilastik.labelWidget.setOverlayWidget(overlayWidget)
        
        self.objectLabels = ObjectListWidget(self.ilastik._activeImage.Object_Picking,  self.ilastik._activeImage.Object_Picking.objects,  self.ilastik.labelWidget) 
        self.ilastik.labelWidget.setLabelWidget(self.objectLabels)
        
        #create ObjectsOverlay
        ov = ObjectOverlayItem(self.objectLabels, self.ilastik._activeImage.Object_Picking.objects._data, color = 0, alpha = 1.0, autoAdd = True, autoVisible = True,  linkColorTable = True)
        self.ilastik._activeImage.overlayMgr["Objects/Selection"] = ov
        ov = self.ilastik._activeImage.overlayMgr["Objects/Selection"]
        
        self.ilastik.labelWidget.setLabelWidget(self.objectLabels)
    
    def on_deActivation(self):
        if self.ilastik.project is None:
            return
        self.ilastik._activeImage.Object_Picking.objects._history = self.ilastik.labelWidget._history
        
        if self.ilastik._activeImage.Object_Picking.objects._history is not None:
            self.ilastik.labelWidget._history = self.ilastik._activeImage.Object_Picking.objects._history
        
    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)
        
        self.btnChooseOverlay = TabButton('Select overlay', ilastikIcons.Select)
        self.btn3D            = TabButton('3D', ilastikIcons.Play)
        self.btnReport        = TabButton('Generate report', ilastikIcons.Play)
        self.btnSelectAll     = TabButton('Select all', ilastikIcons.Select)
        self.btnClearAll      = TabButton('Clear all', ilastikIcons.Select)
        
        self.btnChooseOverlay.setToolTip('Choose the overlay with objects')
        self.btn3D.setToolTip('Display the currently selected objects in 3D')
        self.btnReport.setToolTip('Generate a report for all currently selected objects')
        
        self.btnSelectAll.setToolTip('Select all the objects')
        self.btnClearAll.setToolTip('Clear selection')
        
        tl.addWidget(self.btnChooseOverlay)
        tl.addWidget(self.btn3D)
        tl.addWidget(self.btnReport)
        tl.addStretch()
        tl.addWidget(self.btnSelectAll)
        tl.addWidget(self.btnClearAll)
        
        self.setLayout(tl)
        
    def _initConnects(self):
        self.connect(self.btnChooseOverlay, QtCore.SIGNAL('clicked()'), self.on_btnChooseOverlay_clicked)
        self.connect(self.btn3D, QtCore.SIGNAL('clicked()'), self.on_btn3D_clicked)
        self.connect(self.btnReport, QtCore.SIGNAL('clicked()'), self.on_btnReport_clicked)
        self.connect(self.btnSelectAll, QtCore.SIGNAL('clicked()'), self.on_btnSelectAll_clicked)
        self.connect(self.btnClearAll, QtCore.SIGNAL('clicked()'), self.on_btnClearAll_clicked)
        
    def on_btnChooseOverlay_clicked(self):
        dlg = OverlaySelectionDialog(self.parent,  singleSelection = True)
        answer = dlg.exec_()
        
        if len(answer) > 0:
            import ilastik.core.overlays.selectionOverlay
            if self.parent.project.dataMgr[self.parent._activeImageNumber].overlayMgr["Objects/Selection Result"] is None:
                ov = ilastik.core.overlays.selectionOverlay.SelectionOverlay(answer[0]._data, color = long(QtGui.QColor(0,255,255).rgba()))
                ov.displayable3D = True
                ov.backgroundClasses = set([0])
                ov.smooth3D = True
                
                self.parent.project.dataMgr[self.parent._activeImageNumber].overlayMgr["Objects/Selection Result"] = ov
                ov = self.parent.project.dataMgr[self.parent._activeImageNumber].overlayMgr["Objects/Selection Result"]
            
            ref = answer[0].getRef()
            ref.setAlpha(0.4)
            self.parent.labelWidget.overlayWidget.addOverlayRef(ref)
            
            self.parent.project.dataMgr[self.parent.project.dataMgr._activeImageNumber].Object_Picking.setInputData(answer[0]._data)
                
            self.parent.labelWidget.repaint()

    def on_btn3D_clicked(self):
        pass

    def on_btnSelectAll_clicked(self):
        self.parent.project.dataMgr[self.parent.project.dataMgr._activeImageNumber].Object_Picking.selectAll()

    def on_btnClearAll_clicked(self):
        self.parent.project.dataMgr[self.parent.project.dataMgr._activeImageNumber].Object_Picking.clearAll()

    def on_btnReport_clicked(self):
        fileName = QtGui.QFileDialog.getSaveFileName(self, "Save Report", ilastik.gui.LAST_DIRECTORY, "Reports (*.html)")
        fn = str(QtCore.QDir.convertSeparators(fileName))
        ilastik.gui.LAST_DIRECTORY = QtCore.QFileInfo(fn).path()
        self.parent.project.dataMgr[self.parent.project.dataMgr._activeImageNumber].Object_Picking.generateReport(fn)
Ejemplo n.º 24
0
class ConnectedComponentsTab(IlastikTabBase, QtGui.QWidget):
    name = "Connected Components"
    def __init__(self, parent=None):
        IlastikTabBase.__init__(self, parent)
        QtGui.QWidget.__init__(self, parent)
        
        self._initContent()
        self._initConnects()
        
    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 on_deActivation(self):
        if self.ilastik.project is None:
            return
        self.ilastik._activeImage._dataVol.background._history = self.ilastik.labelWidget._history

        if self.ilastik._activeImage._dataVol.background._history is not None:
            self.ilastik.labelWidget._history = self.ilastik._activeImage._dataVol.background._history
        
    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)
        
        self.btnInputOverlay = TabButton('Select Overlay', ilastikIcons.Select)
        self.btnCC           = TabButton('CC', ilastikIcons.System)
        self.btnCCBack       = TabButton('CC with background', ilastikIcons.System)
        self.btnCCOptions    = TabButton('Options', ilastikIcons.System)
        
        self.btnInputOverlay.setToolTip('Select an overlay for connected components search')
        self.btnCC.setToolTip('Run connected componets on the selected overlay')
        self.btnCCBack.setToolTip('Run connected components with background')
        self.btnCCOptions.setToolTip('Set options')
        
        self.btnInputOverlay.setEnabled(True)
        self.btnCC.setEnabled(False)
        self.btnCCBack.setEnabled(False)
        self.btnCCOptions.setEnabled(True)
        
        tl.addWidget(self.btnInputOverlay)
        tl.addWidget(self.btnCC)
        tl.addWidget(self.btnCCBack)
        tl.addStretch()
        tl.addWidget(self.btnCCOptions)
        
        self.setLayout(tl)
        
    def _initConnects(self):
        self.connect(self.btnInputOverlay, QtCore.SIGNAL('clicked()'), self.on_btnInputOverlay_clicked)
        self.connect(self.btnCC, QtCore.SIGNAL('clicked()'), self.on_btnCC_clicked)
        self.connect(self.btnCCBack, QtCore.SIGNAL('clicked()'), self.on_btnCCBack_clicked)
        #self.connect(self.btnCCOptions, QtCore.SIGNAL('clicked()'), self.on_btnCCOptions_clicked)
        
        
    def on_btnInputOverlay_clicked(self):
        dlg = OverlaySelectionDialog(self.ilastik,  singleSelection = True)
        answer = dlg.exec_()
        
        if len(answer) > 0:
            overlay = answer[0]
            self.parent.labelWidget.overlayWidget.addOverlayRef(overlay.getRef())
            print overlay.key
            self.parent.project.dataMgr.connCompBackgroundKey = overlay.key
            
        self.btnCC.setEnabled(True)
        self.btnCCBack.setEnabled(True)
        
    def on_btnCC_clicked(self):
        self.parent.on_connectComponents(background = False)
    def on_btnCCBack_clicked(self):
        self.parent.on_connectComponents(background = True)
class ConnectedComponentsTab(IlastikTabBase, QtGui.QWidget):
    name = 'Connected Components'
    position = 2
    moduleName = "Connected_Components"
    
    def __init__(self, parent=None):
        IlastikTabBase.__init__(self, parent)
        QtGui.QWidget.__init__(self, parent)
        
        self._initContent()
        self._initConnects()
        
    def on_activation(self):
        if self.ilastik.project is None:
            return
        ovs = self.ilastik._activeImage.module[self.__class__.moduleName].getOverlayRefs()
        if len(ovs) == 0:
            raw = self.ilastik._activeImage.overlayMgr["Raw Data"]
            if raw is not None:
                ovs.append(raw.getRef())        
        
        self.ilastik.labelWidget._history.volumeEditor = self.ilastik.labelWidget

        overlayWidget = OverlayWidget(self.ilastik.labelWidget, self.ilastik.project.dataMgr)
        self.ilastik.labelWidget.setOverlayWidget(overlayWidget)

        self.backgroundLabels = BackgroundWidget(self.ilastik._activeImage.Connected_Components,  self.ilastik._activeImage.Connected_Components.background,  self.ilastik.labelWidget) 
        self.ilastik.labelWidget.setLabelWidget(self.backgroundLabels)
        
        #create ObjectsOverlay
        ov = BackgroundOverlayItem(self.backgroundLabels, self.ilastik._activeImage.Connected_Components.background._data, color = 0, alpha = 1.0, 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(self.backgroundLabels)
    
    def on_deActivation(self):
        if self.ilastik.project is None:
            return
        self.ilastik._activeImage.Connected_Components.background._history = self.ilastik.labelWidget._history
        
        if self.ilastik._activeImage.Connected_Components.background._history is not None:
            self.ilastik.labelWidget._history = self.ilastik._activeImage.Connected_Components.background._history
            
    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)
        
        self.btnInputOverlay = TabButton('Select Overlay', ilastikIcons.Select)
        self.btnCC           = TabButton('CC', ilastikIcons.System)
        self.btnCCBack       = TabButton('CC with background', ilastikIcons.System)
        self.btnFilter       = TabButton('Filter synapses', ilastikIcons.System)
        
        self.btnInputOverlay.setToolTip('Select an overlay for connected components search')
        self.btnCC.setToolTip('Run connected components on the selected overlay')
        self.btnCCBack.setToolTip('Run connected components with background')
        self.btnFilter.setToolTip('Perform synapse filtering and dilation')
        
        self.btnInputOverlay.setEnabled(True)
        self.btnCC.setEnabled(False)
        self.btnCCBack.setEnabled(False)
        self.btnFilter.setEnabled(True)
        
        tl.addWidget(self.btnInputOverlay)
        tl.addWidget(self.btnCC)
        tl.addWidget(self.btnCCBack)
        tl.addStretch()
        tl.addWidget(self.btnFilter)
        
        self.setLayout(tl)
        
    def _initConnects(self):
        self.connect(self.btnInputOverlay, QtCore.SIGNAL('clicked()'), self.on_btnInputOverlay_clicked)
        self.connect(self.btnCC, QtCore.SIGNAL('clicked()'), self.on_btnCC_clicked)
        self.connect(self.btnCCBack, QtCore.SIGNAL('clicked()'), self.on_btnCCBack_clicked)
        self.connect(self.btnFilter, QtCore.SIGNAL('clicked()'), self.on_btnFilter_clicked)
        #self.connect(self.btnCCOptions, QtCore.SIGNAL('clicked()'), self.on_btnCCOptions_clicked)
        
        
    def on_btnInputOverlay_clicked(self):
        dlg = OverlaySelectionDialog(self.ilastik,  singleSelection = True)
        answer = dlg.exec_()
        
        if len(answer) > 0:
            ref = answer[0].getRef()
            ref.setAlpha(0.4)
            self.inputOverlay = answer[0]
            self.parent.labelWidget.overlayWidget.addOverlayRef(ref)
            self.parent.project.dataMgr[self.parent.project.dataMgr._activeImageNumber].Connected_Components.setInputData(answer[0]._data)
            self.parent.labelWidget.repaint()
            self.btnCC.setEnabled(True)
            self.btnCCBack.setEnabled(True)
        
    def on_btnCC_clicked(self):
        self.connComp = CC(self.ilastik)       
        self.connComp.start(None)
        #self.parent.project.dataMgr[self.parent.project.dataMgr._activeImageNumber].Connected_Components.connect(background = False)
    def on_btnCCBack_clicked(self):
        self.connComp = CC(self.ilastik)
        self.connComp.start(self.parent.project.dataMgr[self.parent.project.dataMgr._activeImageNumber].Connected_Components.connCompBackgroundClasses)
        self.btnFilter.setEnabled(True)
        #self.parent.project.dataMgr[self.parent.project.dataMgr._activeImageNumber].Connected_Components.connect(background = True)
        
    def on_btnFilter_clicked(self):
        descriptions =  self.parent.project.dataMgr.module["Classification"]["labelDescriptions"]
        desc_names = []
        for i, d in enumerate(descriptions):
            tempstr = str(i)+" "+d.name
            desc_names.append(tempstr)
        dlg = LabelSelectionForm(self.ilastik, desc_names)
        label, minsize, maxsize = dlg.exec_()
        print label, minsize, maxsize
        # call core function
        self.parent.project.dataMgr.Connected_Components.filterSynapses(self.inputOverlay, label, minsize, maxsize)
        self.ilastik.labelWidget.repaint()
class AutoSegmentationTab(IlastikTabBase, QtGui.QWidget):
    name = 'Auto Segmentation'
    position = 2
    moduleName = "Automatic_Segmentation"
    
    def __init__(self, parent=None):
        IlastikTabBase.__init__(self, parent)
        QtGui.QWidget.__init__(self, parent)
        
        self._initContent()
        self._initConnects()
        self.weights = None
        
    def on_activation(self):
        if self.ilastik.project is None:
            return
        ovs = self.ilastik._activeImage.module[self.__class__.moduleName].getOverlayRefs()
        if len(ovs) == 0:
            raw = self.ilastik._activeImage.overlayMgr["Raw Data"]
            if raw is not None:
                ovs.append(raw.getRef())
                        
        self.ilastik.labelWidget._history.volumeEditor = self.ilastik.labelWidget

        overlayWidget = OverlayWidget(self.ilastik.labelWidget, self.ilastik.project.dataMgr)
        self.ilastik.labelWidget.setOverlayWidget(overlayWidget)
        
        self.ilastik.labelWidget.setLabelWidget(ve.DummyLabelWidget())
    
    def on_deActivation(self):
        pass
    
    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)
        
        self.btnChooseWeights = TabButton('Choose Border Probability Overlay', ilastikIcons.Select)
        self.btnSegment       = TabButton('Segment', ilastikIcons.Play)
        self.btnChooseWeights.setToolTip('Choose the input overlay that contains border probabilities')
        self.btnSegment.setToolTip('Segment the image')
        
        tl.addWidget(self.btnChooseWeights)
        tl.addWidget(self.btnSegment)
        tl.addStretch()
        
        self.setLayout(tl)
        
    def _initConnects(self):
        self.connect(self.btnChooseWeights, QtCore.SIGNAL('clicked()'), self.on_btnChooseWeights_clicked)
        self.connect(self.btnSegment, QtCore.SIGNAL('clicked()'), self.on_btnSegment_clicked)
        
    def on_btnChooseWeights_clicked(self):
        dlg = OverlaySelectionDialog(self.ilastik,  singleSelection = True)
        answer = dlg.exec_()
        
        if len(answer) > 0:
            overlay = answer[0]
            self.parent.labelWidget.overlayWidget.addOverlayRef(overlay.getRef())
            
            volume = overlay._data[0,:,:,:,0]
            
            borderIndicator = QtGui.QInputDialog.getItem(self.ilastik, "Select border indicator type", "Select the border probability type : \n (Normal: bright pixels mean high border probability, Inverted: dark pixels mean high border probability) ",  ["Normal",  "Inverted"],  editable = False)
            borderIndicator = str(borderIndicator[0])
            if borderIndicator == "Normal":
                weights = volume[:,:,:]
            elif borderIndicator == "Inverted":            
                weights = self.parent.project.dataMgr.Automatic_Segmentation.invertPotential(volume)
            weights = self.parent.project.dataMgr.Automatic_Segmentation.normalizePotential(weights)

            self.weights = weights
        
    def on_btnSegment_clicked(self):
        
        if self.weights is not None:
            self.parent.project.dataMgr.Automatic_Segmentation.computeResults(self.weights)
            self.parent.project.dataMgr.Automatic_Segmentation.finalizeResults()
            
            self.parent.labelWidget.repaint()
        
    def on_btnSegmentorsOptions_clicked(self):
        pass
class ClassificationTab(IlastikTabBase, QtGui.QWidget):
    name = 'Classification'
    position = 1
    moduleName = "Classification"
    
    def __init__(self, parent=None):
        IlastikTabBase.__init__(self, parent)
        QtGui.QWidget.__init__(self, parent)
        
        self._initContent()
        self._initConnects()
        
    def on_activation(self):
        if self.ilastik.project is None:
            return
        if self.ilastik._activeImage.module[self.name] is None:
            self.ilastik._activeImage.module[self.name] = PropertyMgr(self.ilastik._activeImage)
        
        ovs = self.ilastik._activeImage.module[self.name].getOverlayRefs()
        
        raw = self.ilastik._activeImage.overlayMgr["Raw Data"]
                        
        self.ilastik.labelWidget._history.volumeEditor = self.ilastik.labelWidget
        
        overlayWidget = OverlayWidget(self.ilastik.labelWidget, self.ilastik.project.dataMgr)
        self.ilastik.labelWidget.setOverlayWidget(overlayWidget)
        
        
        ov = self.ilastik._activeImage.overlayMgr["Classification/Labels"]
        
        overlayWidget.addOverlayRef(ov.getRef())
        overlayWidget.addOverlayRef(raw.getRef())
                
        self.ilastik.labelWidget.setLabelWidget(LabelListWidget(self.ilastik.project.dataMgr.module["Classification"].labelMgr,  self.ilastik.project.dataMgr.module["Classification"]["labelDescriptions"],  self.ilastik.labelWidget,  ov))
    
    def on_deActivation(self):
        if self.ilastik.project is None:
            return
        if hasattr(self.parent, "classificationInteractive"):
            self.btnStartLive.click()
        if self.ilastik.labelWidget is not None and self.ilastik.labelWidget._history != self.ilastik._activeImage.module["Classification"]["labelHistory"]:
            self.ilastik._activeImage.module["Classification"]["labelHistory"] = self.ilastik.labelWidget._history
        
    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)
     
        self.btnSelectFeatures    = TabButton('Select Features', ilastikIcons.Select)
        self.btnStartLive         = TabButton('Start Live Prediction', ilastikIcons.Play)
        self.btnStartLive.setCheckable(True)
        self.btnTrainPredict      = TabButton('Train and Predict', ilastikIcons.System)
        self.btnExportClassifier  = TabButton('Export Classifier', ilastikIcons.Select)
        self.btnClassifierOptions = TabButton('Classifier Options', ilastikIcons.Select)
        
        self.btnSelectFeatures.setToolTip('Select and compute features')
        self.btnStartLive.setToolTip('Toggle interactive prediction of the current image while labeling')
        self.btnTrainPredict.setToolTip('Train and predict all images offline; this step is necessary for automation')
        self.btnExportClassifier.setToolTip('Save current classifier and its feature settings')
        self.btnClassifierOptions.setToolTip('Select a classifier and change its settings')
        
        self.on_otherProject()
        
        tl.addWidget(self.btnSelectFeatures)
        tl.addWidget(self.btnStartLive)
        tl.addWidget(self.btnTrainPredict)
        tl.addStretch()
        tl.addWidget(self.btnExportClassifier)
        tl.addWidget(self.btnClassifierOptions)
        
        self.setLayout(tl)
        
        
    def _initConnects(self):
        self.connect(self.btnSelectFeatures, QtCore.SIGNAL('clicked()'), self.on_btnSelectFeatures_clicked)
        self.connect(self.btnStartLive, QtCore.SIGNAL('toggled(bool)'), self.on_btnStartLive_clicked)
        self.connect(self.btnTrainPredict, QtCore.SIGNAL('clicked()'), self.on_btnTrainPredict_clicked)
        self.connect(self.btnExportClassifier, QtCore.SIGNAL('clicked()'), self.on_btnExportClassifier_clicked)
        self.connect(self.btnClassifierOptions, QtCore.SIGNAL('clicked()'), self.on_btnClassifierOptions_clicked)
        
    def on_otherProject(self):
        self.btnSelectFeatures.setEnabled(True)
        self.btnStartLive.setEnabled(False)
        self.btnTrainPredict.setEnabled(False)
        self.btnExportClassifier.setEnabled(False)
        self.btnClassifierOptions.setEnabled(True)
        
    def on_btnSelectFeatures_clicked(self):
        preview = self.parent.project.dataMgr[0]._dataVol._data[0,0,:,:,0:3]
        newFeatureDlg = FeatureDlg(self.ilastik, preview)
        answer = newFeatureDlg.exec_()
        if answer == QtGui.QDialog.Accepted:
            self.featureComputation = FeatureComputation(self.ilastik)
        newFeatureDlg.close()
        newFeatureDlg.deleteLater()
        del newFeatureDlg
        gc.collect()
                    
    def on_btnStartLive_clicked(self, state):
        if state:
            self.ilastik.ribbon.getTab('Classification').btnStartLive.setText('Stop Live Prediction')
            self.classificationInteractive = ClassificationInteractive(self.ilastik)
        else:
            self.classificationInteractive.stop()
            self.ilastik.ribbon.getTab('Classification').btnStartLive.setText('Start Live Prediction')
        
    def on_btnTrainPredict_clicked(self):
        self.classificationTrain = ClassificationTrain(self.ilastik)
        self.connect(self.classificationTrain, QtCore.SIGNAL("trainingFinished()"), self.on_trainingFinished)
        
    def on_trainingFinished(self):
        print "Training finished"
        self.classificationPredict = ClassificationPredict(self.ilastik)
        
    def on_btnExportClassifier_clicked(self):
        fileName = QtGui.QFileDialog.getSaveFileName(self, "Export Classifier", filter =  "HDF5 Files (*.h5)")
        
        try:
            self.ilastik.project.dataMgr.Classification.exportClassifiers(fileName)
        except (RuntimeError, AttributeError, IOError) as e:
            QtGui.QMessageBox.warning(self, 'Error', str(e), QtGui.QMessageBox.Ok)
            return

        try:
            self.ilastik.project.dataMgr.Classification.featureMgr.exportFeatureItems(fileName)
        except RuntimeError as e:
            QtGui.QMessageBox.warning(self, 'Error', str(e), QtGui.QMessageBox.Ok)
            return
        
        QtGui.QMessageBox.information(self, 'Success', "The classifier and the feature information have been saved successfully to:\n %s" % str(fileName), QtGui.QMessageBox.Ok)
        
        
    def on_btnClassifierOptions_clicked(self):
        dialog = ClassifierSelectionDlg(self.parent)
        self.parent.project.dataMgr.module["Classification"].classifier = dialog.exec_()
Ejemplo n.º 28
0
class UnsupervisedTab(IlastikTabBase, QtGui.QWidget):
    name = 'Unsupervised Decomposition'
    position = 2
    moduleName = "Unsupervised_Decomposition"
    
    def __init__(self, parent=None):
        IlastikTabBase.__init__(self, parent)
        QtGui.QWidget.__init__(self, parent)
        
        self._initContent()
        self._initConnects()
        
        self.overlays = None

    def on_activation(self):
        if self.ilastik.project is None:
            return
        ovs = self.ilastik._activeImage.module[self.__class__.moduleName].getOverlayRefs()
        if len(ovs) == 0:
            raw = self.ilastik._activeImage.overlayMgr["Raw Data"]
            if raw is not None:
                ovs.append(raw.getRef())
                        
        self.ilastik.labelWidget._history.volumeEditor = self.ilastik.labelWidget

        overlayWidget = OverlayWidget(self.ilastik.labelWidget, self.ilastik.project.dataMgr)
        self.ilastik.labelWidget.setOverlayWidget(overlayWidget)

        self.ilastik.labelWidget.setLabelWidget(ve.DummyLabelWidget())
        
        self.btnUnsupervisedOptions.setEnabled(True)     
                
    def on_deActivation(self):
        self.btnDecompose.setEnabled(False)  
            
    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)
        
        self.btnChooseOverlays      = TabButton('Select Overlay', ilastikIcons.Select)
        self.btnDecompose           = TabButton('decompose', ilastikIcons.Play)
        self.btnUnsupervisedOptions = TabButton('Unsupervised Decomposition Options', ilastikIcons.System)

        self.btnDecompose.setEnabled(False)     
        self.btnUnsupervisedOptions.setEnabled(False)     
        
        self.btnChooseOverlays.setToolTip('Choose the overlays for unsupervised decomposition')
        self.btnDecompose.setToolTip('perform unsupervised decomposition')
        self.btnUnsupervisedOptions.setToolTip('select an unsupervised decomposition plugin and change settings')
        
        tl.addWidget(self.btnChooseOverlays)
        tl.addWidget(self.btnDecompose)
        tl.addStretch()
        tl.addWidget(self.btnUnsupervisedOptions)
        
        self.setLayout(tl)
        
    def _initConnects(self):
        self.connect(self.btnChooseOverlays, QtCore.SIGNAL('clicked()'), self.on_btnChooseOverlays_clicked)
        self.connect(self.btnDecompose, QtCore.SIGNAL('clicked()'), self.on_btnDecompose_clicked)
        self.connect(self.btnUnsupervisedOptions, QtCore.SIGNAL('clicked()'), self.on_btnUnsupervisedOptions_clicked)
        
    def on_btnChooseOverlays_clicked(self):
        dlg = OverlaySelectionDialog(self.parent,  singleSelection = False)
        overlays = dlg.exec_()
        
        if len(overlays) > 0:
            self.overlays = overlays
            # add all overlays
            for overlay in overlays:
                ref = overlay.getRef()
                ref.setAlpha(0.4)
                self.parent.labelWidget.overlayWidget.addOverlayRef(ref)
                
            self.parent.labelWidget.repaint()
            self.btnDecompose.setEnabled(True)
        else:
            self.btnDecompose.setEnabled(False)         
        
    def on_btnDecompose_clicked(self):
        self.unsDec = UnsupervisedDecomposition(self.ilastik)
        self.unsDec.start(self.overlays)

    def on_btnUnsupervisedOptions_clicked(self):
        dialog = UnsupervisedSelectionDlg(self.parent)
        answer = dialog.exec_()
        if answer != None:
            self.parent.project.dataMgr.module["Unsupervised_Decomposition"].unsupervisedMethod = answer  
class InteractiveSegmentationTab(IlastikTabBase, QtGui.QWidget):
    name = 'Interactive Segmentation'
    position = 3
    moduleName = "Interactive_Segmentation"
    
    def __init__(self, parent=None):
        IlastikTabBase.__init__(self, parent)
        QtGui.QWidget.__init__(self, parent)
        
        self.outputPath = os.path.expanduser("~/test-segmentation/")
        self.mapping = dict()
        self.doneBinaryOverlay  = None
        self.doneObjectsOverlay = None
    
    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_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 on_numColorsNeeded(self, numColors):
        """make sure that there are enough label colors.
           numColors refers to the _total_ number of colors,
           including the background. Note that the background label color
           is always present."""
        
        if self.seedWidget.count() >= numColors: return
        
        for i in range(numColors-self.seedWidget.count()):
            self.seedWidget.createLabel()
    
    def on_deActivation(self):
        if self.ilastik.project is None:
            return
        self.interactionLog = self.ilastik.labelWidget.interactionLog
        self.ilastik.labelWidget.interactionLog = None
        if self.ilastik.labelWidget._history != self.ilastik._activeImage.Interactive_Segmentation.seedLabelsVolume._history:
            self.ilastik._activeImage.Interactive_Segmentation.seedLabelsVolume._history = self.ilastik.labelWidget._history
        
        if self.ilastik._activeImage.Interactive_Segmentation.seedLabelsVolume._history is not None:
            self.ilastik.labelWidget._history = self.ilastik._activeImage.Interactive_Segmentation.seedLabelsVolume._history
        
    def _initContent(self):
        tl = QtGui.QHBoxLayout()
        tl.setMargin(0)
        
        self.btnChooseWeights     = TabButton('Choose Weights', ilastikIcons.Select)
        self.btnChooseDimensions  = TabButton('Using 3D', ilastikIcons.Select)
        self.btnSegment           = TabButton('Segment', ilastikIcons.Play)
        self.btnSaveAs            = TabButton('Save As', ilastikIcons.SaveAs)
        self.btnSave              = TabButton('Save', ilastikIcons.Save)
        self.btnSegmentorsOptions = TabButton('Change Segmentor', ilastikIcons.System)
        
        self.inlineSettings = InlineSettingsWidget(self)
        
        self.only2D = False
        
        self.btnChooseWeights.setToolTip('Choose the edge weights for the segmentation task')
        self.btnSegment.setToolTip('Segment the image into foreground/background')
        self.btnChooseDimensions.setToolTip('Switch between slice based 2D segmentation and full 3D segmentation\n This is mainly useful for 3D Date with very weak border indicators, where seeds placed in one slice can bleed out badly to other regions')
        self.btnSegmentorsOptions.setToolTip('Select a segmentation plugin and change settings')
        
        
        tl.addWidget(self.btnChooseWeights)
        
        #tl.addWidget(self.btnChooseDimensions)
        tl.addWidget(self.btnSegment)        
        tl.addWidget(self.inlineSettings)
        tl.addWidget(self.btnSave)
        tl.addWidget(self.btnSaveAs)
        tl.addStretch()
        tl.addWidget(self.btnSegmentorsOptions)
        
        self.btnSegment.setEnabled(False)
        self.btnSaveAs.setEnabled(False)
        self.btnSave.setEnabled(False)
        self.btnChooseDimensions.setEnabled(False)
        self.btnSegmentorsOptions.setEnabled(False)
        
        self.setLayout(tl)
        
    def _initConnects(self):
        s = self.ilastik._activeImage.Interactive_Segmentation
        
        self.connect(self.btnChooseWeights, QtCore.SIGNAL('clicked()'), self.on_btnChooseWeights_clicked)
        self.connect(self.btnSegment, QtCore.SIGNAL('clicked()'), s.segment)
        self.connect(self.btnSaveAs, QtCore.SIGNAL('clicked()'), self.on_btnSaveAs_clicked)
        self.connect(self.btnSave, QtCore.SIGNAL('clicked()'), self.on_btnSave_clicked)
        self.connect(self.btnChooseDimensions, QtCore.SIGNAL('clicked()'), self.on_btnDimensions)
        self.connect(self.btnSegmentorsOptions, QtCore.SIGNAL('clicked()'), self.on_btnSegmentorsOptions_clicked)
        self.shortcutSegment = QtGui.QShortcut(QtGui.QKeySequence("s"), self, s.segment, s.segment)
        #shortcutManager.register(self.shortcutNextLabel, "Labeling", "Go to next label (cyclic, forward)")
        
    
    def on_btnDimensions(self):
        self.only2D = not self.only2D
        if self.only2D:
            ov = self.parent.project.dataMgr[self.parent._activeImageNumber].overlayMgr["Segmentation/Segmentation"]
            if ov is not None:
                zerod = numpy.zeros(ov._data.shape, numpy.uint8)
                ov._data = DataAccessor(zerod)
            self.btnChooseDimensions.setText('Using 2D')
                        
        else:
            self.btnChooseDimensions.setText('Using 3D')
        self.setupWeights()
        
    
    def on_btnChooseWeights_clicked(self):
        #First question: Which overlay?
        dlg = OverlaySelectionDialog(self.ilastik,  singleSelection = True)
        answer = dlg.exec_()
        if len(answer) == 0: return #dialog was dismissed
        
        s = self.ilastik._activeImage.Interactive_Segmentation
        
        overlay = answer[0]
        self.parent.labelWidget.overlayWidget.addOverlayRef(overlay.getRef())
        volume = overlay._data[0,:,:,:,0]
        
        #Second question: Which border indicator?            
        borderIndicator = QtGui.QInputDialog.getItem(self.ilastik, \
                          "Select Border Indicator",  "Indicator",  \
                          ["Brightness",  "Darkness", "Gradient Magnitude"], \
                          editable = False)
        if not borderIndicator[1]: return #Dialog was dismissed
        
        borderIndicator = str(borderIndicator[0])
        
        #Write the choice of weights to a file so that they can be reproduced
        if s.outputPath:
            f = open(s.outputPath+'/'+'config.txt', 'w')
            f.write("overlay=%s\n" % (dlg.selectedOverlayPaths[0]))
            f.write("borderIndicator=%s" % (borderIndicator))
            f.close()
        
        #calculate the weights
        #this will call on_setupWeights via a signal/slot connection
        s.calculateWeights(volume, borderIndicator)
        
    def on_setupWeights(self, weights = None):
        self.ilastik.labelWidget.interactionLog = []
        self.btnSegmentorsOptions.setEnabled(True)
        
    def clearSeeds(self):
        self._seedL = None
        self._seedIndices = None


    def mouseReleaseEvent(self, event):
        """
        mouse button release event
        """
        button = event.button()
        # select an item on which we clicked

    def on_btnSave_clicked(self):
        s = self.ilastik._activeImage.Interactive_Segmentation
        s.saveCurrentSegment()

    def on_btnSaveAs_clicked(self):
        (segmentKey, accepted) = QtGui.QInputDialog.getText(self, "Finish object", "Enter object name:")
        segmentKey = str(segmentKey) #convert to native python string
        if not accepted: return #dialog was canceled
        
        s = self.ilastik._activeImage.Interactive_Segmentation
        
        #make sure the name is unique
        if s.hasSegmentsKey(segmentKey):
            msg = QtGui.QMessageBox.critical(self, "Finish object", \
            "An object with name '%s' already exists. Please choose a different name" % (segmentKey))
            return
        
        s.saveCurrentSegmentsAs(segmentKey)
        
        path = s.outputPath+'/'+str(segmentKey)
        f = open(path + "/interactions.log", "w")
        for l in self.ilastik.labelWidget.interactionLog:
            f.write(l + "\n")
        f.close()
        self.ilastik.labelWidget.interactionLog = []
        
        f = h5py.File(path + "/history.h5", 'w')                        
        self.ilastik.labelWidget._history.serialize(f)
        f.close()

        self.ilastik.labelWidget.repaint()
    
    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 on_newSegmentation(self):
        if hasattr(self.ilastik.project.dataMgr.Interactive_Segmentation.segmentor, "bias"):
            bias = self.ilastik.project.dataMgr.Interactive_Segmentation.segmentor.bias            
            s = "%f: segment(bias) %f" % (time.clock(),bias)
            self.ilastik.labelWidget.interactionLog.append(s)
   
        self.on_overlaysChanged()    
        
    def on_btnSegmentorsOptions_clicked(self):
        dialog = SegmentorSelectionDlg(self.parent)
        answer = dialog.exec_()
        if answer != None:
            self.parent.project.dataMgr.Interactive_Segmentation.segmentor = answer
            self.setupWeights(self.parent.project.dataMgr[self.parent._activeImageNumber].Interactive_Segmentation._segmentationWeights)
            
            ui = self.parent.project.dataMgr.Interactive_Segmentation.segmentor.getInlineSettingsWidget(self.inlineSettings.childWidget)

            self.inlineSettings.changeWidget(ui)
            self.defaultSegmentor = False
        elif self.defaultSegmentor is True:
            ui = self.parent.project.dataMgr.Interactive_Segmentation.segmentor.getInlineSettingsWidget(self.inlineSettings.childWidget)
            self.inlineSettings.changeWidget(ui)
            self.defaultSegmentor = False