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