Пример #1
0
 def assign_gt_to_ws(self, gt):
     ws_nopad = morpho.juicy_center(self.watershed, self.pad_thickness)
     bdrymap = morpho.pad(morpho.seg_to_bdry(ws_nopad), 
                                                 [0]*self.pad_thickness)
     gt_bdrymap_nopad = morpho.seg_to_bdry(gt)
     gt_bdrymap = morpho.pad(gt_bdrymap_nopad, [0]*self.pad_thickness)
     k = distance_transform_cdt(1-bdrymap, return_indices=True)
     ind = nonzero(gt_bdrymap.ravel())[0]
     closest_sub = numpy.concatenate(
                             [i.ravel()[:,newaxis] for i in k[1]],axis=1)
     closest_sub = closest_sub[ind,:]
     closest_ind = [dot(bdrymap.strides, i)/bdrymap.itemsize 
                                                     for i in closest_sub]
     M = zeros_like(bdrymap).astype(float)
     M.ravel()[closest_ind]=1.0
     bdrymap.ravel()[closest_ind] = False
     k = distance_transform_cdt(1-bdrymap, return_indices=True)
     ind = nonzero(gt_bdrymap.ravel())[0]
     closest_sub = numpy.concatenate(
                             [i.ravel()[:,newaxis] for i in k[1]],axis=1)
     closest_sub = closest_sub[ind,:]
     closest_ind = [dot(bdrymap.strides, i)/bdrymap.itemsize 
                                                     for i in closest_sub]
     M.ravel()[closest_ind]=1.0 
     return M 
Пример #2
0
 def assign_gt_to_ws(self, gt):
     ws_nopad = morpho.juicy_center(self.watershed, self.pad_thickness)
     bdrymap = morpho.pad(morpho.seg_to_bdry(ws_nopad),
                          [0] * self.pad_thickness)
     gt_bdrymap_nopad = morpho.seg_to_bdry(gt)
     gt_bdrymap = morpho.pad(gt_bdrymap_nopad, [0] * self.pad_thickness)
     k = distance_transform_cdt(1 - bdrymap, return_indices=True)
     ind = nonzero(gt_bdrymap.ravel())[0]
     closest_sub = numpy.concatenate([i.ravel()[:, newaxis] for i in k[1]],
                                     axis=1)
     closest_sub = closest_sub[ind, :]
     closest_ind = [
         dot(bdrymap.strides, i) / bdrymap.itemsize for i in closest_sub
     ]
     M = zeros_like(bdrymap).astype(float)
     M.ravel()[closest_ind] = 1.0
     bdrymap.ravel()[closest_ind] = False
     k = distance_transform_cdt(1 - bdrymap, return_indices=True)
     ind = nonzero(gt_bdrymap.ravel())[0]
     closest_sub = numpy.concatenate([i.ravel()[:, newaxis] for i in k[1]],
                                     axis=1)
     closest_sub = closest_sub[ind, :]
     closest_ind = [
         dot(bdrymap.strides, i) / bdrymap.itemsize for i in closest_sub
     ]
     M.ravel()[closest_ind] = 1.0
     return M
Пример #3
0
def show_merge_3D(g, n1, n2, **kwargs):
    im = kwargs.get('image', None)
    alpha = kwargs.get('alpha', 0.5)
    fignum = kwargs.get('fignum', 10)
    bdr = np.zeros(g.segmentation.shape, np.uint8)
    bdri = list(g[n1][n2]['boundary'])
    bdr.ravel()[bdri] = 3
    bdr.ravel()[list(g.node[n1]['extent'])] = 1
    bdr.ravel()[list(g.node[n2]['extent'])] = 2
    bdr = morpho.juicy_center(bdr, g.pad_thickness)
    x, y, z = np.array(center_of_mass(bdr == 3)).round().astype(np.uint32)
    fig = plt.figure(fignum)
    bdr_cmapped = jet_transparent(bdr, alpha)
    plt.subplot(221)
    imshow_grey(im[:, :, z])     \
                         plt.imshow(bdr_cmapped[:,:,z], interpolation='nearest')
    plt.subplot(222)
    imshow_grey(im[:, y, :])     \
                         plt.imshow(bdr_cmapped[:,y,:], interpolation='nearest')
    plt.subplot(223)
    imshow_grey(im[x, :, :])     \
                         plt.imshow(bdr_cmapped[x,:,:], interpolation='nearest')
    plt.subplot(224)
    _ = plt.hist(g.probabilities_r[bdri][:, 0], bins=25)
    return bdr, (x, y, z)
