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)
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) )