def test_affv(self): affv = formats.aff2affv(self.aff_3d) affv2 = np.array([ [9, 9, 5, 9], [8, 6, 9, 9], [7, 6, 10, 10], [7, 7, 10, 10], ]) self.assertTrue( np.all(affv2 == affv) )
def oversegment_aff(aff_3d): # Thresholds from Zletaski 2009, p. 19 """ T_h = 0.98 T_l = 0.2 T_e = 0.1 T_s = 25 """ # Thresholds from Aleks's code. T_h = 0.99 T_l = 0.3 T_s = 25 if aff_3d.dtype == formats.WEIGHT_DTYPE_UINT: T_h = int(T_h * formats.WEIGHT_MAX_UINT) T_l = int(T_l * formats.WEIGHT_MAX_UINT) T_e = int(T_e * formats.WEIGHT_MAX_UINT) # Set each vertex's weight to the max of its adjacent edges affv_3d = formats.aff2affv(aff_3d) labels_3d = np.zeros(aff_3d.shape[:-1], dtype=formats.LABELS_DTYPE) n_labels = 0 sizes = {} # Watershed with edges >= T_h merged, and edges < T_l not considered n_labels = connected_components(aff_3d, affv_3d, T_h, labels_3d, n_labels, sizes) # We are allowed to apply watershed with some pixels already labeled # and without a quick-union structure because, due to the # connected_components algo, those labels always contain mins. n_labels = watershed(aff_3d, affv_3d, T_l, labels_3d, n_labels, sizes) # Create the region graph, and list their edges in decreasing order # Ignore unlabeled vertices, since they are "single-vertex segments" and # I think they'll be unlikely to reach size > T_s even after the next step. # region_graph = get_region_graph(aff_3d, labels_3d, n_labels) # For all edges with affinity >= T_e, merge if any segment has size < T_s. # n_labels = merge_segments(aff_3d, region_graph, labels_3d, n_labels, sizes, T_s) return labels_3d, n_labels
def oversegment_aff(aff_3d): # Set each vertex's weight to the max of its adjacent edges affv_3d = formats.aff2affv(aff_3d) labels_3d = np.zeros(aff_3d.shape[:-1], dtype=formats.LABELS_DTYPE) n_labels = 0 aff_dtype = aff_3d.dtype for t_cc, t_ws in ((.9,.8),):# (.8,.7), (.7,.6), (.6,.2)): if aff_dtype == formats.WEIGHT_DTYPE_UINT: t_cc = int(t_cc * formats.WEIGHT_MAX_UINT) t_ws = int(t_ws * formats.WEIGHT_MAX_UINT) n_labels = connected_components(aff_3d, affv_3d, t_cc, labels_3d, n_labels) # We are allowed to apply watershed with some pixels already labeled # and without a quick-union structure because, due to the # connected_components algo, those labels always contain mins. n_labels = watershed(aff_3d, affv_3d, t_ws, labels_3d, n_labels) return labels_3d, n_labels