def test1(objectPoints_square):
    # ------------------------------Z fixed, study X Y-----------------------------------------
    cams_Zfixed = []
    for x in np.linspace(-0.5, 0.5, 10):
        for y in np.linspace(-0.5, 0.5, 10):
            cam1 = Camera()
            cam1.set_K(fx=800, fy=800, cx=640 / 2., cy=480 / 2.)
            cam1.set_width_heigth(640, 480)

            ## DEFINE A SET OF CAMERA POSES IN DIFFERENT POSITIONS BUT ALWAYS LOOKING
            # TO THE CENTER OF THE PLANE MODEL
            # TODO LOOK AT
            cam1.set_R_axisAngle(1.0, 0.0, 0.0, np.deg2rad(180.0))
            # TODO  cv2.SOLVEPNP_DLS, cv2.SOLVEPNP_EPNP, cv2.SOLVEPNP_ITERATIVE
            # cam1.set_t(x, -0.01, 1.31660688, frame='world')
            cam1.set_t(x, y, 1.3, frame='world')
            # 0.28075725, -0.23558331, 1.31660688
            cams_Zfixed.append(cam1)

    new_objectPoints = np.copy(objectPoints_square)
    xInputs = []
    yInputs = []
    volumes = []
    for cam in cams_Zfixed:
        t = cam.get_world_position()
        xInputs.append(t[0])
        yInputs.append(t[1])

        cov_mat = covariance_alpha_belt_r(cam, new_objectPoints)
        a, b, c = ellipsoid.get_semi_axes_abc(cov_mat, 0.95)
        v = ellipsoid.ellipsoid_Volume(a, b, c)
        volumes.append(v)

    dvm.displayCovVolume_Zfixed3D(xInputs, yInputs, volumes)
Example #2
0
def test_f():
    """
    Test f(input, K, obj_point)
    :return:
    """

    alpha = 0
    belt = 0
    r = 1
    input = [0.0, 0.0, 0.0]
    input[0] = alpha
    input[1] = belt
    input[2] = r

    cam = Camera()
    cam.set_K(fx=800, fy=800, cx=640 / 2., cy=480 / 2.)
    cam.set_width_heigth(640, 480)
    cam.set_R_mat(
        Rt_matrix_from_euler_t.R_matrix_from_euler_t(0, np.deg2rad(0), 0))
    cam.set_t(0., 0., 0.5, 'world')
    pl = CircularPlane(origin=np.array([0., 0., 0.]),
                       normal=np.array([0, 0, 1]),
                       radius=0.15,
                       n=4)
    x1 = round(pl.radius * np.cos(np.deg2rad(45)), 3)
    y1 = round(pl.radius * np.sin(np.deg2rad(45)), 3)
    objectPoints_square = np.array([[x1, -x1, -x1, x1], [y1, y1, -y1, -y1],
                                    [0., 0., 0., 0.], [1., 1., 1., 1.]])

    new_objectPoints = np.copy(objectPoints_square)

    cms.f(input, cam.K, new_objectPoints)
Example #3
0
def create_cam_distribution(cam=None,
                            plane_size=(0.3, 0.3),
                            theta_params=(0, 360, 10),
                            phi_params=(0, 70, 5),
                            r_params=(0.25, 1.0, 4),
                            plot=False):
    if cam == None:
        # Create an initial camera on the center of the world
        cam = Camera()
        f = 800
        cam.set_K(fx=f, fy=f, cx=320, cy=240)  #Camera Matrix
        cam.img_width = 320 * 2
        cam.img_height = 240 * 2

    # we create a default plane with 4 points with a side lenght of w (meters)
    plane = Plane(origin=np.array([0, 0, 0]),
                  normal=np.array([0, 0, 1]),
                  size=plane_size,
                  n=(2, 2))
    #We extend the size of this plane to account for the deviation from a uniform pattern
    #plane.size = (plane.size[0] + deviation, plane.size[1] + deviation)

    d_space = np.linspace(r_params[0], r_params[1], r_params[2])
    t_list = []
    for d in d_space:
        xx, yy, zz = uniform_sphere(theta_params, phi_params, d, False)
        sphere_points = np.array(
            [xx.ravel(), yy.ravel(), zz.ravel()], dtype=np.float32)
        t_list.append(sphere_points)
    t_space = np.hstack(t_list)

    cams = []
    for t in t_space.T:
        cam = cam.clone()
        cam.set_t(-t[0], -t[1], -t[2])
        cam.set_R_mat(R_matrix_from_euler_t(0.0, 0, 0))
        cam.look_at([0, 0, 0])

        plane.set_origin(np.array([0, 0, 0]))
        plane.uniform()
        objectPoints = plane.get_points()
        imagePoints = cam.project(objectPoints)

        #if plot:
        #  cam.plot_image(imagePoints)
        if ((imagePoints[0, :] < cam.img_width) &
            (imagePoints[0, :] > 0)).all():
            if ((imagePoints[1, :] < cam.img_height) &
                (imagePoints[1, :] > 0)).all():
                cams.append(cam)

    if plot:
        planes = []
        plane.uniform()
        planes.append(plane)
        plot3D(cams, planes)

    return cams
