def test_read(self):
        inp_filename = "testing_fodder/target_parameters/targ_rec.par"
        tp = TargetParams()
        tp.read(inp_filename)

        self.assertEqual(tp.get_max_discontinuity(), 5)
        self.assertEqual(tp.get_pixel_count_bounds(), (3, 100))
        self.assertEqual(tp.get_xsize_bounds(), (1, 20))
        self.assertEqual(tp.get_ysize_bounds(), (1, 20))
        self.assertEqual(tp.get_min_sum_grey(), 3)

        numpy.testing.assert_array_equal(
            tp.get_grey_thresholds(), [3, 2, 2, 3])
示例#2
0
    def test_read(self):
        inp_filename = "testing_fodder/target_parameters/targ_rec.par"
        tp = TargetParams()
        tp.read(inp_filename)

        self.assertEqual(tp.get_max_discontinuity(), 5)
        self.assertEqual(tp.get_pixel_count_bounds(), (3, 100))
        self.assertEqual(tp.get_xsize_bounds(), (1, 20))
        self.assertEqual(tp.get_ysize_bounds(), (1, 20))
        self.assertEqual(tp.get_min_sum_grey(), 3)

        numpy.testing.assert_array_equal(
            tp.get_grey_thresholds(), [3, 2, 2, 3])
    def test_instantiate_fast(self):
        tp = TargetParams(discont=1, gvthresh=[2, 3, 4, 5], 
            pixel_count_bounds=(10, 100), xsize_bounds=(20, 200), 
            ysize_bounds=(30, 300), min_sum_grey=60, cross_size=3)
        
        self.assertEqual(tp.get_max_discontinuity(), 1)
        self.assertEqual(tp.get_pixel_count_bounds(), (10, 100))
        self.assertEqual(tp.get_xsize_bounds(), (20, 200))
        self.assertEqual(tp.get_ysize_bounds(), (30, 300))
        self.assertEqual(tp.get_min_sum_grey(), 60)

        numpy.testing.assert_array_equal(
            tp.get_grey_thresholds(), [2, 3, 4, 5])
示例#4
0
    def test_instantiate_fast(self):
        tp = TargetParams(discont=1, gvthresh=[2, 3, 4, 5], 
            pixel_count_bounds=(10, 100), xsize_bounds=(20, 200), 
            ysize_bounds=(30, 300), min_sum_grey=60, cross_size=3)
        
        self.assertEqual(tp.get_max_discontinuity(), 1)
        self.assertEqual(tp.get_pixel_count_bounds(), (10, 100))
        self.assertEqual(tp.get_xsize_bounds(), (20, 200))
        self.assertEqual(tp.get_ysize_bounds(), (30, 300))
        self.assertEqual(tp.get_min_sum_grey(), 60)

        numpy.testing.assert_array_equal(
            tp.get_grey_thresholds(), [2, 3, 4, 5])
示例#5
0
    def test_two_targets(self):
        img = np.array([[0, 0, 0, 0, 0], [0, 255, 0, 0, 0], [0, 0, 0, 0, 0],
                        [0, 0, 0, 251, 0], [0, 0, 0, 0, 0]],
                       dtype=np.uint8)

        cpar = ControlParams(4, image_size=(5, 5))
        tpar = TargetParams(gvthresh=[250, 100, 20, 20],
                            discont=5,
                            pixel_count_bounds=(1, 10),
                            min_sum_grey=12,
                            xsize_bounds=(1, 10),
                            ysize_bounds=(1, 10))

        targs = target_recognition(img, tpar, 0, cpar)

        self.assertEqual(len(targs), 2)
        self.assertEqual(targs[0].count_pixels(), (1, 1, 1))

        # Exclude the first target and try again:
        tpar.set_grey_thresholds([252, 100, 20, 20])
        targs = target_recognition(img, tpar, 0, cpar)

        self.assertEqual(len(targs), 1)
        self.assertEqual(targs[0].count_pixels(), (1, 1, 1))
示例#6
0
def py_start_proc_c(n_cams):
    """ Read parameters """

    # Control parameters
    cpar = ControlParams(n_cams)
    cpar.read_control_par(b'parameters/ptv.par')

    # Sequence parameters
    spar = SequenceParams(num_cams=n_cams)
    spar.read_sequence_par(b'parameters/sequence.par', n_cams)

    # Volume parameters
    vpar = VolumeParams()
    vpar.read_volume_par(b'parameters/criteria.par')

    # Tracking parameters
    track_par = TrackingParams()
    track_par.read_track_par(b'parameters/track.par')

    # Target parameters
    tpar = TargetParams(n_cams)
    tpar.read(b'parameters/targ_rec.par')

    # Examine parameters, multiplane (single plane vs combined calibration)
    epar = par.ExamineParams()
    epar.read()

    # Calibration parameters
    cals = []
    for i_cam in range(n_cams):
        cal = Calibration()
        tmp = cpar.get_cal_img_base_name(i_cam)
        cal.from_file(tmp + b'.ori', tmp + b'.addpar')
        cals.append(cal)

    return cpar, spar, vpar, track_par, tpar, cals, epar
