def finalizeResults(self): activeItem = self.dataMgr[self.dataMgr._activeImageNumber] activeItem._dataVol.unsupervised = self.decompThread.result #create overlays for unsupervised decomposition: if self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr["Unsupervised/" + self.dataMgr.module["Unsupervised_Decomposition"].unsupervisedMethod.shortname] is None: data = self.decompThread.result[:,:,:,:,:] myColor = OverlayItem.qrgb(0, 0, 0) for o in range(0, data.shape[4]): data2 = OverlayItem.normalizeForDisplay(data[:,:,:,:,o:(o+1)]) # for some strange reason we have to invert the data before displaying it ov = OverlayItem(255 - data2, color = myColor, alpha = 1.0, colorTable = None, autoAdd = True, autoVisible = True) self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr["Unsupervised/" + self.dataMgr.module["Unsupervised_Decomposition"].unsupervisedMethod.shortname + " component %d" % (o+1)] = ov # remove outdated overlays (like PCA components 5-10 if a decomposition with 4 components is done) numOverlaysBefore = len(self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr.keys()) finished = False while finished != True: o = o + 1 # assumes consecutive numbering key = "Unsupervised/" + self.dataMgr.module["Unsupervised_Decomposition"].unsupervisedMethod.shortname + " component %d" % (o+1) self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr.remove(key) numOverlaysAfter = len(self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr.keys()) if(numOverlaysBefore == numOverlaysAfter): finished = True else: numOverlaysBefore = numOverlaysAfter else: self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr["Unsupervised/" + self.dataMgr.module["Unsupervised_Decomposition"].unsupervisedMethod.shortname]._data = DataAccessor(self.decompThread.result)
def finalizeResults(self): #create Overlay for connected components: if self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr["Connected Components/CC Results"] is None: colortab = OverlayItem.createDefault16ColorColorTable() myColor = OverlayItem.qrgb(255, 0, 0) ov = OverlayItem(self.ccThread.result, color = myColor, alpha = 1.0, colorTable = colortab, autoAdd = True, autoVisible = True) self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr["Connected Components/CC Results"] = ov else: self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr["Connected Components/CC Results"]._data = DataAccessor(self.ccThread.result)
def filterSynapses(self, inputOverlay, label, minsize, maxsize): #This is a special function to filter synapses. It assumes that the input overlay #is a threhsold overlay and computes it for equal probabilities, and then dilates the #the current connected components to the size of their counterparts in the equal #probability connected components. The resulting objects are filtered to be between minsize #and maxsize pixels in volume. #FIXME: This function is very specific and is only put here until ilastik 0.6 allows #to make it into a special workflow. Remove as soon as possible! parts = label.split(" ") labelnum = int(parts[0]) #labelname = parts[1] thres = self.dataMgr[self.dataMgr._activeImageNumber].Connected_Components.inputData cc = self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr["Connected Components/CC Results"] if thres is None: print "no threshold overlay" return if not isinstance(thres._data, MultivariateThresholdAccessor): print "no threshold overlay used for connected components" return if cc is None: print "No connected components overlay" return sfad = SynapseFilterAndSegmentor(self.dataMgr, labelnum, minsize, maxsize, cc, inputOverlay) objs_user = sfad.computeUserThreshObjects() objs_ref = sfad.computeReferenceObjects() #goodsizes = [s for s in goodsizes if s>100] #mingoodsize = min(goodsizes) #maxgoodsize = max(goodsizes) objs_final = sfad.filterObjects(objs_user, objs_ref) #create a new, filtered overlay: result = numpy.zeros(cc.shape, dtype = 'int32') objcounter = 1 for iobj in objs_final: for i in range(len(iobj[0])): result[0, iobj[0][i], iobj[1][i], iobj[2][i], 0] = int(objcounter) objcounter = objcounter +1 if self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr["Connected Components/CC Filtered"] is None: #colortab = [QtGui.qRgb(i, i, i) for i in range(256)] colortab = OverlayItem.createDefault16ColorColorTable() myColor = OverlayItem.qrgb(255, 0, 0) #QtGui.QColor(255, 0, 0) ov = OverlayItem(result, color = myColor, alpha = 1.0, colorTable = colortab, autoAdd = True, autoVisible = True) self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr["Connected Components/CC Filtered"] = ov else: self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr["Connected Components/CC Filtered"]._data = DataAccessor(result)
def finalizeResults(self): #create Overlay for connected components: if self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr[ "Connected Components/CC Results"] is None: colortab = OverlayItem.createDefault16ColorColorTable() myColor = OverlayItem.qrgb(255, 0, 0) ov = OverlayItem(self.ccThread.result, color=myColor, alpha=1.0, colorTable=colortab, autoAdd=True, autoVisible=True) self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr[ "Connected Components/CC Results"] = ov else: self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr[ "Connected Components/CC Results"]._data = DataAccessor( self.ccThread.result)
def filterSynapses(self, inputOverlay, label, minsize, maxsize): #This is a special function to filter synapses. It assumes that the input overlay #is a threhsold overlay and computes it for equal probabilities, and then dilates the #the current connected components to the size of their counterparts in the equal #probability connected components. The resulting objects are filtered to be between minsize #and maxsize pixels in volume. #FIXME: This function is very specific and is only put here until ilastik 0.6 allows #to make it into a special workflow. Remove as soon as possible! parts = label.split(" ") labelnum = int(parts[0]) #labelname = parts[1] thres = self.dataMgr[ self.dataMgr._activeImageNumber].Connected_Components.inputData cc = self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr[ "Connected Components/CC Results"] if thres is None: print "no threshold overlay" return if not isinstance(thres._data, MultivariateThresholdAccessor): print "no threshold overlay used for connected components" return if cc is None: print "No connected components overlay" return sfad = SynapseFilterAndSegmentor(self.dataMgr, labelnum, minsize, maxsize, cc, inputOverlay) objs_user = sfad.computeUserThreshObjects() objs_ref = sfad.computeReferenceObjects() #goodsizes = [s for s in goodsizes if s>100] #mingoodsize = min(goodsizes) #maxgoodsize = max(goodsizes) objs_final = sfad.filterObjects(objs_user, objs_ref) #create a new, filtered overlay: result = numpy.zeros(cc.shape, dtype='int32') objcounter = 1 for iobj in objs_final: for i in range(len(iobj[0])): result[0, iobj[0][i], iobj[1][i], iobj[2][i], 0] = int(objcounter) objcounter = objcounter + 1 if self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr[ "Connected Components/CC Filtered"] is None: #colortab = [QtGui.qRgb(i, i, i) for i in range(256)] colortab = OverlayItem.createDefault16ColorColorTable() myColor = OverlayItem.qrgb(255, 0, 0) #QtGui.QColor(255, 0, 0) ov = OverlayItem(result, color=myColor, alpha=1.0, colorTable=colortab, autoAdd=True, autoVisible=True) self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr[ "Connected Components/CC Filtered"] = ov else: self.dataMgr[self.dataMgr._activeImageNumber].overlayMgr[ "Connected Components/CC Filtered"]._data = DataAccessor( result)