Skip to content

get_line_of_sightGetLineOfSightGetLineOfSightget_line_of_sightT_get_line_of_sight🔗

Short description🔗

get_line_of_sightGetLineOfSightGetLineOfSightget_line_of_sightT_get_line_of_sight — Compute the line of sight corresponding to a point in the image.

Signature🔗

get_line_of_sight( real Row, real Column, campar CameraParam, out real PX, out real PY, out real PZ, out real QX, out real QY, out real QZ )void GetLineOfSight( const HTuple& Row, const HTuple& Column, const HTuple& CameraParam, HTuple* PX, HTuple* PY, HTuple* PZ, HTuple* QX, HTuple* QY, HTuple* QZ )static void HOperatorSet.GetLineOfSight( HTuple row, HTuple column, HTuple cameraParam, out HTuple PX, out HTuple PY, out HTuple PZ, out HTuple QX, out HTuple QY, out HTuple QZ )def get_line_of_sight( row: Sequence[float], column: Sequence[float], camera_param: Sequence[Union[int, float, str]] ) -> Tuple[Sequence[float], Sequence[float], Sequence[float], Sequence[float], Sequence[float], Sequence[float]]

Herror T_get_line_of_sight( const Htuple Row, const Htuple Column, const Htuple CameraParam, Htuple* PX, Htuple* PY, Htuple* PZ, Htuple* QX, Htuple* QY, Htuple* QZ )

void HCamPar::GetLineOfSight( const HTuple& Row, const HTuple& Column, HTuple* PX, HTuple* PY, HTuple* PZ, HTuple* QX, HTuple* QY, HTuple* QZ ) const

void HCamPar.GetLineOfSight( HTuple row, HTuple column, out HTuple PX, out HTuple PY, out HTuple PZ, out HTuple QX, out HTuple QY, out HTuple QZ )

Description🔗

get_line_of_sightGetLineOfSight computes the line of sight corresponding to a pixel (Rowrowrow, Columncolumncolumn) in the image. The line of sight is a (straight) line in the camera coordinate system, which is described by two points (PXPXpx,PYPYpy,PZPZpz) and (QXQXqx,QYQYqy,QZQZqz) on the line. The camera is described by the internal camera parameters CameraParamcameraParamcamera_param (see Calibration for details). If a pinhole camera is used, the second point lies on the focal plane, i.e., for frame cameras, the output parameter QZQZqz is equivalent to the focal length of the camera, whereas for linescan cameras, QZQZqz also depends on the motion of the camera with respect to the object. The equation of the line of sight is given by

\[\begin{eqnarray*} \mvVectorThreeD{X}{Y}{Z} = \mvVectorThreeD{\textrm{PX}}{\textrm{PY}}{\textrm{PZ}} + l \cdot \mvVectorThreeD{\textrm{QX} - \textrm{PX}}{ \textrm{QY} - \textrm{PY}}{ \textrm{QZ} - \textrm{PZ}} \end{eqnarray*}\]

The advantage of representing the line of sight as two points is that it is easier to transform the line in 3D. To do so, all that is necessary is to apply the operator affine_trans_point_3dAffineTransPoint3d to the two points.

Execution information🔗

Execution information
  • Multithreading type: reentrant (runs in parallel with non-exclusive operators).

  • Multithreading scope: global (may be called from any thread).

  • Automatically parallelized on internal data level.

Parameters🔗

Rowrowrow (input_control) real-array → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Row coordinate of the pixel.

Columncolumncolumn (input_control) real-array → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Column coordinate of the pixel.

CameraParamcameraParamcamera_param (input_control) campar → (real / integer / string)HTuple (double / Hlong / HString)HCamPar, HTuple (double / int / long / string)Sequence[Union[int, float, str]]Htuple (double / Hlong / char*)

Internal camera parameters.

PXPXpx (output_control) real-array → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

X coordinate of the first point on the line of sight in the camera coordinate system

PYPYpy (output_control) real-array → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Y coordinate of the first point on the line of sight in the camera coordinate system

PZPZpz (output_control) real-array → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Z coordinate of the first point on the line of sight in the camera coordinate system

QXQXqx (output_control) real-array → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

X coordinate of the second point on the line of sight in the camera coordinate system

QYQYqy (output_control) real-array → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Y coordinate of the second point on the line of sight in the camera coordinate system

QZQZqz (output_control) real-array → (real)HTuple (double)HTuple (double)Sequence[float]Htuple (double)

Z coordinate of the second point on the line of sight in the camera coordinate system

Example🔗

(HDevelop)


* Set internal camera parameters.
* Note the, typically, these values are the result of a prior
* calibration.
gen_cam_par_area_scan_division (0.01, 30, 4.65e-006, 4.65e-006, \
                                640, 480, 1280, 960, CameraParam)
* Inverse projection.
get_line_of_sight([50, 100], [100, 200], CameraParam, PX, PY, PZ, QX, QY, QZ)
(C++)
HTuple CameraParam, Row, Column, PX, PY, PZ, QX, QY, QZ\;
// Set internal camera parameters.
// Note the, typically, these values are the result of a prior
// calibration.
gen_cam_par_area_scan_division (0.01, 30, 4.65e-006, 4.65e-006,
                                640, 480, 1280, 960, &CameraParam)\;
// Inverse projection.
Row[1] = 100\;
Row[0] = 50\;
Column[1] = 200\;
Column[0] = 100\;
get_line_of_sight(Row, Column, CameraParam, &PX, &PY, &PZ, &QX, &QY, &QZ)\;

Result🔗

get_line_of_sightGetLineOfSight returns 2 (H_MSG_TRUE) if all parameter values are correct. If necessary, an exception is raised.

Combinations with other operators🔗

Combinations

Possible predecessors

read_cam_parReadCamPar, camera_calibrationCameraCalibration

Possible successors

affine_trans_point_3dAffineTransPoint3d

See also

camera_calibrationCameraCalibration, disp_caltabDispCaltab, read_cam_parReadCamPar, project_3d_pointProject3dPoint, affine_trans_point_3dAffineTransPoint3d

Module🔗

Calibration