def make_default_system(): '''helper function to generate an instance of MultiCameraSystem''' lookat = np.array( (0.0, 0.0, 0.0)) center1 = np.array( (0.0, 0.0, 0.9) ) distortion1 = np.array( [0.2, 0.3, 0.1, 0.1, 0.1] ) cam1 = CameraModel.load_camera_simple(name='cam1', fov_x_degrees=90, eye=center1, lookat=lookat, distortion_coefficients=distortion1, ) center2 = np.array( (0.5, -0.8, 0.0) ) cam2 = CameraModel.load_camera_simple(name='cam2', fov_x_degrees=90, eye=center2, lookat=lookat, ) center3 = np.array( (0.5, 0.5, 0.0) ) cam3 = CameraModel.load_camera_simple(name='cam3', fov_x_degrees=90, eye=center3, lookat=lookat, ) system = MultiCameraSystem([cam1,cam2,cam3]) return system
def make_default_system(with_separate_distorions=False): """helper function to generate an instance of MultiCameraSystem""" if with_separate_distorions: raise NotImplementedError camxs = np.linspace(-2, 2, 3) camzs = np.linspace(-2, 2, 3).tolist() camzs.pop(1) cameras = [] lookat = np.array((0.0, 0, 0)) up = np.array((0.0, 0, 1)) for enum, camx in enumerate(camxs): center = np.array((camx, -5, 0)) name = "camx_%d" % (enum + 1,) cam = CameraModel.load_camera_simple(name=name, fov_x_degrees=45, eye=center, lookat=lookat, up=up) cameras.append(cam) for enum, camz in enumerate(camzs): center = np.array((0, -5, camz)) name = "camz_%d" % (enum + 1,) cam = CameraModel.load_camera_simple(name=name, fov_x_degrees=45, eye=center, lookat=lookat, up=up) cameras.append(cam) system = MultiCameraSystem(cameras) return system
def test_equals(): system = make_default_system() assert system != 1234 system2 = MultiCameraSystem([CameraModel.load_camera_simple(name='cam%d'%i) for i in range(2)]) system3 = MultiCameraSystem([CameraModel.load_camera_simple(name='cam%d'%i) for i in range(3)]) assert system2 != system3 system4 = make_default_system() d = system4.to_dict() d['camera_system'][0]['width'] += 1 system5 = MultiCameraSystem.from_dict( d ) assert system4 != system5
def test_equals(): system = make_default_system() assert system != 1234 system2 = MultiCameraSystem( [CameraModel.load_camera_simple(name='cam%d' % i) for i in range(2)]) system3 = MultiCameraSystem( [CameraModel.load_camera_simple(name='cam%d' % i) for i in range(3)]) assert system2 != system3 system4 = make_default_system() d = system4.to_dict() d['camera_system'][0]['width'] += 1 system5 = MultiCameraSystem.from_dict(d) assert system4 != system5
def test_align(): system1 = make_default_system() system2 = system1.get_aligned_copy( system1 ) # This should be a no-op. assert system1==system2 system3 = MultiCameraSystem([CameraModel.load_camera_simple(name='cam%d'%i) for i in range(2)]) nose.tools.assert_raises(ValueError, system3.get_aligned_copy, system1)
def test_distortion(): base = CameraModel.load_camera_default() lookat = np.array( (0.0, 0.0, 0.0) ) up = np.array( (0.0, 0.0, 1.0) ) cams = [] cams.append( base.get_view_camera(eye=np.array((1.0,0.0,1.0)),lookat=lookat,up=up) ) distortion1 = np.array( [0.2, 0.3, 0.1, 0.1, 0.1] ) cam_wide = CameraModel.load_camera_simple(name='cam_wide', fov_x_degrees=90, eye=np.array((-1.0,-1.0,0.7)), lookat=lookat, distortion_coefficients=distortion1, ) cams.append(cam_wide) cam_ids = [] for i in range(len(cams)): cams[i].name = 'cam%02d'%i cam_ids.append(cams[i].name) cam_system = MultiCameraSystem(cams) R = reconstruct.Reconstructor.from_pymvg(cam_system) for cam_id in cam_ids: nl_params = R.get_intrinsic_nonlinear(cam_id) mvg_cam = cam_system.get_camera_dict()[cam_id] assert np.allclose(mvg_cam.distortion, nl_params)
def test_align(): system1 = make_default_system() system2 = system1.get_aligned_copy(system1) # This should be a no-op. assert system1 == system2 system3 = MultiCameraSystem( [CameraModel.load_camera_simple(name='cam%d' % i) for i in range(2)]) nose.tools.assert_raises(ValueError, system3.get_aligned_copy, system1)
def test_equality(): center = np.array( (0, 0.0, 5) ) lookat = center + np.array( (0,1,0)) cam_apple1 = CameraModel.load_camera_simple(fov_x_degrees=90, eye=center, lookat=lookat, name='apple') cam_apple2 = CameraModel.load_camera_simple(fov_x_degrees=90, eye=center, lookat=lookat, name='apple') cam_orange = CameraModel.load_camera_simple(fov_x_degrees=30, eye=center, lookat=lookat, name='orange') assert cam_apple1==cam_apple2 assert cam_apple1!=cam_orange assert not cam_apple1==cam_orange
def make_default_system(): '''helper function to generate an instance of MultiCameraSystem''' lookat = np.array((0.0, 0.0, 0.0)) center1 = np.array((0.0, 0.0, 5.0)) distortion1 = np.array([0.2, 0.3, 0.1, 0.1, 0.1]) cam1 = CameraModel.load_camera_simple( name='cam1', fov_x_degrees=90, eye=center1, lookat=lookat, distortion_coefficients=distortion1, ) center2 = np.array((0.5, 0.0, 0.0)) cam2 = CameraModel.load_camera_simple( name='cam2', fov_x_degrees=90, eye=center2, lookat=lookat, ) center3 = np.array((0.5, 0.5, 0.0)) cam3 = CameraModel.load_camera_simple( name='cam3', fov_x_degrees=90, eye=center3, lookat=lookat, ) center4 = np.array((0.5, 0.0, 0.5)) cam4 = CameraModel.load_camera_simple( name='cam4', fov_x_degrees=90, eye=center4, lookat=lookat, ) cameras = [cam1, cam2, cam3, cam4] system = MultiCameraSystem(cameras) return system
def make_default_system(with_separate_distorions=False): '''helper function to generate an instance of MultiCameraSystem''' if with_separate_distorions: raise NotImplementedError camxs = np.linspace(-2, 2, 3) camzs = np.linspace(-2, 2, 3).tolist() camzs.pop(1) cameras = [] lookat = np.array((0.0, 0, 0)) up = np.array((0.0, 0, 1)) for enum, camx in enumerate(camxs): center = np.array((camx, -5, 0)) name = 'camx_%d' % (enum + 1, ) cam = CameraModel.load_camera_simple( name=name, fov_x_degrees=45, eye=center, lookat=lookat, up=up, ) cameras.append(cam) for enum, camz in enumerate(camzs): center = np.array((0, -5, camz)) name = 'camz_%d' % (enum + 1, ) cam = CameraModel.load_camera_simple( name=name, fov_x_degrees=45, eye=center, lookat=lookat, up=up, ) cameras.append(cam) system = MultiCameraSystem(cameras) return system
def _get_cams(with_distortion): base = CameraModel.load_camera_default() lookat = np.array((0.0, 0.0, 0.0)) up = np.array((0.0, 0.0, 1.0)) cams = [] cams.append( base.get_view_camera(eye=np.array((1.0, 0.0, 1.0)), lookat=lookat, up=up)) cams.append( base.get_view_camera(eye=np.array((1.2, 3.4, 5.6)), lookat=lookat, up=up)) cams.append( base.get_view_camera(eye=np.array((0, 0.3, 1.0)), lookat=lookat, up=up)) if with_distortion: distortion1 = np.array([0.2, 0.3, 0.1, 0.1, 0.1]) else: distortion1 = np.zeros((5, )) cam_wide = CameraModel.load_camera_simple( name='cam_wide', fov_x_degrees=90, eye=np.array((-1.0, -1.0, 0.7)), lookat=lookat, distortion_coefficients=distortion1, ) cams.append(cam_wide) for i in range(len(cams)): cams[i].name = 'cam%02d' % i cam_system = MultiCameraSystem(cams) reconstructor = Reconstructor.from_pymvg(cam_system) result = dict( cams=cams, cam_system=cam_system, reconstructor=reconstructor, ) return result
def test_no_duplicate_names(): cam1a = CameraModel.load_camera_simple(name='cam1') cam1b = CameraModel.load_camera_simple(name='cam1') cams = [cam1a,cam1b] nose.tools.assert_raises(ValueError, MultiCameraSystem, cams)
def test_no_duplicate_names(): cam1a = CameraModel.load_camera_simple(name='cam1') cam1b = CameraModel.load_camera_simple(name='cam1') cams = [cam1a, cam1b] nose.tools.assert_raises(ValueError, MultiCameraSystem, cams)
def test_simple_camera(): center = np.array( (0, 0.0, 5) ) lookat = center + np.array( (0,1,0)) cam = CameraModel.load_camera_simple(fov_x_degrees=90, eye=center, lookat=lookat)
def test_pymvg_roundtrip(): from pymvg.camera_model import CameraModel from pymvg.multi_camera_system import MultiCameraSystem from flydra_core.reconstruct import Reconstructor # ----------- with no distortion ------------------------ center1 = np.array( (0, 0.0, 5) ) center2 = np.array( (1, 0.0, 5) ) lookat = np.array( (0,1,0)) cam1 = CameraModel.load_camera_simple(fov_x_degrees=90, name='cam1', eye=center1, lookat=lookat) cam2 = CameraModel.load_camera_simple(fov_x_degrees=90, name='cam2', eye=center2, lookat=lookat) mvg = MultiCameraSystem( cameras=[cam1, cam2] ) R = Reconstructor.from_pymvg(mvg) mvg2 = R.convert_to_pymvg() cam_ids = ['cam1','cam2'] for distorted in [True,False]: for cam_id in cam_ids: v1 = mvg.find2d( cam_id, lookat, distorted=distorted ) v2 = R.find2d( cam_id, lookat, distorted=distorted ) v3 = mvg2.find2d( cam_id, lookat, distorted=distorted ) assert np.allclose(v1,v2) assert np.allclose(v1,v3) # ----------- with distortion ------------------------ cam1dd = cam1.to_dict() cam1dd['D'] = (0.1, 0.2, 0.3, 0.4, 0.0) cam1d = CameraModel.from_dict(cam1dd) cam2dd = cam2.to_dict() cam2dd['D'] = (0.11, 0.21, 0.31, 0.41, 0.0) cam2d = CameraModel.from_dict(cam2dd) mvgd = MultiCameraSystem( cameras=[cam1d, cam2d] ) Rd = Reconstructor.from_pymvg(mvgd) mvg2d = Rd.convert_to_pymvg() cam_ids = ['cam1','cam2'] for distorted in [True,False]: for cam_id in cam_ids: v1 = mvgd.find2d( cam_id, lookat, distorted=distorted ) v2 = Rd.find2d( cam_id, lookat, distorted=distorted ) v3 = mvg2d.find2d( cam_id, lookat, distorted=distorted ) assert np.allclose(v1,v2) assert np.allclose(v1,v3) # ------------ with distortion at different focal length ------ mydir = os.path.dirname(__file__) caldir = os.path.join(mydir,'sample_calibration') print mydir print caldir R3 = Reconstructor(caldir) mvg3 = R3.convert_to_pymvg() #R4 = Reconstructor.from_pymvg(mvg3) mvg3b = MultiCameraSystem.from_mcsc( caldir ) for distorted in [True,False]: for cam_id in R3.cam_ids: v1 = R3.find2d( cam_id, lookat, distorted=distorted ) v2 = mvg3.find2d( cam_id, lookat, distorted=distorted ) #v3 = R4.find2d( cam_id, lookat, distorted=distorted ) v4 = mvg3b.find2d( cam_id, lookat, distorted=distorted ) assert np.allclose(v1,v2) #assert np.allclose(v1,v3) assert np.allclose(v1,v4)