Пример #4
0
 def build_volume(self, nbunch=None):
     """Return the segmentation (numpy.ndarray) induced by the graph."""
     v = zeros_like(self.watershed)
     vr = v.ravel()
     if nbunch is None:
         nbunch = self.nodes()
     for n in nbunch:
         vr[list(self.node[n]['extent'])] = n
     return morpho.juicy_center(v, self.pad_thickness)
Пример #5
0
 def build_volume(self, nbunch=None):
     """Return the segmentation (numpy.ndarray) induced by the graph."""
     v = zeros_like(self.watershed)
     vr = v.ravel()
     if nbunch is None:
         nbunch = self.nodes()
     for n in nbunch:
         vr[list(self.node[n]['extent'])] = n
     return morpho.juicy_center(v,self.pad_thickness)
Пример #6
0
def remove_merged_boundaries(ar):
    import morpho
    arp = morpho.pad(ar, [0,ar.max()+1])
    arpr = arp.ravel()
    zero_idxs = (arpr == 0).nonzero()[0]
    ns = arpr[morpho.get_neighbor_idxs(arp, zero_idxs)]
    ns_compl = ns.copy()
    ns_compl[ns==0] = ns.max()+1
    merged_boundaries = (ns.max(axis=1) == ns_compl.min(axis=1)).nonzero()[0]
    arpr[zero_idxs[merged_boundaries]] = ns.max(axis=1)[merged_boundaries]
    return morpho.juicy_center(arp, 2)
Пример #7
0
def remove_merged_boundaries(ar):
    import morpho
    arp = morpho.pad(ar, [0, ar.max() + 1])
    arpr = arp.ravel()
    zero_idxs = (arpr == 0).nonzero()[0]
    ns = arpr[morpho.get_neighbor_idxs(arp, zero_idxs)]
    ns_compl = ns.copy()
    ns_compl[ns == 0] = ns.max() + 1
    merged_boundaries = (ns.max(axis=1) == ns_compl.min(axis=1)).nonzero()[0]
    arpr[zero_idxs[merged_boundaries]] = ns.max(axis=1)[merged_boundaries]
    return morpho.juicy_center(arp, 2)
Пример #8
0
 def build_boundary_map(self, ebunch=None):
     if len(self.merge_queue) == 0:
         self.rebuild_merge_queue()
     m = zeros(self.watershed.shape, double)
     mr = m.ravel()
     if ebunch is None:
         ebunch = self.real_edges_iter()
     ebunch = sorted([(self[u][v]['weight'], u, v) for u, v in ebunch])
     for w, u, v in ebunch:
         b = list(self[u][v]['boundary'])
         mr[b] = w
     if hasattr(self, 'ignored_boundary'):
         m[self.ignored_boundary] = inf
     return morpho.juicy_center(m, self.pad_thickness)
Пример #9
0
 def build_boundary_map(self, ebunch=None):
     if len(self.merge_queue) == 0:
         self.rebuild_merge_queue()
     m = zeros(self.watershed.shape, double)
     mr = m.ravel()
     if ebunch is None:
         ebunch = self.real_edges_iter()
     ebunch = sorted([(self[u][v]['weight'], u, v) for u, v in ebunch])
     for w, u, v in ebunch:
         b = list(self[u][v]['boundary'])
         mr[b] = w
     if hasattr(self, 'ignored_boundary'):
         m[self.ignored_boundary] = inf
     return morpho.juicy_center(m, self.pad_thickness)
Пример #10
0
def show_merge_3D(g, n1, n2, **kwargs):
    im = kwargs.get('image', None)
    alpha = kwargs.get('alpha', 0.5)
    fignum = kwargs.get('fignum', 10)
    bdr = np.zeros(g.segmentation.shape, np.uint8)
    bdri = list(g[n1][n2]['boundary'])
    bdr.ravel()[bdri] = 3
    bdr.ravel()[list(g.node[n1]['extent'])] = 1
    bdr.ravel()[list(g.node[n2]['extent'])] = 2
    bdr = morpho.juicy_center(bdr, g.pad_thickness)
    x, y, z = np.array(center_of_mass(bdr==3)).round().astype(np.uint32)
    fig = plt.figure(fignum)
    bdr_cmapped = jet_transparent(bdr, alpha)
    plt.subplot(221); imshow_grey(im[:,:,z]); \
                     plt.imshow(bdr_cmapped[:,:,z], interpolation='nearest')
    plt.subplot(222); imshow_grey(im[:,y,:]); \
                     plt.imshow(bdr_cmapped[:,y,:], interpolation='nearest')
    plt.subplot(223); imshow_grey(im[x,:,:]); \
                     plt.imshow(bdr_cmapped[x,:,:], interpolation='nearest')
    plt.subplot(224); _ = plt.hist(g.probabilities_r[bdri][:,0], bins=25)
    return bdr, (x,y,z)
