Exemplo n.º 1
0
def visualize_segments(seq):
    edge_dir = os.path.join(seq, 'edges', '*.jpg')
    paths = glob.glob(edge_dir)

    fig = pynutmeg.figure('segments', 'figs/segments.qml')
    fig.set_gui('figs/segments_gui.qml')

    fig.set('ax.im', xOffset=-0.5, yOffset=-0.5)

    nextframe = fig.parameter('nextframe')
    nextframe.wait_changed()
    prv = fig.parameter('prev')
    nxt = fig.parameter('next')

    for p in paths[::50]:
        print("\nReading in {}".format(p))
        E = IO.imread(p)
        pts, labels = Contours.find_contours_edge(E,
                                                  low=30,
                                                  high=50,
                                                  min_length=10)
        J, I = pts.T

        show = np.empty_like(E)
        show[:] = 255
        show[I, J] = 255 - E[I, J]

        fig.set('ax.im', binary=show)

        label = 0
        x = empty(0)
        y = empty(0)

        while True:
            if nextframe.changed:
                nextframe.read()
                break

            label_changed = nxt.changed or prv.changed
            if nxt.changed:
                label += 1
            elif prv.changed:
                label = max(0, label - 1)

            if label_changed:
                print("Calc for label {}".format(label))
                prv.read()
                nxt.read()

                sel = np.where(labels == label)[0]
                x = J[sel].astype(float)
                y = I[sel].astype(float)

                fig.set('ax.P0', x=x, y=y)
                fig.set('ax.P1', x=x[0:1], y=y[0:1])

            time.sleep(0.005)
Exemplo n.º 2
0
def extract_rays(seq, sub, skip=2, max_frame=None, imtype='png'):
    edge_dir = os.path.join(seq, 'edges', '*.'+imtype)
    paths = glob.glob(edge_dir)
    paths.sort()
    F = len(paths)

    cam = IO.read_cam_param( os.path.join(seq, 'cam.yaml') )
    Rt_path = os.path.join(seq, 'tracking.csv')
    R, t, times, valid = IO.read_tracking(Rt_path)
    valid_bool = zeros(len(R), bool)
    valid_bool[valid] = True

    cloud = RayCloud.RayCloud()
    cloud.set_cam(cam)
    cloud.set_poses(R, t)

    fig = pynutmeg.figure('segments', 'figs/segments.qml')

    if max_frame is None:
        max_frame = F

    print("Estimating bounding box volume from labels")
    frames, boxes = IO.read_rects( os.path.join(seq, 'rects.yaml') )
    cloud.apply_bounding_boxes(frames, boxes)

    print("Extracting Edge Rays")
    for f in range(0, max_frame, skip):
        if not valid_bool[f]:
            continue
        print("\r\tFrame: {} of {}".format(f, F), end=' '*16, flush=True)

        E = IO.imread( paths[f] )
        pts, labels = Contours.find_contours_edge(E, low=20, high=35, min_length=30)
        im = np.empty_like(E)
        im[:] = 255
        im[pts[:,1], pts[:,0]] = 0
        # TODO: Maybe put the next 2 into the one function. This is fine for now though
        pts, labels = Contours.simplify_labeled(pts, labels, eps=1.5)
        tangents, labels = Contours.segment_tangents(pts, labels, thresh=35.)

        # fig.set('ax.im', binary=255-E)
        fig.set('ax.im', binary=im)
        cloud.add_pixels(pts, tangents, f, labels)

    print("\nSaving ray cloud...")
    cloud.save( os.path.join(seq, sub) )