Esempio n. 1
0
def py_determination_proc_c(n_cams, sorted_pos, sorted_corresp, corrected):
    """ Returns 3d positions """

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

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

    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)


    # 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 range(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 in a temporary file
    fname = b"".join([default_naming['corres'],b'.123456789']) # hard-coded frame number
    with open(fname, 'w') as rt_is:
        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)
Esempio n. 2
0
def py_determination_proc_c(n_cams, sorted_pos, sorted_corresp, corrected):
    """ Returns 3d positions """

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

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

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

    # 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) == 1:  # single camera case
        sorted_corresp = np.tile(sorted_corresp, (4, 1))
        sorted_corresp[1:, :] = -1

    # Save rt_is in a temporary file
    frame = 123456789  # just a temporary workaround. todo: think how to write
    with open(default_naming['corres'] + '.' + str(frame), 'w') as rt_is:
        rt_is.write(str(pos.shape[0]) + '\n')
        for pix, pt in enumerate(pos):
            pt_args = (pix + 1, ) + tuple(pt) + tuple(sorted_corresp[:, pix])
            rt_is.write("%4d %9.3f %9.3f %9.3f %4d %4d %4d %4d\n" % pt_args)
Esempio n. 3
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
class Test_ControlParams(unittest.TestCase):
    def setUp(self):
        self.input_control_par_file_name = "testing_fodder/control_parameters/control.par"
        self.temp_output_directory = "testing_fodder/control_parameters/testing_output"
        
        # create a temporary output directory (will be deleted by the end of test)
        if not os.path.exists(self.temp_output_directory):
            os.makedirs(self.temp_output_directory)
        # create an instance of ControlParams class
        self.cp_obj = ControlParams(4)
        
    def test_read_control(self):
        # Fill the ControlParams object with parameters from test file
        self.cp_obj.read_control_par(self.input_control_par_file_name)
        # check if all parameters are equal to the contents of test file
        self.failUnless(self.cp_obj.get_img_base_name(0) == "dumbbell/cam1_Scene77_4085") 
        self.failUnless(self.cp_obj.get_img_base_name(1) == "dumbbell/cam2_Scene77_4085")
        self.failUnless(self.cp_obj.get_img_base_name(2) == "dumbbell/cam3_Scene77_4085")
        self.failUnless(self.cp_obj.get_img_base_name(3) == "dumbbell/cam4_Scene77_4085")
        
        self.failUnless(self.cp_obj.get_cal_img_base_name(0) == "cal/cam1.tif")
        self.failUnless(self.cp_obj.get_cal_img_base_name(1) == "cal/cam2.tif")
        self.failUnless(self.cp_obj.get_cal_img_base_name(2) == "cal/cam3.tif")
        self.failUnless(self.cp_obj.get_cal_img_base_name(3) == "cal/cam4.tif")
        
        self.failUnless(self.cp_obj.get_num_cams() == 4)
        self.failUnless(self.cp_obj.get_hp_flag())
        self.failUnless(self.cp_obj.get_allCam_flag())
        self.failUnless(self.cp_obj.get_tiff_flag())
        self.failUnless(self.cp_obj.get_image_size(), (1280, 1024))
        self.failUnless(self.cp_obj.get_pixel_size() == (15.15,16.16))
        self.failUnless(self.cp_obj.get_chfield() == 17)
        
        self.failUnless(self.cp_obj.get_multimedia_params().get_n1() == 18)
        self.failUnless(self.cp_obj.get_multimedia_params().get_n2()[0] == 19.19)
        self.failUnless(self.cp_obj.get_multimedia_params().get_n3() == 20.20)
        self.failUnless(self.cp_obj.get_multimedia_params().get_d()[0] == 21.21)
     
    def test_instantiate_fast(self):
        """ControlParams instantiation through constructor"""
        cp = ControlParams(4, ['headers', 'hp', 'allcam'], (1280, 1024), 
            (15.15,16.16), 18, [19.19], [21.21], 20.20)
        
        self.failUnless(cp.get_num_cams() == 4)
        self.failUnless(cp.get_hp_flag())
        self.failUnless(cp.get_allCam_flag())
        self.failUnless(cp.get_tiff_flag())
        self.failUnless(cp.get_image_size(), (1280, 1024))
        self.failUnless(cp.get_pixel_size() == (15.15,16.16))
        self.failUnless(cp.get_chfield() == 0)
        
        mm = cp.get_multimedia_params()
        self.failUnless(mm.get_n1() == 18)
        self.failUnless(mm.get_n2()[0] == 19.19)
        self.failUnless(mm.get_n3() == 20.20)
        self.failUnless(mm.get_d()[0] == 21.21)
        
        
    def test_getters_setters(self):
        cams_num = 4
        for cam in range(cams_num):
            new_str = str(cam) + "some string" + str(cam)
            
            self.cp_obj.set_img_base_name(cam, new_str)
            self.failUnless(self.cp_obj.get_img_base_name(cam) == new_str)
            
            self.cp_obj.set_cal_img_base_name(cam, new_str)
            self.failUnless(self.cp_obj.get_cal_img_base_name(cam) == new_str)
        
        self.cp_obj.set_hp_flag(True)
        self.failUnless(self.cp_obj.get_hp_flag())
        self.cp_obj.set_hp_flag(False)
        self.failUnless(not self.cp_obj.get_hp_flag())
        
        self.cp_obj.set_allCam_flag(True)
        self.failUnless(self.cp_obj.get_allCam_flag())
        self.cp_obj.set_allCam_flag(False)
        self.failUnless(not self.cp_obj.get_allCam_flag())
        
        self.cp_obj.set_tiff_flag(True)
        self.failUnless(self.cp_obj.get_tiff_flag())
        self.cp_obj.set_tiff_flag(False)
        self.failUnless(not self.cp_obj.get_tiff_flag())
        
        self.cp_obj.set_image_size((4, 5))
        self.failUnless(self.cp_obj.get_image_size()== (4, 5))
        print self.cp_obj.get_pixel_size()
        self.cp_obj.set_pixel_size((6.1, 7.0))
        numpy.testing.assert_array_equal(self.cp_obj.get_pixel_size(), (6.1, 7))
        
        self.cp_obj.set_chfield(8)
        self.failUnless(self.cp_obj.get_chfield() == 8)
         
    # testing __richcmp__ comparison method of ControlParams class
    def test_rich_compare(self):
        self.cp_obj2 = ControlParams(4)
        self.cp_obj2.read_control_par(self.input_control_par_file_name)
        
        self.cp_obj3 = ControlParams(4)
        self.cp_obj3.read_control_par(self.input_control_par_file_name)
           
        self.failUnless(self.cp_obj2 == self.cp_obj3)
        self.failIf(self.cp_obj2 != self.cp_obj3)
           
        self.cp_obj2.set_hp_flag(False)
        self.failUnless(self.cp_obj2 != self.cp_obj3)
        self.failIf(self.cp_obj2 == self.cp_obj3)
        
        with self.assertRaises(TypeError):
            var = (self.cp_obj2 > self.cp_obj3)  # unhandled operator > 
      
    def tearDown(self):
        # remove the testing output directory and its files
        shutil.rmtree(self.temp_output_directory)        