Example #4
0
def test2_covariance_alpha_belt_r():
    """
    Test covariance_alpha_belt_r(cam, new_objectPoints)
    X Y fixed, Z changed
    :return:
    """
    pl = CircularPlane(origin=np.array([0., 0., 0.]),
                       normal=np.array([0, 0, 1]),
                       radius=0.15,
                       n=4)
    x1 = round(pl.radius * np.cos(np.deg2rad(45)), 3)
    y1 = round(pl.radius * np.sin(np.deg2rad(45)), 3)
    objectPoints_square = np.array([[x1, -x1, -x1, x1], [y1, y1, -y1, -y1],
                                    [0., 0., 0., 0.], [1., 1., 1., 1.]])

    new_objectPoints = np.copy(objectPoints_square)

    # -----------------------------X Y fixed, Z changed-----------------------------
    cams_XYfixed = []
    for i in np.linspace(0.5, 2, 5):
        cam1 = Camera()
        cam1.set_K(fx=800, fy=800, cx=640 / 2., cy=480 / 2.)
        cam1.set_width_heigth(640, 480)
        cam1.set_R_axisAngle(1.0, 0.0, 0.0, np.deg2rad(180.0))
        cam1.set_t(0, 0, i, frame='world')
        # 0.28075725, -0.23558331, 1.31660688
        cams_XYfixed.append(cam1)

    zInputs = []
    volumes = []
    ellipsoid_paras = np.array([[0], [0], [0], [0], [0], [0]])  # a,b,c,x,y,z
    for cam in cams_XYfixed:
        cam_tem = cam.clone()
        valid = cms.validCam(cam_tem, new_objectPoints)
        if valid:
            t = cam.get_world_position()
            zInputs.append(t[2])
            print "Height", t[2]

            cov_mat = cms.covariance_alpha_belt_r(cam, new_objectPoints)
            a, b, c = ellipsoid.get_semi_axes_abc(cov_mat, 0.95)
            display_array = np.array(
                [[0.0], [0.0], [0.0], [0.0], [0.0], [0.0]], dtype=float)
            display_array[0:3, 0] = a, b, c
            display_array[3:6, 0] = np.copy(t[0:3])
            ellipsoid_paras = np.hstack((ellipsoid_paras, display_array))

            v = ellipsoid.ellipsoid_Volume(a, b, c)
            print "volumn", v
            volumes.append(v)

    dvm.displayCovVolume_XYfixed3D(zInputs, volumes)
def Z_fixed_study_square():
    cams_HeightFixed = []
    cam_1 = Camera()
    cam_1.set_K(fx=800, fy=800, cx=640 / 2., cy=480 / 2.)
    cam_1.set_width_heigth(640, 480)
    cam_1.set_R_axisAngle(1.0, 0.0, 0.0, np.deg2rad(180.0))
    cam_1.set_t(0.1, 0.1, 1, frame='world')
    cams_HeightFixed.append(cam_1)

    cam_2 = Camera()
    cam_2.set_K(fx=800, fy=800, cx=640 / 2., cy=480 / 2.)
    cam_2.set_width_heigth(640, 480)
    cam_2.set_R_axisAngle(1.0, 0.0, 0.0, np.deg2rad(180.0))
    cam_2.set_t(-0.1, 0.1, 1, frame='world')
    # 0.28075725, -0.23558331, 1.31660688
    cams_HeightFixed.append(cam_2)

    cam_3 = Camera()
    cam_3.set_K(fx=800, fy=800, cx=640 / 2., cy=480 / 2.)
    cam_3.set_width_heigth(640, 480)
    cam_3.set_R_axisAngle(1.0, 0.0, 0.0, np.deg2rad(180.0))
    cam_3.set_t(-0.1, -0.1, 1, frame='world')
    # 0.28075725, -0.23558331, 1.31660688
    cams_HeightFixed.append(cam_3)

    cam_4 = Camera()
    cam_4.set_K(fx=800, fy=800, cx=640 / 2., cy=480 / 2.)
    cam_4.set_width_heigth(640, 480)
    cam_4.set_R_axisAngle(1.0, 0.0, 0.0, np.deg2rad(180.0))
    cam_4.set_t(0.1, -0.1, 1, frame='world')
    # 0.28075725, -0.23558331, 1.31660688
    cams_HeightFixed.append(cam_4)
    inputX, inputY, inputZ, input_ippe1_t, input_ippe1_R, input_ippe2_t, input_ippe2_R, input_pnp_t, input_pnp_R, input_transfer_error, display_mat = bf.heightGetCondNum(cams_HeightFixed)