示例#7
0
    def test_one_targets2(self):
        img = np.array(
            [[0, 0, 0, 0, 0], [0, 255, 250, 250, 0], [0, 251, 253, 251, 0],
             [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]],
            dtype=np.uint8)

        cpar = ControlParams(4, image_size=(5, 5))
        tpar = TargetParams(gvthresh=[250, 100, 20, 20],
                            discont=5,
                            pixel_count_bounds=(1, 10),
                            min_sum_grey=12,
                            xsize_bounds=(1, 10),
                            ysize_bounds=(1, 10))

        targs = target_recognition(img, tpar, 0, cpar)
        self.assertEqual(len(targs), 1)
        self.assertEqual(targs[0].count_pixels(), (4, 3, 2))
示例#8
0
def run_batch(new_seq_first, new_seq_last):
    """ this file runs inside exp_path, so the other names are
    prescribed by the OpenPTV type of a folder:
        /parameters
        /img
        /cal
        /res
    """
    # read the number of cameras
    with open('parameters/ptv.par', 'r') as f:
        n_cams = int(f.readline())

    # Control parameters
    cpar = ControlParams(n_cams)
    cpar.read_control_par(b'parameters/ptv.par')

    # Sequence parameters
    spar = SequenceParams(num_cams=n_cams)
    spar.read_sequence_par(b'parameters/sequence.par', n_cams)
    spar.set_first(new_seq_first)
    spar.set_last(new_seq_last)

    # Volume parameters
    vpar = VolumeParams()
    vpar.read_volume_par(b'parameters/criteria.par')

    # Tracking parameters
    track_par = TrackingParams()
    track_par.read_track_par(b'parameters/track.par')

    # Target parameters
    tpar = TargetParams()
    tpar.read(b'parameters/targ_rec.par')

    #

    # Calibration parameters

    cals = []
    for i_cam in range(n_cams):
        cal = Calibration()
        tmp = cpar.get_cal_img_base_name(i_cam)
        cal.from_file(tmp + b'.ori', tmp + b'.addpar')
        cals.append(cal)

    # sequence loop for all frames
    for frame in range(new_seq_first, new_seq_last + 1):
        print("processing frame %d" % frame)

        detections = []
        corrected = []
        for i_cam in range(n_cams):
            imname = spar.get_img_base_name(i_cam) + str(frame)
            img = imread(imname)
            hp = simple_highpass(img, cpar)
            targs = target_recognition(hp, tpar, i_cam, cpar)
            print(targs)

            targs.sort_y()
            detections.append(targs)
            mc = MatchedCoords(targs, cpar, cals[i_cam])
            pos, pnr = mc.as_arrays()
            print(i_cam)
            corrected.append(mc)

        #        if any([len(det) == 0 for det in detections]):
        #            return False

        # Corresp. + positions.
        sorted_pos, sorted_corresp, num_targs = correspondences(
            detections, corrected, cals, vpar, cpar)

        # Save targets only after they've been modified:
        for i_cam in xrange(n_cams):
            detections[i_cam].write(spar.get_img_base_name(i_cam), frame)


        print("Frame " + str(frame) + " had " \
              + repr([s.shape[1] for s in sorted_pos]) + " correspondences.")

        # Distinction between quad/trip irrelevant here.
        sorted_pos = np.concatenate(sorted_pos, axis=1)
        sorted_corresp = np.concatenate(sorted_corresp, axis=1)

        flat = np.array([corrected[i].get_by_pnrs(sorted_corresp[i]) \
                         for i in xrange(len(cals))])
        pos, rcm = point_positions(flat.transpose(1, 0, 2), cpar, cals, vpar)

        if len(cals) < 4:
            print_corresp = -1 * np.ones((4, sorted_corresp.shape[1]))
            print_corresp[:len(cals), :] = sorted_corresp
        else:
            print_corresp = sorted_corresp

        # Save rt_is
        rt_is = open(default_naming['corres'] + '.' + str(frame), 'w')
        rt_is.write(str(pos.shape[0]) + '\n')
        for pix, pt in enumerate(pos):
            pt_args = (pix + 1, ) + tuple(pt) + tuple(print_corresp[:, pix])
            rt_is.write("%4d %9.3f %9.3f %9.3f %4d %4d %4d %4d\n" % pt_args)
        rt_is.close()
    # end of a sequence loop

    tracker = Tracker(cpar, vpar, track_par, spar, cals, default_naming)
    tracker.full_forward()