Esempio n. 5
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()
Esempio n. 6
0
class Test_ControlParams(unittest.TestCase):
    def setUp(self):
        self.input_control_par_file_name = "testing_fodder/control_parameters/control.par"
        self.temp_output_directory = "testing_fodder/control_parameters/testing_output"
        
        # create a temporary output directory (will be deleted by the end of test)
        if not os.path.exists(self.temp_output_directory):
            os.makedirs(self.temp_output_directory)
        # create an instance of ControlParams class
        self.cp_obj = ControlParams(4)
        
    def test_read_control(self):
        # Fill the ControlParams object with parameters from test file
        self.cp_obj.read_control_par(self.input_control_par_file_name)
        # check if all parameters are equal to the contents of test file
        self.failUnless(self.cp_obj.get_img_base_name(0) == "dumbbell/cam1_Scene77_4085") 
        self.failUnless(self.cp_obj.get_img_base_name(1) == "dumbbell/cam2_Scene77_4085")
        self.failUnless(self.cp_obj.get_img_base_name(2) == "dumbbell/cam3_Scene77_4085")
        self.failUnless(self.cp_obj.get_img_base_name(3) == "dumbbell/cam4_Scene77_4085")
        
        self.failUnless(self.cp_obj.get_cal_img_base_name(0) == "cal/cam1.tif")
        self.failUnless(self.cp_obj.get_cal_img_base_name(1) == "cal/cam2.tif")
        self.failUnless(self.cp_obj.get_cal_img_base_name(2) == "cal/cam3.tif")
        self.failUnless(self.cp_obj.get_cal_img_base_name(3) == "cal/cam4.tif")
        
        self.failUnless(self.cp_obj.get_num_cams() == 4)
        self.failUnless(self.cp_obj.get_hp_flag())
        self.failUnless(self.cp_obj.get_allCam_flag())
        self.failUnless(self.cp_obj.get_tiff_flag())
        self.failUnless(self.cp_obj.get_image_size(), (1280, 1024))
        self.failUnless(self.cp_obj.get_pixel_size() == (15.15,16.16))
        self.failUnless(self.cp_obj.get_chfield() == 17)
        
        self.failUnless(self.cp_obj.get_multimedia_params().get_n1() == 18)
        self.failUnless(self.cp_obj.get_multimedia_params().get_n2()[0] == 19.19)
        self.failUnless(self.cp_obj.get_multimedia_params().get_n3() == 20.20)
        self.failUnless(self.cp_obj.get_multimedia_params().get_d()[0] == 21.21)
     
    def test_instantiate_fast(self):
        """ControlParams instantiation through constructor"""
        cp = ControlParams(4, ['headers', 'hp', 'allcam'], (1280, 1024), 
            (15.15,16.16), 18, [19.19], [21.21], 20.20)
        
        self.failUnless(cp.get_num_cams() == 4)
        self.failUnless(cp.get_hp_flag())
        self.failUnless(cp.get_allCam_flag())
        self.failUnless(cp.get_tiff_flag())
        self.failUnless(cp.get_image_size(), (1280, 1024))
        self.failUnless(cp.get_pixel_size() == (15.15,16.16))
        self.failUnless(cp.get_chfield() == 0)
        
        mm = cp.get_multimedia_params()
        self.failUnless(mm.get_n1() == 18)
        self.failUnless(mm.get_n2()[0] == 19.19)
        self.failUnless(mm.get_n3() == 20.20)
        self.failUnless(mm.get_d()[0] == 21.21)
        
        
    def test_getters_setters(self):
        cams_num = 4
        for cam in range(cams_num):
            new_str = str(cam) + "some string" + str(cam)
            
            self.cp_obj.set_img_base_name(cam, new_str)
            self.failUnless(self.cp_obj.get_img_base_name(cam) == new_str)
            
            self.cp_obj.set_cal_img_base_name(cam, new_str)
            self.failUnless(self.cp_obj.get_cal_img_base_name(cam) == new_str)
        
        self.cp_obj.set_hp_flag(True)
        self.failUnless(self.cp_obj.get_hp_flag())
        self.cp_obj.set_hp_flag(False)
        self.failUnless(not self.cp_obj.get_hp_flag())
        
        self.cp_obj.set_allCam_flag(True)
        self.failUnless(self.cp_obj.get_allCam_flag())
        self.cp_obj.set_allCam_flag(False)
        self.failUnless(not self.cp_obj.get_allCam_flag())
        
        self.cp_obj.set_tiff_flag(True)
        self.failUnless(self.cp_obj.get_tiff_flag())
        self.cp_obj.set_tiff_flag(False)
        self.failUnless(not self.cp_obj.get_tiff_flag())
        
        self.cp_obj.set_image_size((4, 5))
        self.failUnless(self.cp_obj.get_image_size()== (4, 5))
        print self.cp_obj.get_pixel_size()
        self.cp_obj.set_pixel_size((6.1, 7.0))
        numpy.testing.assert_array_equal(self.cp_obj.get_pixel_size(), (6.1, 7))
        
        self.cp_obj.set_chfield(8)
        self.failUnless(self.cp_obj.get_chfield() == 8)
         
    # testing __richcmp__ comparison method of ControlParams class
    def test_rich_compare(self):
        self.cp_obj2 = ControlParams(4)
        self.cp_obj2.read_control_par(self.input_control_par_file_name)
        
        self.cp_obj3 = ControlParams(4)
        self.cp_obj3.read_control_par(self.input_control_par_file_name)
           
        self.failUnless(self.cp_obj2 == self.cp_obj3)
        self.failIf(self.cp_obj2 != self.cp_obj3)
           
        self.cp_obj2.set_hp_flag(False)
        self.failUnless(self.cp_obj2 != self.cp_obj3)
        self.failIf(self.cp_obj2 == self.cp_obj3)
        
        with self.assertRaises(TypeError):
            var = (self.cp_obj2 > self.cp_obj3)  # unhandled operator > 
      
    def tearDown(self):
        # remove the testing output directory and its files
        shutil.rmtree(self.temp_output_directory)