pysdic.Camera.project#
- Camera.project(world_points, dx=False, dintrinsic=False, ddistortion=False, dextrinsic=False)[source]#
Project 3D world points to 2D images points using the camera’s intrinsic, extrinsic, and distortion parameters.
Note
The output are the
image_pointsin the image coordinate system \((x, y)\) and not the pixel points (rows, columns).See also
image_points_to_pixel_points()to convert the image points to pixel points if needed.See the package
pycvcam(Artezaru/pycvcam) for more information on the implementation details.ProjectionResultfor the structure of the output.
- Parameters:
world_points (numpy.ndarray) – An array of shape (…, 3) representing \(N_p\) 3D points in the world coordinate system.
dx (
bool, optional) – IfTrue, the function will also return the jacobian of the image points with respect to the world points. Default isFalse.dintrinsic (
bool, optional) – IfTrue, the function will also return the jacobian of the image points with respect to the intrinsic parameters. Default isFalse.ddistortion (
bool, optional) – IfTrue, the function will also return the jacobian of the image points with respect to the distortion parameters. Default isFalse.dextrinsic (
bool, optional) – IfTrue, the function will also return the jacobian of the image points with respect to the extrinsic parameters. Default isFalse.
- Returns:
A
ProjectionResultobject containing the projected image points and optionally the jacobians.image_points: An array of shape (…, 2) representing the projected images points in the image coordinate system \((x, y)\).
jacobian_dx: (optional) An array of shape (…, 2, 3) representing the jacobian of the normalized points with respect to the world points if
dxis True.jacobian_dintrinsic: (optional) An array of shape (…, 2, \(N_{\text{intrinsic}}\)) representing the jacobian of the pixel points with respect to the intrinsic parameters if
dintrinsicis True.jacobian_ddistortion: (optional) An array of shape (…, 2, \(N_{\text{distortion}}\)) representing the jacobian of the pixel points with respect to the distortion parameters if
ddistortionis True.jacobian_dextrinsic: (optional) An array of shape (…, 2, \(N_{\text{extrinsic}}\)) representing the jacobian of the pixel points with respect to the extrinsic parameters if
dextrinsicis True.
- Return type:
Examples
Lets create a simple camera and project some 3D points:
import numpy from pysdic import Camera from pycvcam import Cv2Extrinsic, Cv2Intrinsic rotation_vector = numpy.array([0.1, 0.2, 0.3]) translation_vector = numpy.array([12.0, 34.0, 56.0]) extrinsic = Cv2Extrinsic.from_rt(rotation_vector, translation_vector) intrinsic = Cv2Intrinsic.from_matrix( numpy.array([[1000, 0, 320], [0, 1000, 240], [0, 0, 1]]) ) camera = Camera( sensor_height=480, sensor_width=640, intrinsic=intrinsic, extrinsic=extrinsic, ) # Define some 3D world points world_points = numpy.array([ [0, 0, 1000], [100, 0, 1000], [0, 100, 1000], [100, 100, 1000] ]) # Project the 3D points to 2D image points projection_result = camera.project(world_points, dx=True, dintrinsic=True, dextrinsic=True)
Extracting the projected image points and jacobians:
image_points = projection_result.image_points # The projected 2D image points of shape (4, 2) jacobian_dx = projection_result.jacobian_dx # The jacobian with respect to the world points of shape (4, 2, 3) jacobian_dintrinsic = projection_result.jacobian_dintrinsic # The jacobian with respect to the intrinsic parameters of shape (4, 2, 4) jacobian_dextrinsic = projection_result.jacobian_dextrinsic # The jacobian with respect to the extrinsic parameters of shape (4, 2, 6)