Example #6
0
def test3_covariance_alpha_belt_r():
    """
    Y fixed, study X Z  like a half circle above the marker
    :return:
    """
    pl = CircularPlane(origin=np.array([0., 0., 0.]),
                       normal=np.array([0, 0, 1]),
                       radius=0.15,
                       n=4)
    x1 = round(pl.radius * np.cos(np.deg2rad(45)), 3)
    y1 = round(pl.radius * np.sin(np.deg2rad(45)), 3)
    objectPoints_square = np.array([[x1, -x1, -x1, x1], [y1, y1, -y1, -y1],
                                    [0., 0., 0., 0.], [1., 1., 1., 1.]])

    new_objectPoints = np.copy(objectPoints_square)
    # ------------------------------Y fixed, study X Z  like a half circle -----------------------------------------
    cams_Yfixed = []
    for angle in np.linspace(np.deg2rad(0), np.deg2rad(180), 20):
        x = np.cos(angle)
        z = np.sin(angle)
        cam1 = Camera()
        cam1.set_K(fx=800, fy=800, cx=640 / 2., cy=480 / 2.)
        cam1.set_width_heigth(640, 480)
        # TODO  WE have not set R yet
        # print 'cam1.R',cam1.R
        cam1.set_t(x, 0, z, frame='world')
        cams_Yfixed.append(cam1)

    xInputs = []
    zInputs = []
    volumes = []
    for cam in cams_Yfixed:
        cam_tem = cam.clone()
        valid = cms.validCam(cam_tem, new_objectPoints)
        if valid:
            t = cam.get_world_position()
            xInputs.append(t[0])
            zInputs.append(t[2])
            print "x = ", t[0]
            print "z = ", t[2]

            cov_mat = cms.covariance_alpha_belt_r(cam, new_objectPoints)
            a, b, c = ellipsoid.get_semi_axes_abc(cov_mat, 0.95)
            v = ellipsoid.ellipsoid_Volume(a, b, c)
            print "v", v
            volumes.append(v)

    dvm.displayCovVolume_Zfixed3D(xInputs, zInputs, volumes)
def getCondNum_camPoseInRealWord(x_w, y_w, grid_reso, width, height):
    """
    Compute the condition number of camera position in real world coordinate
    :param x_w: camera potion in real world coordinate
    :param y_w: camera potion in real world coordinate
    :param width: gird 60
    :param height: grid 30
    :return:
    """
    # width = int(grid_width/ grid_reso)
    # height = int(grid_height/ grid_reso)
    T_WM = getMarkerTransformationMatrix(width, height, grid_reso)
    pos_world_homo = np.array([x_w, y_w, 0, 1])
    pos_marker = np.dot(T_WM, pos_world_homo)

    ## CREATE A SIMULATED CAMERA
    cam = Camera()
    cam.set_K(fx=800, fy=800, cx=640 / 2., cy=480 / 2.)
    cam.set_width_heigth(640, 480)

    cam.set_t(pos_marker[0], pos_marker[1], pos_marker[2], 'world')
    cam.set_R_mat(Rt_matrix_from_euler_t.R_matrix_from_euler_t(0.0, 0, 0))
    cam.look_at([0, 0, 0])

    radius = np.sqrt(pos_marker[0]**2 + pos_marker[1]**2 + pos_marker[2]**2)
    angle = np.rad2deg(np.arccos(pos_marker[1] / radius))
    cam.set_radius(radius)
    cam.set_angle(angle)
    objectPoints = np.copy(new_objectPoints)
    imagePoints = np.array(cam.project(objectPoints, False))

    condNum = np.inf  # undetected region set as 0
    if ((imagePoints[0, :] < cam.img_width) & (imagePoints[0, :] > 0) &
        (imagePoints[1, :] < cam.img_height) & (imagePoints[1, :] > 0)).all():
        input_list = gd.extract_objectpoints_vars(objectPoints)
        input_list.append(np.array(cam.K))
        input_list.append(np.array(cam.R))
        input_list.append(cam.t[0, 3])
        input_list.append(cam.t[1, 3])
        input_list.append(cam.t[2, 3])
        input_list.append(cam.radius)
        # TODO normalize points!!!   set normalize as default True
        condNum = gd.matrix_condition_number_autograd(*input_list,
                                                      normalize=True)

    return condNum
