def execute(self, slot, subindex, roi, result): assert slot == self.MST, "Invalid output slot: {}".format(slot.name) #first thing, show the user that we are waiting for computations to finish self.applet.progressSignal.emit(0) volume_feat = self.Image(*roiFromShape(self.Image.meta.shape)).wait() labelVolume = self.LabelImage( *roiFromShape(self.LabelImage.meta.shape)).wait() self.applet.progress = 0 def updateProgressBar(x): #send signal iff progress is significant if x - self.applet.progress > 1 or x == 100: self.applet.progressSignal.emit(x) self.applet.progress = x mst = MSTSegmentor(labelVolume[0, ..., 0], numpy.asarray(volume_feat[0, ..., 0], numpy.float32), edgeWeightFunctor="minimum", progressCallback=updateProgressBar) #mst.raw is not set here in order to avoid redundant data storage mst.raw = None #Output is of shape 1 result[0] = mst return result
def preprocess(inputf, outputf, sigma=1.6): print "preprocessing file %s to outputfile %s" % (inputf, outputf) h5f = h5py.File(inputf, "r") volume = h5f["raw"][:35, :35, :35] print "input volume shape: ", volume.shape print "input volume size: ", volume.nbytes / 1024**2, "MB" fvol = volume.astype(numpy.float32) #volume_feat = vigra.filters.gaussianGradientMagnitude(fvol,sigma) volume_feat = vigra.filters.hessianOfGaussianEigenvalues(fvol, sigma)[:, :, :, 0] volume_ma = numpy.max(volume_feat) volume_mi = numpy.min(volume_feat) volume_feat = (volume_feat - volume_mi) * 255.0 / (volume_ma - volume_mi) print "Watershed..." labelVolume = vigra.analysis.watersheds(volume_feat)[0].astype(numpy.int32) print labelVolume print labelVolume.shape, labelVolume.dtype mst = MSTSegmentor(labelVolume, volume_feat.astype(numpy.float32), edgeWeightFunctor="minimum") mst.raw = volume mst.saveH5("C:/Users/Ben/Desktop/carvingData/unprecarv_part35.h5", "graph")
outputf = sys.argv[2] else: outputf = "test.graph5" print "preprocessing file %s to outputfile %s" % (inputf, outputf) sigma = 1.6 h5f = h5py.File(inputf,"r") #volume = h5f["volume/data"][0,:,:,:,0] volume = h5f["sbfsem"][:,:450,:450] print "input volume shape: ", volume.shape print "input volume size: ", volume.nbytes / 1024**2, "MB" fvol = volume.astype(numpy.float32) volume_feat = vigra.filters.hessianOfGaussianEigenvalues(fvol,sigma)[:,:,:,0] volume_ma = numpy.max(volume_feat) volume_mi = numpy.min(volume_feat) volume_feat = (volume_feat - volume_mi) * 255.0 / (volume_ma-volume_mi) print "Watershed..." labelVolume = vigra.analysis.watersheds(volume_feat)[0].astype(numpy.int32) print labelVolume.shape, labelVolume.dtype mst = MSTSegmentor(labelVolume, volume_feat.astype(numpy.float32), edgeWeightFunctor = "minimum") mst.raw = volume mst.saveH5(outputf,"graph")