def setImageMasked(self, image, mask=None, lo=None, hi=None): """Set the image to be iterated over. This should be an RGB image, ndim==3, dtype=='B'. This picks a subset of the segmentation to iterate over, using a mask and lo and hi values. """ # print("$$ setImageMasked: image=%s mask=%s lo=%s hi=%s" % ( # desc(image), hexs(mask), hexs(lo), hexs(hi))) assert image.dtype == dtype('B') or image.dtype == dtype( 'i'), "image must be type B or i" if image.ndim == 3: image = rgb2int(image) imageDescribe("image", image) assert image.ndim == 2, "wrong number of dimensions" self.image = image labels = image if lo is not None: labels[labels < lo] = 0 if hi is not None: labels[labels > hi] = 0 if mask is not None: labels = bitwise_and(labels, mask) imageDescribe("labels", labels) labels, correspondence = morph.renumber_labels_ordered( labels, correspondence=1) self.labels = labels self.correspondence = correspondence self.objects = [None] + morph.find_objects(labels) # print("$$ setImageMasked: objects=%d" % len(self.objects)) sizes = [o for o in self.objects] sizes.sort(key=lambda u: -sliceSize(u)) for i, o in enumerate(sizes[:20]): print("%5d: %s %s %d" % (i, o, sliceDims(o), sliceSize(o)))
def setImageMasked(self,image,mask=None,lo=None,hi=None): """Set the image to be iterated over. This should be an RGB image, ndim==3, dtype=='B'. This picks a subset of the segmentation to iterate over, using a mask and lo and hi values..""" assert image.dtype==dtype('B') or image.dtype==dtype('i'),"image must be type B or i" if image.ndim==3: image = rgb2int(image) assert image.ndim==2,"wrong number of dimensions" self.image = image labels = image if lo is not None: labels[labels<lo] = 0 if hi is not None: labels[labels>hi] = 0 if mask is not None: labels = bitwise_and(labels,mask) labels,correspondence = morph.renumber_labels_ordered(labels,correspondence=1) self.labels = labels self.correspondence = correspondence self.objects = [None]+morph.find_objects(labels)