Example #8
0
def test_covariance_alpha_belt_r():
    """
    Test covariance_alpha_belt_r(cam, new_objectPoints)
    Z fixed, study X Y-
    :return:
    """
    pl = CircularPlane(origin=np.array([0., 0., 0.]),
                       normal=np.array([0, 0, 1]),
                       radius=0.15,
                       n=4)
    x1 = round(pl.radius * np.cos(np.deg2rad(45)), 3)
    y1 = round(pl.radius * np.sin(np.deg2rad(45)), 3)
    objectPoints_square = np.array([[x1, -x1, -x1, x1], [y1, y1, -y1, -y1],
                                    [0., 0., 0., 0.], [1., 1., 1., 1.]])

    new_objectPoints = np.copy(objectPoints_square)

    # ------------------------------Z fixed, study X Y-----------------------------------------
    cams_Zfixed = []
    for x in np.linspace(-0.5, 0.5, 5):
        for y in np.linspace(-0.5, 0.5, 5):
            cam1 = Camera()
            cam1.set_K(fx=800, fy=800, cx=640 / 2., cy=480 / 2.)
            cam1.set_width_heigth(640, 480)
            # TODO  WE have not set R yet
            # print 'cam1.R',cam1.R
            cam1.set_t(x, y, 1.3, frame='world')
            cams_Zfixed.append(cam1)

    xInputs = []
    yInputs = []
    volumes = []
    for cam in cams_Zfixed:
        cam_tem = cam.clone()
        valid = cms.validCam(cam_tem, new_objectPoints)
        if valid:
            t = cam.get_world_position()
            xInputs.append(t[0])
            yInputs.append(t[1])

            cov_mat = cms.covariance_alpha_belt_r(cam, new_objectPoints)
            a, b, c = ellipsoid.get_semi_axes_abc(cov_mat, 0.95)
            v = ellipsoid.ellipsoid_Volume(a, b, c)
            volumes.append(v)

    dvm.displayCovVolume_Zfixed3D(xInputs, yInputs, volumes)
def getT_MC_and_Rt_errors(T_WM, pos_world, Rmat_error_loop, tvec_error_loop):
    pos_world_homo = np.array([pos_world[0], pos_world[1], 0, 1])
    pos_marker = np.dot(T_WM, pos_world_homo)
    # print "pos_marker\n", pos_marker

    # Create an initial camera on the center of the world
    cam = Camera()
    f = 800
    cam.set_K(fx=f, fy=f, cx=320, cy=240)  # Camera Matrix
    cam.img_width = 320 * 2
    cam.img_height = 240 * 2
    cam = cam.clone()
    cam.set_t(pos_marker[0], pos_marker[1], pos_marker[2], 'world')
    cam.set_R_mat(Rt_matrix_from_euler_t.R_matrix_from_euler_t(0.0, 0, 0))
    # print "cam.R\n",cam.R
    cam.look_at([0, 0, 0])
    # print "cam.Rt after look at\n",cam.R
    objectPoints = np.copy(new_objectPoints)
    imagePoints = np.array(cam.project(objectPoints, False))
    new_imagePoints = np.copy(imagePoints)
    # -----------------------------------------------------------------
    new_imagePoints_noisy = cam.addnoise_imagePoints(new_imagePoints,
                                                     mean=0,
                                                     sd=4)
    # print "new_imagePoints_noisy\n",new_imagePoints_noisy
    debug = False
    # TODO  cv2.SOLVEPNP_DLS, cv2.SOLVEPNP_EPNP, cv2.SOLVEPNP_ITERATIVE
    pnp_tvec, pnp_rmat = pose_pnp(new_objectPoints, new_imagePoints_noisy,
                                  cam.K, debug, cv2.SOLVEPNP_ITERATIVE, False)

    # Calculate errors
    Cam_clone_cv2 = cam.clone_withPose(pnp_tvec, pnp_rmat)
    tvec_error, Rmat_error = ef.calc_estimated_pose_error(
        cam.get_tvec(), cam.R, Cam_clone_cv2.get_tvec(), pnp_rmat)
    Rmat_error_loop.append(Rmat_error)
    tvec_error_loop.append(tvec_error)

    # print "cam.get_world_position()\n",cam.get_world_position()
    t = np.eye(4)
    t[:3, 3] = pnp_tvec[:3]
    T_MC = np.dot(t, pnp_rmat)
    return T_MC
