| Pinhole Camera |
| -------------- |
|
|
| .. currentmodule:: kornia.geometry.camera.pinhole |
|
|
| In this module we have all the functions and data structures needed to describe the projection of a 3D scene space onto a 2D image plane. |
|
|
| In computer vision, we can map between the 3D world and a 2D image using *projective geometry*. The module implements the simplest camera model, the **Pinhole Camera**, which is the most basic model for general projective cameras from the finite cameras group. |
|
|
| The Pinhole Camera model is shown in the following figure: |
|
|
| .. image:: data/pinhole_model.png |
|
|
| Using this model, a scene view can be formed by projecting 3D points into the image plane using a perspective transformation. |
|
|
| .. math:: |
| s \; m' = K [R|t] M' |
|
|
| or |
|
|
| .. math:: |
| s \begin{bmatrix} u \\ v \\ 1\end{bmatrix} = |
| \begin{bmatrix} |
| f_x & 0 & u_0 \\ |
| 0 & f_y & v_0 \\ |
| 0 & 0 & 1 |
| \end{bmatrix} |
| \begin{bmatrix} |
| r_{11} & r_{12} & r_{13} & t_1 \\ |
| r_{21} & r_{22} & r_{23} & t_2 \\ |
| r_{31} & r_{32} & r_{33} & t_3 |
| \end{bmatrix} |
| \begin{bmatrix} |
| X \\ |
| Y \\ |
| Z \\ |
| 1 |
| \end{bmatrix} |
|
|
| where: |
| * :math:`M'` is a 3D point in space with coordinates :math:`[X,Y,Z]^T` expressed in an Euclidean coordinate frame known as the *world coordinate system*. |
| * :math:`m'` is the projection of the 3D point :math:`M'` onto the *image plane* with coordinates :math:`[u,v]^T` expressed in pixel units. |
| * :math:`K` is the *camera calibration matrix*, also referred as the intrinsic matrix. |
| * :math:`C` is the *principal point offset* with coordinates :math:`[u_0, v_0]^T` at the origin in the image plane. |
| * :math:`fx, fy` are the focal lengths expressed in pixel units. |
|
|
| The camera rotation and translation are expressed in terms of an Euclidean coordinate frame known as the *world coordinate system*. These terms are usually expressed by the joint rotation-translation matrix :math:`[R|t]` which is also known as the extrinsic matrix. It is used to describe the camera pose around a static scene and transforms the coordinates of a 3D point :math:`(X,Y,Z)` from the *world coordinate system* to the *camera coordinate system*. |
|
|
| The :class:`PinholeCamera` expects the *intrinsic matrices* and the *extrinsic matrices* |
| to be of shape `(B, 4, 4)` such that each *intrinsic matrix* has the following format: |
|
|
| .. math:: |
| \begin{bmatrix} |
| f_x & 0 & u_0 & 0\\ |
| 0 & f_y & v_0 & 0\\ |
| 0 & 0 & 1 & 0 \\ |
| 0 & 0 & 0 & 1 |
| \end{bmatrix} |
|
|
| And each *extrinsic matrix* has the following format: |
|
|
| .. math:: |
| \begin{bmatrix} |
| r_{11} & r_{12} & r_{13} & t_1 \\ |
| r_{21} & r_{22} & r_{23} & t_2 \\ |
| r_{31} & r_{32} & r_{33} & t_3 \\ |
| 0 & 0 & 0 & 1 |
| \end{bmatrix} |
|
|
|
|
| .. autoclass:: PinholeCamera |
| :members: |
|
|
| .. autofunction:: cam2pixel |
| .. autofunction:: pixel2cam |
|
|