Пример #11
0
    thickness = args.thickness
    zcrop1 = [0, thickness]
    overlaps = [2**i + 1 for i in range(1, 8)]
    results_table = zeros([len(args.thresholds), len(range(1, 8))], dtype=bool)
    for j, overlap in enumerate(overlaps):
        zcrop2 = [thickness - overlap, 2 * thickness - overlap]
        # pdb.set_trace()
        probs1, ws1 = crop_probs_and_ws(args.xy_crop + zcrop1, probs, ws)
        probs2, ws2 = crop_probs_and_ws(args.xy_crop + zcrop2, probs, ws)
        g1 = Rag(ws1,
                 probs1,
                 show_progress=args.show_progress,
                 lowmem=args.low_memory)
        g2 = Rag(ws2,
                 probs2,
                 show_progress=args.show_progress,
                 lowmem=args.low_memory)
        for i, t in enumerate(args.thresholds):
            g1.agglomerate(t)
            g2.agglomerate(t)
            results_table[i, j] = (juicy_center(
                g1.segmentation,
                2)[..., -overlap / 2].astype(bool) == juicy_center(
                    g2.segmentation, 2)[..., overlap / 2].astype(bool)).all()
    savetxt('debug.txt', results_table, delimiter='\t')
    results_table = hstack([array(args.thresholds)[:, newaxis], results_table])
    results_table = \
        vstack([array([0]+overlaps), results_table, results_table.all(axis=0)])
    savetxt(args.fout, results_table, delimiter='\t', fmt='%i')
Пример #12
0
        probs = median_filter(probs, 3)
    elif args.gaussian_filter is not None:
        probs = gaussian_filter(probs, args.gaussian_filter)

    if args.watershed is None:
        args.watershed = watershed(probs, show_progress=args.show_progress)
    ws = args.watershed

    thickness = args.thickness
    zcrop1 = [0, thickness]
    overlaps = [2 ** i + 1 for i in range(1, 8)]
    results_table = zeros([len(args.thresholds), len(range(1, 8))], dtype=bool)
    for j, overlap in enumerate(overlaps):
        zcrop2 = [thickness - overlap, 2 * thickness - overlap]
        # pdb.set_trace()
        probs1, ws1 = crop_probs_and_ws(args.xy_crop + zcrop1, probs, ws)
        probs2, ws2 = crop_probs_and_ws(args.xy_crop + zcrop2, probs, ws)
        g1 = Rag(ws1, probs1, show_progress=args.show_progress, lowmem=args.low_memory)
        g2 = Rag(ws2, probs2, show_progress=args.show_progress, lowmem=args.low_memory)
        for i, t in enumerate(args.thresholds):
            g1.agglomerate(t)
            g2.agglomerate(t)
            results_table[i, j] = (
                juicy_center(g1.segmentation, 2)[..., -overlap / 2].astype(bool)
                == juicy_center(g2.segmentation, 2)[..., overlap / 2].astype(bool)
            ).all()
    savetxt("debug.txt", results_table, delimiter="\t")
    results_table = hstack([array(args.thresholds)[:, newaxis], results_table])
    results_table = vstack([array([0] + overlaps), results_table, results_table.all(axis=0)])
    savetxt(args.fout, results_table, delimiter="\t", fmt="%i")
Пример #13
0
 def get_ucm(self):
     if hasattr(self, 'ignored_boundary'):
         self.ucm[self.ignored_boundary] = self.max_merge_score
     return morpho.juicy_center(self.ucm, self.pad_thickness)
Пример #14
0
 def get_segmentation(self):
     return morpho.juicy_center(self.segmentation, self.pad_thickness)
Пример #15
0
 def get_ucm(self):
     if hasattr(self, 'ignored_boundary'):
         self.ucm[self.ignored_boundary] = self.max_merge_score
     return morpho.juicy_center(self.ucm, self.pad_thickness)    
Пример #16
0
 def get_segmentation(self):
     return morpho.juicy_center(self.segmentation, self.pad_thickness)