Example #10
0
s1 = Screen()
s1.set_origin(np.array([0.0, 0, 0]))
s1.set_dimensions(0.50, 0.30)
s1.set_pixel_pitch(0.02)
red = (1, 0, 0)
s1.set_color(red)
s1.curvature_radius = 1.800
s1.update()
s1.rotate_x(np.deg2rad(-190.))

#s1.rotate_y(deg2rad(-15.))

#%% Project screen points in image

# cam.set_world_position(-0.05, -0.05, -0.45)
cam.set_t(-0.05, -0.05, -0.45, 'world')
cam.rotate_x(np.deg2rad(+10.))
cam.rotate_y(np.deg2rad(-5.))
cam.rotate_z(np.deg2rad(-5.))
cam.set_P()
cam_points1 = np.array(cam.project(s1.get_points()))

#%% plot

# plot projection
plt.figure()
plt.plot(cam_points1[0], cam_points1[1], '.', color='r')
plt.xlim(0, 1280)
plt.ylim(0, 960)
plt.gca().invert_yaxis()
plt.show()
Example #11
0
class OptimalPointsSim(object):
    """ Class that defines and optimization to obtain optimal control points
  configurations for homography and plannar pose estimation. """
    def __init__(self):
        """ Definition of a simulated camera """
        self.cam = Camera()
        self.cam.set_K(fx=100, fy=100, cx=640, cy=480)
        self.cam.set_width_heigth(1280, 960)
        """ Initial camera pose looking stratight down into the plane model """
        self.cam.set_R_axisAngle(1.0, 0.0, 0.0, np.deg2rad(180))
        self.cam.set_t(0.0, 0.0, 1.5, frame='world')
        """ Plane for the control points """
        self.sph = Sphere(radius=0.5)
        self.sph.random_points(p=6, r=0.5, min_dist=0.001)

    def run(self):
        self.objectPoints = self.sph.get_sphere_points()
        self.init_params = flatten_points(self.objectPoints, type='object')

        self.objective1 = lambda params: matrix_condition_number_autograd(
            params, self.cam.P, normalize=False)
        self.objective2 = lambda params, iter: matrix_condition_number_autograd(
            params, self.cam.P, normalize=True)

        print("Optimizing condition number...")
        objective_grad = grad(self.objective2)
        self.optimized_params = adam(objective_grad,
                                     self.init_params,
                                     step_size=0.001,
                                     num_iters=200,
                                     callback=self.plot_points)

    def plot_points(self, params, iter, gradient):
        phisim = np.linspace((-math.pi) / 2., (math.pi / 2.))
        thetasim = np.linspace(0, 2 * np.pi)
        print params
        pointscoord = np.full((3, 6), 0.0)

        for i in range(6):

            pointscoord[0, i] = params[i]
            pointscoord[1, i] = params[i + 1]
            pointscoord[2, i] = params[i + 2]

        x = np.outer(np.sin(thetasim), np.cos(phisim))
        y = np.outer(np.sin(thetasim), np.sin(phisim))
        z = np.outer(np.cos(thetasim), np.ones_like(phisim))
        fig, ax = plt.subplots(subplot_kw={'projection': '3d'})
        ax.plot_wireframe(sph.radius * x,
                          sph.radius * y,
                          sph.radius * z,
                          color='g')
        ax.scatter(pointscoord[:3, 0],
                   pointscoord[:3, 1],
                   pointscoord[:3, 2],
                   c='r')
        ax.scatter(pointscoord[:3, 3],
                   pointscoord[:3, 4],
                   pointscoord[:3, 5],
                   c='r')
        plt.show()
