camera¶
-
class
camera.Camera(id=None)¶ - Projective camera model
- camera intrinsic and extrinsic parameters handling
- various lens distortion models
- model persistence
- projection of camera coordinates to an image
- conversion of image coordinates on a plane to camera coordinates
- visibility handling
-
distort(undistorted_image_coords, Kundistortion=None)¶ Apply distortion to ideal image coordinates.
Parameters: - undistorted_image_coords (numpy.ndarray, shape=(2, n)) – ideal image coordinates
- Kundistortion (array-like, shape=(3, 3)) – camera matrix for undistorted coordinates, None for self.K
Returns: distorted image coordinates
Return type: numpy.ndarray, shape=(2, n)
-
get_A(K=None)¶ Return part of K matrix that applies center, skew and aspect ratio to ideal image coordinates.
Return type: np.ndarray, shape=(3, 3)
-
get_K_0()¶ Return ideal calibration matrix (only focal length present).
Returns: ideal calibration matrix Return type: np.ndarray, shape=(3, 3)
-
get_camera_center()¶ Returns camera center in the world coordinates.
Returns: camera center in projective coordinates Return type: np.ndarray, shape=(4, 1)
-
get_focal_length()¶ Get camera focal length.
Returns: focal length Return type: double
-
get_principal_point_px()¶ Get camera principal point.
Returns: x and y pixel coordinates Return type: numpy.ndarray, shape=(1, 2)
-
get_view_matrix(alpha)¶ Returns camera matrix for handling image and coordinates distortion and undistortion. Based on alpha, up to all pixels of the distorted image can be visible in the undistorted image.
Parameters: alpha (float or None) – Free scaling parameter between 0 (when all the pixels in the undistorted image are valid) and 1 (when all the source image pixels are retained in the undistorted image). For convenience for -1 returns custom camera matrix self.Kundistortion and None returns self.K. Returns: camera matrix for a view defined by alpha Return type: array, shape=(3, 3)
-
get_z0_homography(K=None)¶ Return homography from world plane at z = 0 to image plane.
Returns: 2d plane homography Return type: np.ndarray, shape=(3, 3)
-
image_to_world(image_px, z)¶ Project image points with defined world z to world coordinates.
Parameters: - image_px (numpy.ndarray, shape=(2 or 3, n)) – image points
- z (float) – world z coordinate of the projected image points
Returns: n projective world coordinates
Return type: numpy.ndarray, shape=(3, n)
-
is_visible(xy_px)¶ Check visibility of image points.
Parameters: xy_px (np.ndarray, shape=(2, n)) – image point(s) Returns: visibility of image points Return type: numpy.ndarray, shape=(1, n), dtype=bool
-
is_visible_world(world)¶ Check visibility of world points.
Parameters: world (numpy.ndarray, shape=(3, n)) – world points Returns: visibility of world points Return type: numpy.ndarray, shape=(1, n), dtype=bool
-
load(filename)¶ Load camera model from a YAML file.
Example:
calibration_type: standard K: - [1225.2, -7.502186291576686e-14, 480.0] - [0.0, 1225.2, 384.0] - [0.0, 0.0, 1.0] R: - [-0.9316877145365, -0.3608289515885, 0.002545329627547] - [-0.1725273110187, 0.4247524018287, -0.8888909933995] - [0.3296724908378, -0.8263880720441, -0.4579894432589] id: 0 kappa: [0.0, 0.0] size_px: [960, 768] t: - [-1.365061486465] - [3.431608806127] - [17.74182159488]
-
plot_world_points(points, plot_style, label=None, solve_visibility=True)¶ Plot world points to a matplotlib figure.
Parameters: - points (numpy.ndarray, shape=(3 or 4, n) or list of lists) – world points (projective or euclidean)
- plot_style (str) – matplotlib point and line style code, e.g. ‘ro’
- label (str) – label plotted under points mean
- solve_visibility (bool) – if true then plot only if all points are visible
-
save(filename)¶ Save camera model to a YAML file.
-
set_K(K)¶ Set K and update P.
Parameters: K (numpy.ndarray, shape=(3, 3)) – intrinsic camera parameters
-
set_K_elements(u0_px, v0_px, f=1, theta_rad=1.5707963267948966, a=1)¶ Update pinhole camera intrinsic parameters and updates P matrix.
Parameters: - u0_px (double) – principal point x position (pixels)
- v0_px (double) – principal point y position (pixels)
- f (double) – focal length
- theta_rad (double) – digitization raster skew (radians)
- a (double) – pixel aspect ratio
-
set_R(R)¶ Set camera extrinsic parameters and updates P.
Parameters: R (numpy.ndarray, shape=(3, 3)) – camera extrinsic parameters matrix
-
set_R_euler_angles(angles)¶ Set rotation matrix according to euler angles and updates P.
Parameters: angles (double sequence, len=3) – 3 euler angles in radians,
-
set_t(t)¶ Set camera translation and updates P.
Parameters: t (numpy.ndarray, shape=(3, 1)) – camera translation vector
-
undistort(distorted_image_coords, Kundistortion=None)¶ Remove distortion from image coordinates.
Parameters: - distorted_image_coords (numpy.ndarray, shape=(2, n)) – real image coordinates
- Kundistortion (array-like, shape=(3, 3)) – camera matrix for undistorted view, None for self.K
Returns: linear image coordinates
Return type: numpy.ndarray, shape=(2, n)
-
undistort_image(img, Kundistortion=None)¶ Transform grayscale image such that radial distortion is removed.
Parameters: - img (np.ndarray, shape=(n, m) or (n, m, 3)) – input image
- Kundistortion (array-like, shape=(3, 3)) – camera matrix for undistorted view, None for self.K
Returns: transformed image
Return type: np.ndarray, shape=(n, m) or (n, m, 3)
-
update_P()¶ Update camera P matrix from K, R and t.
-
world_to_image(world)¶ Project world coordinates to image coordinates.
Parameters: world (numpy.ndarray, shape=(3 or 4, n)) – world points in 3d projective or euclidean coordinates Returns: projective image coordinates Return type: numpy.ndarray, shape=(3, n)
-
camera.calibrate_division_model(line_coordinates, y0, z_n, focal_length=1)¶ Calibrate division model by making lines straight.
Parameters: - line_coordinates (np.ndarray, shape=(nlines, npoints_per_line, 2)) – coordinates of points on lines
- y0 (array-like, len=2) – radial distortion center xy coordinates
- z_n (float) – distance to boundary (pincushion: image width / 2, barrel: image diagonal / 2)
- focal_length (float) – focal length of the camera (optional)
Returns: Camera object with calibrated division model parameter lambda
Return type:
-
camera.column(vector)¶ Return column vector.
Parameters: vector – np.ndarray Returns: column vector Return type: np.ndarray, shape=(n, 1)
-
camera.e2p(euclidean)¶ Convert 2d or 3d euclidean to projective coordinates.
Parameters: euclidean (numpy.ndarray, shape=(2 or 3, n)) – projective coordinate(s) Returns: projective coordinate(s) Return type: numpy.ndarray, shape=(3 or 4, n)
-
camera.fit_line(xy)¶ Fit line to points.
Parameters: xy (np.ndarray, shape=(2, n)) – point coordinates Returns: line parameters [m, c] Rtype mc: array like
-
camera.line_point_distance(xy, mc)¶ Distance from point(s) to line.
Parameters: - xy (np.ndarray, shape=(2, n)) – point coordinates
- mc (array like) – line parameters [m, c]
Returns: distance(s)
Return type: np.ndarray, shape=(n,)
-
camera.nearest_point_on_line(xy, mc)¶ Nearest point(s) to line.
Parameters: - xy (np.ndarray, shape=(2, n)) – point coordinates
- mc (array like) – line parameters [m, c]
Returns: point(s) on line
Return type: np.ndarray, shape=(2, n)
-
camera.nview_linear_triangulation(cameras, correspondences)¶ Computes ONE world coordinate from image correspondences in n views.
Parameters: - cameras (sequence of Camera objects) – pinhole models of cameras corresponding to views
- correspondences (numpy.ndarray, shape=(2, n)) – image coordinates correspondences in n views
Returns: world coordinate
Return type: numpy.ndarray, shape=(3, 1)
-
camera.nview_linear_triangulations(cameras, image_points)¶ Computes world coordinates from image correspondences in n views.
Parameters: - cameras (sequence of Camera objects) – pinhole models of cameras corresponding to views
- image_points (sequence of m numpy.ndarray, shape=(2, n)) – image coordinates of m correspondences in n views
Returns: m world coordinates
Return type: numpy.ndarray, shape=(3, m)
-
camera.p2e(projective)¶ Convert 2d or 3d projective to euclidean coordinates.
Parameters: projective (numpy.ndarray, shape=(3 or 4, n)) – projective coordinate(s) Returns: euclidean coordinate(s) Return type: numpy.ndarray, shape=(2 or 3, n)