예제 #1
0
def plot_track_props(tracks, nx, ny, len_cutoff=20):
    pl.ioff()
    wdist = wraparound_dist(nx, ny)
    val_fig = pl.figure()
    area_fig = pl.figure()
    psn_fig = pl.figure()
    delta_vals = []
    delta_dists = []
    for tr in tracks:
        if len(tr) < len_cutoff:
            continue
        idxs, regs = zip(*tr)
        delta_vals.extend([abs(regs[idx].val - regs[idx + 1].val) for idx in range(len(regs) - 1)])
        dists = [wdist(regs[i].loc, regs[i + 1].loc) for i in range(len(regs) - 1)]
        delta_dists.extend([abs(dists[idx] - dists[idx + 1]) for idx in range(len(dists) - 1)])
        pl.figure(val_fig.number)
        pl.plot(idxs, [reg.val for reg in regs], "s-", hold=True)
        pl.figure(area_fig.number)
        pl.semilogy(idxs, [reg.area for reg in regs], "s-", hold=True)
        pl.figure(psn_fig.number)
        pl.plot(idxs[:-1], dists, "s-", hold=True)
    pl.figure(val_fig.number)
    pl.savefig("val_v_time.pdf")
    pl.figure(area_fig.number)
    pl.savefig("area_v_time.pdf")
    pl.figure(psn_fig.number)
    pl.savefig("psn_v_time.pdf")
    pl.figure()
    pl.hist(delta_vals, bins=pl.sqrt(len(delta_vals)))
    pl.savefig("delta_vals.pdf")
    pl.figure()
    pl.hist(delta_dists, bins=pl.sqrt(len(delta_dists)))
    pl.savefig("delta_dists.pdf")
    pl.close("all")
예제 #2
0
def track_regions_greedy(tslice_to_regions, nx, ny):
    tracks = []
    wdist = wraparound_dist(nx, ny)
    tracks = {}
    # initialize tracks with the 0th tslice
    t0, r0s = tslice_to_regions[0]
    for r0 in r0s:
        tracks[r0] = [(t0, r0)]
    for (t0,r0s), (t1,r1s) in zip(tslice_to_regions, tslice_to_regions[1:]):
        fitness_r0_r1 = []
        for r0 in r0s:
            row = [fitness(r0, r1, wdist(r0.loc, r1.loc)) for r1 in r1s]
            fitness_r0_r1.append(row)
        fitness_r0_r1 = np.array(fitness_r0_r1, dtype=np.double)
        r0_to_r1 = row_to_col_mins(fitness_r0_r1, r0s, r1s)
        r1_to_r0 = row_to_col_mins(fitness_r0_r1.T, r1s, r0s)
        for r0, r1 in r0_to_r1.items():
            if r0 not in tracks:
                import pdb; pdb.set_trace()
            r0_back = r1_to_r0[r1]
            if r0_back is r0:
                # forward <--> back mapping is consistent, add to tracks.
                try:
                    tr = tracks.pop(r0)
                except KeyError:
                    import pdb; pdb.set_trace()
                tr.append((t1, r1))
                tracks[r1] = tr
        for r1 in r1s:
            if r1 not in tracks:
                tracks[r1] = [(t1, r1)]
    return tracks.values()