Example #12
0
#s1.rotate_y(deg2rad(-15.))

#%% configure the different views

cam_positions = []
cam_orientations = []

cam_positions.append(-np.array([0., 0., 0.4, 1]).T)
cam_positions.append(-np.array([0., -0.1, 0.7, 1]).T)
cam_positions.append(-np.array([0., 0.1, 0.7, 1]).T)

#%% Project screen points in image

# cam.set_world_position(-0.05, -0.05, -0.45)
cam.set_t(-0.05, -0.05, -0.45, 'world')
cam.rotate_x(np.deg2rad(+10.))
cam.rotate_y(np.deg2rad(-5.))
cam.rotate_z(np.deg2rad(-5.))
cam.set_P()
cam_points1 = np.array(cam.project(s1.get_points()))

#%%
# cam.set_world_position(-0.2, -0.05, -0.4)
cam.set_t(-0.2, -0.05, -0.4, 'world')
cam.rotate_y(np.deg2rad(-20.))
cam.set_P()
cam_points2 = np.array(cam.project(s1.get_points()))

#%%
# cam.set_world_position(0.2, -0.05, -0.5)
Example #13
0
            List of objects of the type Plane
    Returns
    -------
    None
    """
    # mlab.figure(figure=None, bgcolor=(0.1,0.5,0.5), fgcolor=None,
    #              engine=None, size=(400, 350))
    axis_scale = 0.05
    for cam in cams:
        plot3D_cam(cam, axis_scale)
    for fiducial_space in planes:
        # Plot plane points in 3D
        plotPoints3D(fiducial_space)


display_figure()
cam = Camera()
cam.set_K(fx=100, fy=100, cx=640, cy=480)
cam.set_width_heigth(1280, 960)
""" Initial camera pose looking straight down into the plane model """
cam.set_R_axisAngle(1.0, 0.0, 0.0, np.deg2rad(180))
cam.set_t(0.0, 0.0, 1.5, frame='world')
""" Plane for the control points """
sph = Sphere(2)
sph.set_color((1, 1, 0))
sph.random_points(3000, 0.3, 0.0001)
""" Plot camera axis and plane """
cams = [cam]
planes = [sph]
plot3D(cams, planes)
    import gdescent.hpoints_gradient as gd
elif number_of_points == 5:
    import gdescent.hpoints_gradient5 as gd
elif number_of_points == 6:
    import gdescent.hpoints_gradient6 as gd



## CREATE A SIMULATED CAMERA
cam = Camera()
cam.set_K(fx = 800,fy = 800,cx = 640,cy = 480)
cam.set_width_heigth(960,960)

## DEFINE CAMERA POSE LOOKING STRAIGTH DOWN INTO THE PLANE MODEL
cam.set_R_axisAngle(1.0,  0.0,  0.0, np.deg2rad(180.0))
cam.set_t(0.0,-0.0,0.3, frame='world')

#cam.set_R_axisAngle(1.0,  0.0,  0.0, np.deg2rad(140.0))
#cam.set_t(0.0,-1,1.0, frame='world')
#
r = 0.5
angle = 10
x = r*np.cos(np.deg2rad(angle))
z = r*np.sin(np.deg2rad(angle))
cam.set_t(0, x,z)
cam.set_R_mat(R_matrix_from_euler_t(0.0,0,0))
cam.look_at([0,0,0])

cam.set_R_axisAngle(1.0,  0.0,  0.0, np.deg2rad(110.0))
cam.set_t(0.0,-0.3,0.1, frame='world')
Example #15
0
from matplotlib import pyplot as plt

#%%
# load points
points = np.loadtxt('house.p3d').T
points = np.vstack((points, np.ones(points.shape[1])))

#%%
# setup camera
#P = hstack((eye(3),array([[0],[0],[-10]])))
cam = Camera()
## Test matrix functions
cam.set_K(1460, 1460, 608, 480)
cam.set_width_heigth(1280, 960)  #TODO Yue
# cam.set_R(0.0,  0.0,  1.0, 0.0)
cam.set_t(0.0, 0.0, -8.0)
cam.set_R_axisAngle(1.0, 0.0, 0.0, np.deg2rad(140.0))  #TODO Yue
cam.set_P()
print(cam.factor())

#%%

x = np.array(cam.project(points))

#%%
# plot projection
plt.figure()
plt.plot(x[0], x[1], 'k.')
plt.xlim(0, 1280)
plt.ylim(0, 960)
plt.show()
Example #16
0
#Define a set of angles and a distance
r = 0.8
angles = np.arange(90, 91, 20)

#START OF THE MAIN LOOP

#List with the results for each camera pose
DataSim = []

for angle in angles:
    #Move the camera to the next pose
    x = r * np.cos(np.deg2rad(angle))
    y = 0
    z = r * np.sin(np.deg2rad(angle))
    cam.set_t(x, y, z)
    cam.set_R_mat(R_matrix_from_euler_t(0.0, 0, 0))
    cam.look_at([0, 0, 0])

    #Dictionary with all the important information for one pose
    DataSinglePose = {}
    DataSinglePose['Angle'] = angle
    DataSinglePose['Camera'] = cam.clone()
    DataSinglePose['Iters'] = []
    DataSinglePose['ObjectPoints'] = []
    DataSinglePose['ImagePoints'] = []
    DataSinglePose['CondNumber'] = []

    objectPoints_iter = np.copy(objectPoints_start)
    imagePoints_iter = np.array(cam.project(objectPoints_iter, False))
Example #17
0
    import gdescent.hpoints_gradient5 as gd
elif number_of_points == 6:
    import gdescent.hpoints_gradient6 as gd

## Define a Display plane with random initial points
pl = CircularPlane()
pl.random(n=number_of_points, r=0.01, min_sep=0.01)

## CREATE A SIMULATED CAMERA
cam = Camera()
cam.set_K(fx=800, fy=800, cx=640 / 2., cy=480 / 2.)
cam.set_width_heigth(640, 480)

## DEFINE CAMERA POSE LOOKING STRAIGTH DOWN INTO THE PLANE MODEL
cam.set_R_axisAngle(1.0, 0.0, 0.0, np.deg2rad(180.0))
cam.set_t(0.0, -0.0, 0.5, frame='world')

#cam.set_R_axisAngle(1.0,  0.0,  0.0, np.deg2rad(140.0))
#cam.set_t(0.0,-1,1.0, frame='world')
#
r = 0.8
angle = 30
x = r * np.cos(np.deg2rad(angle))
z = r * np.sin(np.deg2rad(angle))
cam.set_t(0, x, z)
cam.set_R_mat(R_matrix_from_euler_t(0.0, 0, 0))
cam.look_at([0, 0, 0])

#cam.set_R_axisAngle(1.0,  0.0,  0.0, np.deg2rad(110.0))
#cam.set_t(0.0,-0.3,0.1, frame='world')
Example #18
0
#=============================Code End=========================================

#=============================Test=============================================

#-----------------------------covariance_f-------------------------------------
# var_cov = np.array([[4,0],[0,5]])
# A = np.array([[1,2],[3,4]])
# print covariance_f(var_cov,A)
# theta,vec= np.linalg.eig(covariance_f(var_cov,A)) # eigenvalues of covariance matrix
# print theta

#-----------------------------nonlinear_covariance_f_obj_to_image------------------------------------------------
cam = Camera()
cam.set_K(fx=800, fy=800, cx=640 / 2., cy=480 / 2.)
cam.set_width_heigth(640, 480)
cam.set_R_mat(
    Rt_matrix_from_euler_t.R_matrix_from_euler_t(0, np.deg2rad(180), 0))
cam.set_t(0., 0., 1., 'world')
print "P", cam.P
covariance_alpha_belt_r = np.array([[1, 0, 0], [0, 2, 0], [0, 0, 3]])
# theta,vec= np.linalg.eig(covariance_alpha_belt_r) # eigenvalues of covariance matrix
# print "theta",theta
print nonlinear_covariance_f_obj_to_image(cam, covariance_alpha_belt_r)
A = np.array([[322732.6464, 245645.0048],
              [245645.0048, 187829.2736]])  # [[1,0,0],[0,2,0],[0,0,3]]
A = np.array([[544215.8592, 415352.9344],
              [415352.9344, 318705.7408]])  # [[3,0,0],[0,4,0],[0,0,5]]
theta, vec = np.linalg.eig(A)  # eigenvalues of covariance matrix
print theta
# We can find that, bigger eigenvalue of covariance_alpha_belt_r -> bigger eigenvalue of nonlinear_covariance_f_obj_to_image