Beispiel #1
0
def unif_resample(x, n, tol=1, deg=3):
    x = np.atleast_2d(x)
    x = mu.remove_duplicate_rows(x)
    dl = mu.norms(x[1:] - x[:-1], 1)
    l = np.cumsum(np.r_[0, dl])
    (tck, _) = si.splprep(x.T, k=deg, s=tol ** 2 * len(x), u=l)

    newu = np.linspace(0, l[-1], n)
    return np.array(si.splev(newu, tck)).T
def unif_resample(x, n, tol=0, deg=None):
    if deg is None: deg = min(3, len(x) - 1)

    x = np.atleast_2d(x)
    x = math_utils.remove_duplicate_rows(x)
    dl = math_utils.norms(x[1:] - x[:-1], 1)
    l = np.cumsum(np.r_[0, dl])

    (tck, _) = si.splprep(x.T, k=deg, s=tol**2 * len(x), u=l)

    newu = np.linspace(0, l[-1], n)
    return np.array(si.splev(newu, tck)).T
def unif_resample(x,n,tol=0,deg=None):    
    if deg is None: deg = min(3, len(x) - 1)

    x = np.atleast_2d(x)
    x = math_utils.remove_duplicate_rows(x)
    dl = math_utils.norms(x[1:] - x[:-1],1)
    l = np.cumsum(np.r_[0,dl])
    
    (tck,_) = si.splprep(x.T,k=deg,s = tol**2*len(x),u=l)

    newu = np.linspace(0,l[-1],n)
    return np.array(si.splev(newu,tck)).T    
def find_path_through_point_cloud(xyzs, plotting=False):
    xyzs = np.asarray(xyzs).reshape(-1, 3)
    S = skeletonize_point_cloud(xyzs)
    segs = get_segments(S)

    if plotting:
        from mayavi import mlab
        mlab.figure(1)
        mlab.clf()
        plot_graph_3d(S)

    S, segs = prune_skeleton(S, segs)

    if plotting:
        from mayavi import mlab
        mlab.figure(3)
        mlab.clf()
        plot_graph_3d(S)

    segs3d = [np.array([S.node[i]["xyz"] for i in seg]) for seg in segs]

    if plotting: plot_paths_2d(segs3d)

    C = make_cost_matrix(segs3d)
    PG = make_path_graph(C, [len(path) for path in segs3d])

    (score, nodes) = longest_path_through_segment_graph(PG)
    print nodes

    total_path = []
    for node in nodes[::2]:
        if node % 2 == 0: total_path.extend(segs[node // 2])
        else: total_path.extend(segs[node // 2][::-1])

    total_path_3d = math_utils.remove_duplicate_rows(
        np.array([S.node[i]["xyz"] for i in total_path]))
    total_path_3d = unif_resample(total_path_3d, n=100,
                                  tol=.01)  # tolerance of 1mm

    if plotting:
        mlab.figure(2)
        mlab.clf()
        for seg in segs3d:
            x, y, z = np.array(seg).T
            mlab.plot3d(x, y, z, color=(0, 1, 0), tube_radius=.001)
        x, y, z = np.array(total_path_3d).T
        mlab.plot3d(x, y, z, color=(1, 0, 0), tube_radius=.01, opacity=.2)

        x, y, z = np.array(xyzs).reshape(-1, 3).T
        mlab.points3d(x, y, z, scale_factor=.01, opacity=.1, color=(0, 0, 1))

    return total_path_3d
def unif_resample(x, n, weights, tol=.001, deg=3):
    x = np.atleast_2d(x)
    weights = np.atleast_2d(weights)
    x = mu.remove_duplicate_rows(x)
    x_scaled = x * weights
    dl = mu.norms(x_scaled[1:] - x_scaled[:-1], 1)
    l = np.cumsum(np.r_[0, dl])
    (tck, _) = si.splprep(x_scaled.T, k=deg, s=tol**2 * len(x), u=l)

    newu = np.linspace(0, l[-1], n)
    out_scaled = np.array(si.splev(newu, tck)).T
    out = out_scaled / weights
    return out
Beispiel #6
0
def unif_resample(x,n,weights,tol=.001,deg=3):    
    x = np.atleast_2d(x)
    weights = np.atleast_2d(weights)
    x = mu.remove_duplicate_rows(x)
    x_scaled = x * weights
    dl = mu.norms(x_scaled[1:] - x_scaled[:-1],1)
    l = np.cumsum(np.r_[0,dl])
    (tck,_) = si.splprep(x_scaled.T,k=deg,s = tol**2*len(x),u=l)
    
    newu = np.linspace(0,l[-1],n)
    out_scaled = np.array(si.splev(newu,tck)).T
    out = out_scaled/weights
    return out
def find_path_through_point_cloud(xyzs, plotting = False):
    xyzs = np.asarray(xyzs).reshape(-1,3)
    S = skeletonize_point_cloud(xyzs)
    segs = get_segments(S)

    if plotting: 
        from mayavi import mlab
        mlab.figure(1); mlab.clf()
        plot_graph_3d(S)

    S,segs = prune_skeleton(S, segs)

    if plotting: 
        from mayavi import mlab
        mlab.figure(3); mlab.clf()
        plot_graph_3d(S)


    segs3d = [np.array([S.node[i]["xyz"] for i in seg]) for seg in segs]

    if plotting: plot_paths_2d(segs3d)

    C = make_cost_matrix(segs3d)
    PG = make_path_graph(C, [len(path) for path in segs3d])

    (score, nodes) = longest_path_through_segment_graph(PG)
    print nodes

    total_path = []
    for node in nodes[::2]:
        if node%2 == 0: total_path.extend(segs[node//2])
        else: total_path.extend(segs[node//2][::-1])

    total_path_3d = math_utils.remove_duplicate_rows(np.array([S.node[i]["xyz"] for i in total_path]))
    total_path_3d = unif_resample(total_path_3d, n = 100, tol=.01) # tolerance of 1mm


    if plotting:
        mlab.figure(2); mlab.clf()
        for seg in segs3d:
            x,y,z = np.array(seg).T
            mlab.plot3d(x,y,z,color=(0,1,0),tube_radius=.001)
        x,y,z = np.array(total_path_3d).T
        mlab.plot3d(x,y,z,color=(1,0,0),tube_radius=.01,opacity=.2)      
        
        x,y,z = np.array(xyzs).reshape(-1,3).T
        mlab.points3d(x,y,z,scale_factor=.01,opacity=.1,color=(0,0,1))


    return total_path_3d