887accd95cc412ac9bfae989ea794261b43343c4
[profile/ivi/opencv.git] / modules / calib3d / doc / camera_calibration_and_3d_reconstruction.rst
1 Camera Calibration and 3D Reconstruction
2 ========================================
3
4 .. highlight:: cpp
5
6 The functions in this section use a so-called pinhole camera model. In this model, a scene view is formed by projecting 3D points into the image plane
7 using a perspective transformation.
8
9 .. math::
10
11     s  \; m' = A [R|t] M'
12
13 or
14
15 .. math::
16
17     s  \vecthree{u}{v}{1} = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}
18     \begin{bmatrix}
19     r_{11} & r_{12} & r_{13} & t_1  \\
20     r_{21} & r_{22} & r_{23} & t_2  \\
21     r_{31} & r_{32} & r_{33} & t_3
22     \end{bmatrix}
23     \begin{bmatrix}
24     X \\
25     Y \\
26     Z \\
27     1
28     \end{bmatrix}
29
30 where:
31
32    * :math:`(X, Y, Z)` are the coordinates of a 3D point in the world coordinate space
33    * :math:`(u, v)` are the coordinates of the projection point in pixels
34    * :math:`A` is a camera matrix, or a matrix of intrinsic parameters
35    * :math:`(cx, cy)` is a principal point that is usually at the image center
36    * :math:`fx, fy` are the focal lengths expressed in pixel units.
37
38
39 Thus, if an image from the camera is
40 scaled by a factor, all of these parameters should
41 be scaled (multiplied/divided, respectively) by the same factor. The
42 matrix of intrinsic parameters does not depend on the scene viewed. So,
43 once estimated, it can be re-used as long as the focal length is fixed (in
44 case of zoom lens). The joint rotation-translation matrix
45 :math:`[R|t]` is called a matrix of extrinsic parameters. It is used to describe the
46 camera motion around a static scene, or vice versa, rigid motion of an
47 object in front of a still camera. That is,
48 :math:`[R|t]` translates
49 coordinates of a point
50 :math:`(X, Y, Z)` to a coordinate system,
51 fixed with respect to the camera. The transformation above is equivalent
52 to the following (when
53 :math:`z \ne 0` ):
54
55 .. math::
56
57     \begin{array}{l}
58     \vecthree{x}{y}{z} = R  \vecthree{X}{Y}{Z} + t \\
59     x' = x/z \\
60     y' = y/z \\
61     u = f_x*x' + c_x \\
62     v = f_y*y' + c_y
63     \end{array}
64
65 Real lenses usually have some distortion, mostly
66 radial distortion and slight tangential distortion. So, the above model
67 is extended as:
68
69 .. math::
70
71     \begin{array}{l} \vecthree{x}{y}{z} = R  \vecthree{X}{Y}{Z} + t \\ x' = x/z \\ y' = y/z \\ x'' = x'  \frac{1 + k_1 r^2 + k_2 r^4 + k_3 r^6}{1 + k_4 r^2 + k_5 r^4 + k_6 r^6} + 2 p_1 x' y' + p_2(r^2 + 2 x'^2)  \\ y'' = y'  \frac{1 + k_1 r^2 + k_2 r^4 + k_3 r^6}{1 + k_4 r^2 + k_5 r^4 + k_6 r^6} + p_1 (r^2 + 2 y'^2) + 2 p_2 x' y'  \\ \text{where} \quad r^2 = x'^2 + y'^2  \\ u = f_x*x'' + c_x \\ v = f_y*y'' + c_y \end{array}
72
73 :math:`k_1`,
74 :math:`k_2`,
75 :math:`k_3`,
76 :math:`k_4`,
77 :math:`k_5`, and
78 :math:`k_6` are radial distortion coefficients.
79 :math:`p_1` and
80 :math:`p_2` are tangential distortion coefficients.
81 Higher-order coefficients are not considered in OpenCV. In the functions below the coefficients are passed or returned as
82
83 .. math::
84
85     (k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6]])
86
87 vector. That is, if the vector contains four elements, it means that
88 :math:`k_3=0` .
89 The distortion coefficients do not depend on the scene viewed. Thus, they also belong to the intrinsic camera parameters. And they remain the same regardless of the captured image resolution.
90 If, for example, a camera has been calibrated on images of
91 ``320 x 240`` resolution, absolutely the same distortion coefficients can
92 be used for ``640 x 480`` images from the same camera while
93 :math:`f_x`,
94 :math:`f_y`,
95 :math:`c_x`, and
96 :math:`c_y` need to be scaled appropriately.
97
98 The functions below use the above model to do the following:
99
100  * Project 3D points to the image plane given intrinsic and extrinsic parameters.
101
102  * Compute extrinsic parameters given intrinsic parameters, a few 3D points, and their projections.
103
104  * Estimate intrinsic and extrinsic camera parameters from several views of a known calibration pattern (every view is described by several 3D-2D point correspondences).
105
106  * Estimate the relative position and orientation of the stereo camera "heads" and compute the *rectification* transformation that makes the camera optical axes parallel.
107
108
109
110 calibrateCamera
111 ---------------
112 Finds the camera intrinsic and extrinsic parameters from several views of a calibration pattern.
113
114 .. ocv:function:: double calibrateCamera( InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, Size imageSize, InputOutputArray cameraMatrix, InputOutputArray distCoeffs, OutputArrayOfArrays rvecs, OutputArrayOfArrays tvecs, int flags=0, TermCriteria criteria=TermCriteria( TermCriteria::COUNT+TermCriteria::EPS, 30, DBL_EPSILON) )
115
116 .. ocv:pyfunction:: cv2.calibrateCamera(objectPoints, imagePoints, imageSize[, cameraMatrix[, distCoeffs[, rvecs[, tvecs[, flags[, criteria]]]]]]) -> retval, cameraMatrix, distCoeffs, rvecs, tvecs
117
118 .. ocv:cfunction:: double cvCalibrateCamera2( const CvMat* object_points, const CvMat* image_points, const CvMat* point_counts, CvSize image_size, CvMat* camera_matrix, CvMat* distortion_coeffs, CvMat* rotation_vectors=NULL, CvMat* translation_vectors=NULL, int flags=0, CvTermCriteria term_crit=cvTermCriteria( CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,30,DBL_EPSILON) )
119
120 .. ocv:pyoldfunction:: cv.CalibrateCamera2(objectPoints, imagePoints, pointCounts, imageSize, cameraMatrix, distCoeffs, rvecs, tvecs, flags=0)-> None
121
122     :param objectPoints: In the new interface it is a vector of vectors of calibration pattern points in the calibration pattern coordinate space. The outer vector contains as many elements as the number of the pattern views. If the same calibration pattern is shown in each view and it is fully visible, all the vectors will be the same. Although, it is possible to use partially occluded patterns, or even different patterns in different views. Then, the vectors will be different. The points are 3D, but since they are in a pattern coordinate system, then, if the rig is planar, it may make sense to put the model to a XY coordinate plane so that Z-coordinate of each input object point is 0.
123
124         In the old interface all the vectors of object points from different views are concatenated together.
125
126     :param imagePoints: In the new interface it is a vector of vectors of the projections of calibration pattern points. ``imagePoints.size()`` and ``objectPoints.size()`` and ``imagePoints[i].size()`` must be equal to ``objectPoints[i].size()`` for each ``i``.
127
128         In the old interface all the vectors of object points from different views are concatenated together.
129
130     :param point_counts: In the old interface this is a vector of integers, containing as many elements, as the number of views of the calibration pattern. Each element is the number of points in each view. Usually, all the elements are the same and equal to the number of feature points on the calibration pattern.
131
132     :param imageSize: Size of the image used only to initialize the intrinsic camera matrix.
133
134     :param cameraMatrix: Output 3x3 floating-point camera matrix  :math:`A = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{1}` . If  ``CV_CALIB_USE_INTRINSIC_GUESS``  and/or  ``CV_CALIB_FIX_ASPECT_RATIO``  are specified, some or all of  ``fx, fy, cx, cy``  must be initialized before calling the function.
135
136     :param distCoeffs: Output vector of distortion coefficients  :math:`(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6]])`  of 4, 5, or 8 elements.
137
138     :param rvecs: Output  vector  of rotation vectors (see  :ocv:func:`Rodrigues` ) estimated for each pattern view. That is, each k-th rotation vector together with the corresponding k-th translation vector (see the next output parameter description) brings the calibration pattern from the model coordinate space (in which object points are specified) to the world coordinate space, that is, a real position of the calibration pattern in the k-th pattern view (k=0.. *M* -1).
139
140     :param tvecs: Output vector of translation vectors estimated for each pattern view.
141
142     :param flags: Different flags that may be zero or a combination of the following values:
143
144             * **CV_CALIB_USE_INTRINSIC_GUESS** ``cameraMatrix``  contains valid initial values of  ``fx, fy, cx, cy``  that are optimized further. Otherwise, ``(cx, cy)``  is initially set to the image center ( ``imageSize``  is used), and focal distances are computed in a least-squares fashion. Note, that if intrinsic parameters are known, there is no need to use this function just to estimate extrinsic parameters. Use  :ocv:func:`solvePnP`  instead.
145
146             * **CV_CALIB_FIX_PRINCIPAL_POINT** The principal point is not changed during the global optimization. It stays at the center or at a different location specified when    ``CV_CALIB_USE_INTRINSIC_GUESS``  is set too.
147
148             * **CV_CALIB_FIX_ASPECT_RATIO** The functions considers only  ``fy``  as a free parameter. The ratio  ``fx/fy``  stays the same as in the input  ``cameraMatrix`` .   When  ``CV_CALIB_USE_INTRINSIC_GUESS``  is not set, the actual input values of  ``fx``  and  ``fy``  are ignored, only their ratio is computed and used further.
149
150             * **CV_CALIB_ZERO_TANGENT_DIST** Tangential distortion coefficients  :math:`(p_1, p_2)`  are set to zeros and stay zero.
151
152         * **CV_CALIB_FIX_K1,...,CV_CALIB_FIX_K6** The corresponding radial distortion coefficient is not changed during the optimization. If  ``CV_CALIB_USE_INTRINSIC_GUESS``  is set, the coefficient from the supplied  ``distCoeffs``  matrix is used. Otherwise, it is set to 0.
153
154         * **CV_CALIB_RATIONAL_MODEL** Coefficients k4, k5, and k6 are enabled. To provide the backward compatibility, this extra flag should be explicitly specified to make the calibration function use the rational model and return 8 coefficients. If the flag is not set, the function computes  and returns  only 5 distortion coefficients.
155
156     :param criteria: Termination criteria for the iterative optimization algorithm.
157
158     :param term_crit: same as ``criteria``.
159
160 The function estimates the intrinsic camera
161 parameters and extrinsic parameters for each of the views. The algorithm is based on [Zhang2000]_ and [BouguetMCT]_. The coordinates of 3D object points and their corresponding 2D projections
162 in each view must be specified. That may be achieved by using an
163 object with a known geometry and easily detectable feature points.
164 Such an object is called a calibration rig or calibration pattern,
165 and OpenCV has built-in support for a chessboard as a calibration
166 rig (see
167 :ocv:func:`findChessboardCorners` ). Currently, initialization
168 of intrinsic parameters (when ``CV_CALIB_USE_INTRINSIC_GUESS`` is not set) is only implemented for planar calibration patterns
169 (where Z-coordinates of the object points must be all zeros). 3D
170 calibration rigs can also be used as long as initial ``cameraMatrix`` is provided.
171
172 The algorithm performs the following steps:
173
174 #.
175     Compute the initial intrinsic parameters (the option only available for planar calibration patterns) or read them from the input parameters. The distortion coefficients are all set to zeros initially unless some of ``CV_CALIB_FIX_K?``     are specified.
176
177 #.
178     Estimate the initial camera pose as if the intrinsic parameters have been already known. This is done using
179     :ocv:func:`solvePnP` .
180 #.
181     Run the global Levenberg-Marquardt optimization algorithm to minimize the reprojection error, that is, the total sum of squared distances between the observed feature points ``imagePoints``     and the projected (using the current estimates for camera parameters and the poses) object points ``objectPoints``. See :ocv:func:`projectPoints` for details.
182
183 The function returns the final re-projection error.
184
185 .. note::
186
187     If you use a non-square (=non-NxN) grid and    :ocv:func:`findChessboardCorners` for calibration, and ``calibrateCamera`` returns bad values (zero distortion coefficients, an image center very far from ``(w/2-0.5,h/2-0.5)``, and/or large differences between :math:`f_x` and :math:`f_y` (ratios of 10:1 or more)), then you have probably used ``patternSize=cvSize(rows,cols)`` instead of using ``patternSize=cvSize(cols,rows)`` in :ocv:func:`findChessboardCorners` .
188
189 .. seealso::
190
191    :ocv:func:`findChessboardCorners`,
192    :ocv:func:`solvePnP`,
193    :ocv:func:`initCameraMatrix2D`,
194    :ocv:func:`stereoCalibrate`,
195    :ocv:func:`undistort`
196
197
198
199 calibrationMatrixValues
200 -----------------------
201 Computes useful camera characteristics from the camera matrix.
202
203 .. ocv:function:: void calibrationMatrixValues( InputArray cameraMatrix, Size imageSize, double apertureWidth, double apertureHeight, double& fovx, double& fovy, double& focalLength, Point2d& principalPoint, double& aspectRatio )
204
205 .. ocv:pyfunction:: cv2.calibrationMatrixValues(cameraMatrix, imageSize, apertureWidth, apertureHeight) -> fovx, fovy, focalLength, principalPoint, aspectRatio
206
207     :param cameraMatrix: Input camera matrix that can be estimated by  :ocv:func:`calibrateCamera`  or  :ocv:func:`stereoCalibrate` .
208
209     :param imageSize: Input image size in pixels.
210
211     :param apertureWidth: Physical width of the sensor.
212
213     :param apertureHeight: Physical height of the sensor.
214
215     :param fovx: Output field of view in degrees along the horizontal sensor axis.
216
217     :param fovy: Output field of view in degrees along the vertical sensor axis.
218
219     :param focalLength: Focal length of the lens in mm.
220
221     :param principalPoint: Principal point in pixels.
222
223     :param aspectRatio: :math:`f_y/f_x`
224
225 The function computes various useful camera characteristics from the previously estimated camera matrix.
226
227
228
229 composeRT
230 -------------
231 Combines two rotation-and-shift transformations.
232
233 .. ocv:function:: void composeRT( InputArray rvec1, InputArray tvec1, InputArray rvec2, InputArray tvec2, OutputArray rvec3, OutputArray tvec3, OutputArray dr3dr1=noArray(), OutputArray dr3dt1=noArray(), OutputArray dr3dr2=noArray(), OutputArray dr3dt2=noArray(), OutputArray dt3dr1=noArray(), OutputArray dt3dt1=noArray(), OutputArray dt3dr2=noArray(), OutputArray dt3dt2=noArray() )
234
235 .. ocv:pyfunction:: cv2.composeRT(rvec1, tvec1, rvec2, tvec2[, rvec3[, tvec3[, dr3dr1[, dr3dt1[, dr3dr2[, dr3dt2[, dt3dr1[, dt3dt1[, dt3dr2[, dt3dt2]]]]]]]]]]) -> rvec3, tvec3, dr3dr1, dr3dt1, dr3dr2, dr3dt2, dt3dr1, dt3dt1, dt3dr2, dt3dt2
236
237     :param rvec1: First rotation vector.
238
239     :param tvec1: First translation vector.
240
241     :param rvec2: Second rotation vector.
242
243     :param tvec2: Second translation vector.
244
245     :param rvec3: Output rotation vector of the superposition.
246
247     :param tvec3: Output translation vector of the superposition.
248
249     :param d*d*: Optional output derivatives of  ``rvec3``  or  ``tvec3``  with regard to  ``rvec1``, ``rvec2``, ``tvec1`` and ``tvec2``, respectively.
250
251 The functions compute:
252
253 .. math::
254
255     \begin{array}{l} \texttt{rvec3} =  \mathrm{rodrigues} ^{-1} \left ( \mathrm{rodrigues} ( \texttt{rvec2} )  \cdot \mathrm{rodrigues} ( \texttt{rvec1} ) \right )  \\ \texttt{tvec3} =  \mathrm{rodrigues} ( \texttt{rvec2} )  \cdot \texttt{tvec1} +  \texttt{tvec2} \end{array} ,
256
257 where :math:`\mathrm{rodrigues}` denotes a rotation vector to a rotation matrix transformation, and
258 :math:`\mathrm{rodrigues}^{-1}` denotes the inverse transformation. See :ocv:func:`Rodrigues` for details.
259
260 Also, the functions can compute the derivatives of the output vectors with regards to the input vectors (see :ocv:func:`matMulDeriv` ).
261 The functions are used inside :ocv:func:`stereoCalibrate` but can also be used in your own code where Levenberg-Marquardt or another gradient-based solver is used to optimize a function that contains a matrix multiplication.
262
263
264
265 computeCorrespondEpilines
266 -----------------------------
267 For points in an image of a stereo pair, computes the corresponding epilines in the other image.
268
269 .. ocv:function:: void computeCorrespondEpilines( InputArray points, int whichImage, InputArray F, OutputArray lines )
270
271 .. ocv:cfunction:: void cvComputeCorrespondEpilines( const CvMat* points, int which_image, const CvMat* fundamental_matrix, CvMat* correspondent_lines )
272
273 .. ocv:pyoldfunction:: cv.ComputeCorrespondEpilines(points, whichImage, F, lines) -> None
274
275     :param points: Input points.  :math:`N \times 1`  or  :math:`1 \times N`  matrix of type  ``CV_32FC2``  or  ``vector<Point2f>`` .
276
277     :param whichImage: Index of the image (1 or 2) that contains the  ``points`` .
278
279     :param F: Fundamental matrix that can be estimated using  :ocv:func:`findFundamentalMat`         or  :ocv:func:`stereoRectify` .
280
281     :param lines: Output vector of the epipolar lines corresponding to the points in the other image. Each line :math:`ax + by + c=0`  is encoded by 3 numbers  :math:`(a, b, c)` .
282
283 For every point in one of the two images of a stereo pair, the function finds the equation of the
284 corresponding epipolar line in the other image.
285
286 From the fundamental matrix definition (see
287 :ocv:func:`findFundamentalMat` ),
288 line
289 :math:`l^{(2)}_i` in the second image for the point
290 :math:`p^{(1)}_i` in the first image (when ``whichImage=1`` ) is computed as:
291
292 .. math::
293
294     l^{(2)}_i = F p^{(1)}_i
295
296 And vice versa, when ``whichImage=2``,
297 :math:`l^{(1)}_i` is computed from
298 :math:`p^{(2)}_i` as:
299
300 .. math::
301
302     l^{(1)}_i = F^T p^{(2)}_i
303
304 Line coefficients are defined up to a scale. They are normalized so that
305 :math:`a_i^2+b_i^2=1` .
306
307
308
309 convertPointsToHomogeneous
310 --------------------------
311 Converts points from Euclidean to homogeneous space.
312
313 .. ocv:function:: void convertPointsToHomogeneous( InputArray src, OutputArray dst )
314
315 .. ocv:pyfunction:: cv2.convertPointsToHomogeneous(src[, dst]) -> dst
316
317     :param src: Input vector of ``N``-dimensional points.
318
319     :param dst: Output vector of ``N+1``-dimensional points.
320
321 The function converts points from Euclidean to homogeneous space by appending 1's to the tuple of point coordinates. That is, each point ``(x1, x2, ..., xn)`` is converted to ``(x1, x2, ..., xn, 1)``.
322
323
324
325 convertPointsFromHomogeneous
326 ----------------------------
327 Converts points from homogeneous to Euclidean space.
328
329 .. ocv:function:: void convertPointsFromHomogeneous( InputArray src, OutputArray dst )
330
331 .. ocv:pyfunction:: cv2.convertPointsFromHomogeneous(src[, dst]) -> dst
332
333     :param src: Input vector of ``N``-dimensional points.
334
335     :param dst: Output vector of ``N-1``-dimensional points.
336
337 The function converts points homogeneous to Euclidean space using perspective projection. That is, each point ``(x1, x2, ... x(n-1), xn)`` is converted to ``(x1/xn, x2/xn, ..., x(n-1)/xn)``. When ``xn=0``, the output point coordinates will be ``(0,0,0,...)``.
338
339
340
341 convertPointsHomogeneous
342 ------------------------
343 Converts points to/from homogeneous coordinates.
344
345 .. ocv:function:: void convertPointsHomogeneous( InputArray src, OutputArray dst )
346
347 .. ocv:cfunction:: void cvConvertPointsHomogeneous( const CvMat* src, CvMat* dst )
348 .. ocv:pyoldfunction:: cv.ConvertPointsHomogeneous(src, dst) -> None
349
350     :param src: Input array or vector of 2D, 3D, or 4D points.
351
352     :param dst: Output vector of 2D, 3D, or 4D points.
353
354 The function converts 2D or 3D points from/to homogeneous coordinates by calling either :ocv:func:`convertPointsToHomogeneous` or :ocv:func:`convertPointsFromHomogeneous`.
355
356 .. note:: The function is obsolete. Use one of the previous two functions instead.
357
358
359
360 correctMatches
361 --------------
362 Refines coordinates of corresponding points.
363
364 .. ocv:function:: void correctMatches( InputArray F, InputArray points1, InputArray points2, OutputArray newPoints1, OutputArray newPoints2 )
365
366 .. ocv:pyfunction:: cv2.correctMatches(F, points1, points2[, newPoints1[, newPoints2]]) -> newPoints1, newPoints2
367
368 .. ocv:cfunction:: void cvCorrectMatches( CvMat* F, CvMat* points1, CvMat* points2, CvMat* new_points1, CvMat* new_points2 )
369
370     :param F: 3x3 fundamental matrix.
371
372     :param points1: 1xN array containing the first set of points.
373
374     :param points2: 1xN array containing the second set of points.
375
376     :param newPoints1: The optimized points1.
377
378     :param newPoints2: The optimized points2.
379
380 The function implements the Optimal Triangulation Method (see Multiple View Geometry for details). For each given point correspondence points1[i] <-> points2[i], and a fundamental matrix F, it computes the corrected correspondences newPoints1[i] <-> newPoints2[i] that minimize the geometric error  :math:`d(points1[i], newPoints1[i])^2 + d(points2[i],newPoints2[i])^2`  (where  :math:`d(a,b)`  is the geometric distance between points  :math:`a`  and  :math:`b` ) subject to the epipolar constraint  :math:`newPoints2^T * F * newPoints1 = 0` .
381
382
383
384 decomposeProjectionMatrix
385 --------------------------
386 Decomposes a projection matrix into a rotation matrix and a camera matrix.
387
388 .. ocv:function:: void decomposeProjectionMatrix( InputArray projMatrix, OutputArray cameraMatrix, OutputArray rotMatrix, OutputArray transVect, OutputArray rotMatrixX=noArray(), OutputArray rotMatrixY=noArray(), OutputArray rotMatrixZ=noArray(), OutputArray eulerAngles=noArray() )
389
390 .. ocv:pyfunction:: cv2.decomposeProjectionMatrix(projMatrix[, cameraMatrix[, rotMatrix[, transVect[, rotMatrixX[, rotMatrixY[, rotMatrixZ[, eulerAngles]]]]]]]) -> cameraMatrix, rotMatrix, transVect, rotMatrixX, rotMatrixY, rotMatrixZ, eulerAngles
391
392 .. ocv:cfunction:: void cvDecomposeProjectionMatrix( const CvMat * projMatr, CvMat * calibMatr, CvMat * rotMatr, CvMat * posVect, CvMat * rotMatrX=NULL, CvMat * rotMatrY=NULL, CvMat * rotMatrZ=NULL, CvPoint3D64f * eulerAngles=NULL )
393
394 .. ocv:pyoldfunction:: cv.DecomposeProjectionMatrix(projMatrix, cameraMatrix, rotMatrix, transVect, rotMatrX=None, rotMatrY=None, rotMatrZ=None) -> eulerAngles
395
396     :param projMatrix: 3x4 input projection matrix P.
397
398     :param cameraMatrix: Output 3x3 camera matrix K.
399
400     :param rotMatrix: Output 3x3 external rotation matrix R.
401
402     :param transVect: Output 4x1 translation vector T.
403
404     :param rotMatrX: Optional 3x3 rotation matrix around x-axis.
405
406     :param rotMatrY: Optional 3x3 rotation matrix around y-axis.
407
408     :param rotMatrZ: Optional 3x3 rotation matrix around z-axis.
409
410     :param eulerAngles: Optional three-element vector containing three Euler angles of rotation in degrees.
411
412 The function computes a decomposition of a projection matrix into a calibration and a rotation matrix and the position of a camera.
413
414 It optionally returns three rotation matrices, one for each axis, and three Euler angles that could be used in OpenGL. Note, there is always more than one sequence of rotations about the three principle axes that results in the same orientation of an object, eg. see [Slabaugh]_. Returned tree rotation matrices and corresponding three Euler angules are only one of the possible solutions.
415
416 The function is based on
417 :ocv:func:`RQDecomp3x3` .
418
419
420
421 drawChessboardCorners
422 -------------------------
423 Renders the detected chessboard corners.
424
425 .. ocv:function:: void drawChessboardCorners( InputOutputArray image, Size patternSize, InputArray corners, bool patternWasFound )
426
427 .. ocv:pyfunction:: cv2.drawChessboardCorners(image, patternSize, corners, patternWasFound) -> None
428
429 .. ocv:cfunction:: void cvDrawChessboardCorners( CvArr* image, CvSize pattern_size, CvPoint2D32f* corners, int count, int pattern_was_found )
430 .. ocv:pyoldfunction:: cv.DrawChessboardCorners(image, patternSize, corners, patternWasFound)-> None
431
432     :param image: Destination image. It must be an 8-bit color image.
433
434     :param patternSize: Number of inner corners per a chessboard row and column ``(patternSize = cv::Size(points_per_row,points_per_column))``.
435
436     :param corners: Array of detected corners, the output of ``findChessboardCorners``.
437
438     :param patternWasFound: Parameter indicating whether the complete board was found or not. The return value of :ocv:func:`findChessboardCorners` should be passed here.
439
440 The function draws individual chessboard corners detected either as red circles if the board was not found, or as colored corners connected with lines if the board was found.
441
442
443
444 findChessboardCorners
445 -------------------------
446 Finds the positions of internal corners of the chessboard.
447
448 .. ocv:function:: bool findChessboardCorners( InputArray image, Size patternSize, OutputArray corners, int flags=CALIB_CB_ADAPTIVE_THRESH+CALIB_CB_NORMALIZE_IMAGE )
449
450 .. ocv:pyfunction:: cv2.findChessboardCorners(image, patternSize[, corners[, flags]]) -> retval, corners
451
452 .. ocv:cfunction:: int cvFindChessboardCorners( const void* image, CvSize pattern_size, CvPoint2D32f* corners, int* corner_count=NULL, int flags=CV_CALIB_CB_ADAPTIVE_THRESH+CV_CALIB_CB_NORMALIZE_IMAGE )
453 .. ocv:pyoldfunction:: cv.FindChessboardCorners(image, patternSize, flags=CV_CALIB_CB_ADAPTIVE_THRESH) -> corners
454
455     :param image: Source chessboard view. It must be an 8-bit grayscale or color image.
456
457     :param patternSize: Number of inner corners per a chessboard row and column ``( patternSize = cvSize(points_per_row,points_per_colum) = cvSize(columns,rows) )``.
458
459     :param corners: Output array of detected corners.
460
461     :param flags: Various operation flags that can be zero or a combination of the following values:
462
463             * **CV_CALIB_CB_ADAPTIVE_THRESH** Use adaptive thresholding to convert the image to black and white, rather than a fixed threshold level (computed from the average image brightness).
464
465             * **CV_CALIB_CB_NORMALIZE_IMAGE** Normalize the image gamma with  :ocv:func:`equalizeHist`  before applying fixed or adaptive thresholding.
466
467             * **CV_CALIB_CB_FILTER_QUADS** Use additional criteria (like contour area, perimeter, square-like shape) to filter out false quads extracted at the contour retrieval stage.
468
469             * **CALIB_CB_FAST_CHECK** Run a fast check on the image that looks for chessboard corners, and shortcut the call if none is found. This can drastically speed up the call in the degenerate condition when no chessboard is observed.
470
471 The function attempts to determine
472 whether the input image is a view of the chessboard pattern and
473 locate the internal chessboard corners. The function returns a non-zero
474 value if all of the corners are found and they are placed
475 in a certain order (row by row, left to right in every row). Otherwise, if the function fails to find all the corners or reorder
476 them, it returns 0. For example, a regular chessboard has 8 x 8
477 squares and 7 x 7 internal corners, that is, points where the black squares touch each other.
478 The detected coordinates are approximate, and to determine their positions more accurately, the function calls :ocv:func:`cornerSubPix`.
479 You also may use the function :ocv:func:`cornerSubPix` with different parameters if returned coordinates are not accurate enough.
480
481 Sample usage of detecting and drawing chessboard corners: ::
482
483     Size patternsize(8,6); //interior number of corners
484     Mat gray = ....; //source image
485     vector<Point2f> corners; //this will be filled by the detected corners
486
487     //CALIB_CB_FAST_CHECK saves a lot of time on images
488     //that do not contain any chessboard corners
489     bool patternfound = findChessboardCorners(gray, patternsize, corners,
490             CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE
491             + CALIB_CB_FAST_CHECK);
492
493     if(patternfound)
494       cornerSubPix(gray, corners, Size(11, 11), Size(-1, -1),
495         TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1));
496
497     drawChessboardCorners(img, patternsize, Mat(corners), patternfound);
498
499 .. note:: The function requires white space (like a square-thick border, the wider the better) around the board to make the detection more robust in various environments. Otherwise, if there is no border and the background is dark, the outer black squares cannot be segmented properly and so the square grouping and ordering algorithm fails.
500
501
502
503 findCirclesGrid
504 -------------------
505 Finds centers in the grid of circles.
506
507 .. ocv:function:: bool findCirclesGrid( InputArray image, Size patternSize, OutputArray centers, int flags=CALIB_CB_SYMMETRIC_GRID, const Ptr<FeatureDetector> &blobDetector = new SimpleBlobDetector() )
508
509 .. ocv:pyfunction:: cv2.findCirclesGridDefault(image, patternSize[, centers[, flags]]) -> retval, centers
510
511     :param image: grid view of input circles; it must be an 8-bit grayscale or color image.
512
513     :param patternSize: number of circles per row and column ``( patternSize = Size(points_per_row, points_per_colum) )``.
514
515     :param centers: output array of detected centers.
516
517     :param flags: various operation flags that can be one of the following values:
518
519             * **CALIB_CB_SYMMETRIC_GRID** uses symmetric pattern of circles.
520
521             * **CALIB_CB_ASYMMETRIC_GRID** uses asymmetric pattern of circles.
522
523             * **CALIB_CB_CLUSTERING** uses a special algorithm for grid detection. It is more robust to perspective distortions but much more sensitive to background clutter.
524
525     :param blobDetector: feature detector that finds blobs like dark circles on light background.
526
527
528 The function attempts to determine
529 whether the input image contains a grid of circles. If it is, the function locates centers of the circles. The function returns a
530 non-zero value if all of the centers have been found and they have been placed
531 in a certain order (row by row, left to right in every row). Otherwise, if the function fails to find all the corners or reorder
532 them, it returns 0.
533
534 Sample usage of detecting and drawing the centers of circles: ::
535
536     Size patternsize(7,7); //number of centers
537     Mat gray = ....; //source image
538     vector<Point2f> centers; //this will be filled by the detected centers
539
540     bool patternfound = findCirclesGrid(gray, patternsize, centers);
541
542     drawChessboardCorners(img, patternsize, Mat(centers), patternfound);
543
544 .. note:: The function requires white space (like a square-thick border, the wider the better) around the board to make the detection more robust in various environments.
545
546
547
548 solvePnP
549 ------------
550 Finds an object pose from 3D-2D point correspondences.
551
552 .. ocv:function:: bool solvePnP( InputArray objectPoints, InputArray imagePoints, InputArray cameraMatrix, InputArray distCoeffs, OutputArray rvec, OutputArray tvec, bool useExtrinsicGuess=false, int flags=ITERATIVE )
553
554 .. ocv:pyfunction:: cv2.solvePnP(objectPoints, imagePoints, cameraMatrix, distCoeffs[, rvec[, tvec[, useExtrinsicGuess[, flags]]]]) -> retval, rvec, tvec
555
556 .. ocv:cfunction:: void cvFindExtrinsicCameraParams2( const CvMat* object_points, const CvMat* image_points, const CvMat* camera_matrix, const CvMat* distortion_coeffs, CvMat* rotation_vector, CvMat* translation_vector, int use_extrinsic_guess=0 )
557
558 .. ocv:pyoldfunction:: cv.FindExtrinsicCameraParams2(objectPoints, imagePoints, cameraMatrix, distCoeffs, rvec, tvec, useExtrinsicGuess=0 ) -> None
559
560     :param objectPoints: Array of object points in the object coordinate space, 3xN/Nx3 1-channel or 1xN/Nx1 3-channel, where N is the number of points.  ``vector<Point3f>``  can be also passed here.
561
562     :param imagePoints: Array of corresponding image points, 2xN/Nx2 1-channel or 1xN/Nx1 2-channel, where N is the number of points.  ``vector<Point2f>``  can be also passed here.
563
564     :param cameraMatrix: Input camera matrix  :math:`A = \vecthreethree{fx}{0}{cx}{0}{fy}{cy}{0}{0}{1}` .
565
566     :param distCoeffs: Input vector of distortion coefficients  :math:`(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6]])`  of 4, 5, or 8 elements. If the vector is NULL/empty, the zero distortion coefficients are assumed.
567
568     :param rvec: Output rotation vector (see  :ocv:func:`Rodrigues` ) that, together with  ``tvec`` , brings points from the model coordinate system to the camera coordinate system.
569
570     :param tvec: Output translation vector.
571
572     :param useExtrinsicGuess: If true (1), the function uses the provided  ``rvec``  and  ``tvec``  values as initial approximations of the rotation and translation vectors, respectively, and further optimizes them.
573
574     :param flags: Method for solving a PnP problem:
575
576             *  **CV_ITERATIVE** Iterative method is based on Levenberg-Marquardt optimization. In this case the function finds such a pose that minimizes reprojection error, that is the sum of squared distances between the observed projections ``imagePoints`` and the projected (using :ocv:func:`projectPoints` ) ``objectPoints`` .
577             *  **CV_P3P**  Method is based on the paper of X.S. Gao, X.-R. Hou, J. Tang, H.-F. Chang "Complete Solution Classification for the Perspective-Three-Point Problem". In this case the function requires exactly four object and image points.
578             *  **CV_EPNP** Method has been introduced by F.Moreno-Noguer, V.Lepetit and P.Fua in the paper "EPnP: Efficient Perspective-n-Point Camera Pose Estimation".
579
580 The function estimates the object pose given a set of object points, their corresponding image projections, as well as the camera matrix and the distortion coefficients.
581
582
583
584 solvePnPRansac
585 ------------------
586 Finds an object pose from 3D-2D point correspondences using the RANSAC scheme.
587
588 .. ocv:function:: void solvePnPRansac( InputArray objectPoints, InputArray imagePoints, InputArray cameraMatrix, InputArray distCoeffs, OutputArray rvec, OutputArray tvec, bool useExtrinsicGuess=false, int iterationsCount = 100, float reprojectionError = 8.0, int minInliersCount = 100, OutputArray inliers = noArray(), int flags = ITERATIVE )
589
590 .. ocv:pyfunction:: cv2.solvePnPRansac(objectPoints, imagePoints, cameraMatrix, distCoeffs[, rvec[, tvec[, useExtrinsicGuess[, iterationsCount[, reprojectionError[, minInliersCount[, inliers[, flags]]]]]]]]) -> rvec, tvec, inliers
591
592     :param objectPoints: Array of object points in the object coordinate space, 3xN/Nx3 1-channel or 1xN/Nx1 3-channel, where N is the number of points.   ``vector<Point3f>``  can be also passed here.
593
594     :param imagePoints: Array of corresponding image points, 2xN/Nx2 1-channel or 1xN/Nx1 2-channel, where N is the number of points.  ``vector<Point2f>``  can be also passed here.
595
596     :param cameraMatrix: Input camera matrix  :math:`A = \vecthreethree{fx}{0}{cx}{0}{fy}{cy}{0}{0}{1}` .
597
598     :param distCoeffs: Input vector of distortion coefficients  :math:`(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6]])`  of 4, 5, or 8 elements. If the vector is NULL/empty, the zero distortion coefficients are assumed.
599
600     :param rvec: Output rotation vector (see  :ocv:func:`Rodrigues` ) that, together with  ``tvec`` , brings points from the model coordinate system to the camera coordinate system.
601
602     :param tvec: Output translation vector.
603
604     :param useExtrinsicGuess: If true (1), the function uses the provided  ``rvec``  and  ``tvec`` values as initial approximations of the rotation and translation vectors, respectively, and further optimizes them.
605
606     :param iterationsCount: Number of iterations.
607
608     :param reprojectionError: Inlier threshold value used by the RANSAC procedure. The parameter value is the maximum allowed distance between the observed and computed point projections to consider it an inlier.
609
610     :param minInliersCount: Number of inliers. If the algorithm at some stage finds more inliers than ``minInliersCount`` , it finishes.
611
612     :param inliers: Output vector that contains indices of inliers in ``objectPoints`` and ``imagePoints`` .
613
614     :param flags: Method for solving a PnP problem (see  :ocv:func:`solvePnP` ).
615
616 The function estimates an object pose given a set of object points, their corresponding image projections, as well as the camera matrix and the distortion coefficients. This function finds such a pose that minimizes reprojection error, that is, the sum of squared distances between the observed projections ``imagePoints`` and the projected (using
617 :ocv:func:`projectPoints` ) ``objectPoints``. The use of RANSAC makes the function resistant to outliers. The function is parallelized with the TBB library.
618
619
620
621 findFundamentalMat
622 ----------------------
623 Calculates a fundamental matrix from the corresponding points in two images.
624
625 .. ocv:function:: Mat findFundamentalMat( InputArray points1, InputArray points2, int method=FM_RANSAC, double param1=3., double param2=0.99, OutputArray mask=noArray() )
626
627 .. ocv:pyfunction:: cv2.findFundamentalMat(points1, points2[, method[, param1[, param2[, mask]]]]) -> retval, mask
628
629 .. ocv:cfunction:: int cvFindFundamentalMat( const CvMat* points1, const CvMat* points2, CvMat* fundamental_matrix, int method=CV_FM_RANSAC, double param1=3., double param2=0.99, CvMat* status=NULL )
630 .. ocv:pyoldfunction:: cv.FindFundamentalMat(points1, points2, fundamentalMatrix, method=CV_FM_RANSAC, param1=1., param2=0.99, status=None) -> retval
631
632     :param points1: Array of  ``N``  points from the first image. The point coordinates should be floating-point (single or double precision).
633
634     :param points2: Array of the second image points of the same size and format as  ``points1`` .
635
636     :param method: Method for computing a fundamental matrix.
637
638             * **CV_FM_7POINT** for a 7-point algorithm.  :math:`N = 7`
639             * **CV_FM_8POINT** for an 8-point algorithm.  :math:`N \ge 8`
640             * **CV_FM_RANSAC** for the RANSAC algorithm.  :math:`N \ge 8`
641             * **CV_FM_LMEDS** for the LMedS algorithm.  :math:`N \ge 8`
642
643     :param param1: Parameter used for RANSAC. It is the maximum distance from a point to an epipolar line in pixels, beyond which the point is considered an outlier and is not used for computing the final fundamental matrix. It can be set to something like 1-3, depending on the accuracy of the point localization, image resolution, and the image noise.
644
645     :param param2: Parameter used for the RANSAC or LMedS methods only. It specifies a desirable level of confidence (probability) that the estimated matrix is correct.
646
647     :param status: Output array of N elements, every element of which is set to 0 for outliers and to 1 for the other points. The array is computed only in the RANSAC and LMedS methods. For other methods, it is set to all 1's.
648
649 The epipolar geometry is described by the following equation:
650
651 .. math::
652
653     [p_2; 1]^T F [p_1; 1] = 0
654
655 where
656 :math:`F` is a fundamental matrix,
657 :math:`p_1` and
658 :math:`p_2` are corresponding points in the first and the second images, respectively.
659
660 The function calculates the fundamental matrix using one of four methods listed above and returns
661 the found fundamental matrix. Normally just one matrix is found. But in case of the 7-point algorithm, the function may return up to 3 solutions (
662 :math:`9 \times 3` matrix that stores all 3 matrices sequentially).
663
664 The calculated fundamental matrix may be passed further to
665 :ocv:func:`computeCorrespondEpilines` that finds the epipolar lines
666 corresponding to the specified points. It can also be passed to
667 :ocv:func:`stereoRectifyUncalibrated` to compute the rectification transformation. ::
668
669     // Example. Estimation of fundamental matrix using the RANSAC algorithm
670     int point_count = 100;
671     vector<Point2f> points1(point_count);
672     vector<Point2f> points2(point_count);
673
674     // initialize the points here ... */
675     for( int i = 0; i < point_count; i++ )
676     {
677         points1[i] = ...;
678         points2[i] = ...;
679     }
680
681     Mat fundamental_matrix =
682      findFundamentalMat(points1, points2, FM_RANSAC, 3, 0.99);
683
684
685
686 findHomography
687 ------------------
688 Finds a perspective transformation between two planes.
689
690 .. ocv:function:: Mat findHomography( InputArray srcPoints, InputArray dstPoints, int method=0, double ransacReprojThreshold=3, OutputArray mask=noArray() )
691
692 .. ocv:pyfunction:: cv2.findHomography(srcPoints, dstPoints[, method[, ransacReprojThreshold[, mask]]]) -> retval, mask
693
694 .. ocv:cfunction:: int cvFindHomography( const CvMat* src_points, const CvMat* dst_points, CvMat* homography, int method=0, double ransacReprojThreshold=3, CvMat* mask=0 )
695
696 .. ocv:pyoldfunction:: cv.FindHomography(srcPoints, dstPoints, H, method=0, ransacReprojThreshold=3.0, status=None) -> None
697
698     :param srcPoints: Coordinates of the points in the original plane, a matrix of the type  ``CV_32FC2``  or ``vector<Point2f>`` .
699
700     :param dstPoints: Coordinates of the points in the target plane, a matrix of the type  ``CV_32FC2``  or a  ``vector<Point2f>`` .
701
702     :param method:  Method used to computed a homography matrix. The following methods are possible:
703
704             * **0** - a regular method using all the points
705
706             * **CV_RANSAC** - RANSAC-based robust method
707
708             * **CV_LMEDS** - Least-Median robust method
709
710     :param ransacReprojThreshold: Maximum allowed reprojection error to treat a point pair as an inlier (used in the RANSAC method only). That is, if
711
712         .. math::
713
714             \| \texttt{dstPoints} _i -  \texttt{convertPointsHomogeneous} ( \texttt{H} * \texttt{srcPoints} _i) \|  >  \texttt{ransacReprojThreshold}
715
716         then the point  :math:`i`  is considered an outlier. If  ``srcPoints``  and  ``dstPoints``  are measured in pixels, it usually makes sense to set this parameter somewhere in the range of 1 to 10.
717
718     :param mask: Optional output mask set by a robust method ( ``CV_RANSAC``  or  ``CV_LMEDS`` ).  Note that the input mask values are ignored.
719
720 The functions find and return the perspective transformation :math:`H` between the source and the destination planes:
721
722 .. math::
723
724     s_i  \vecthree{x'_i}{y'_i}{1} \sim H  \vecthree{x_i}{y_i}{1}
725
726 so that the back-projection error
727
728 .. math::
729
730     \sum _i \left ( x'_i- \frac{h_{11} x_i + h_{12} y_i + h_{13}}{h_{31} x_i + h_{32} y_i + h_{33}} \right )^2+ \left ( y'_i- \frac{h_{21} x_i + h_{22} y_i + h_{23}}{h_{31} x_i + h_{32} y_i + h_{33}} \right )^2
731
732 is minimized. If the parameter ``method`` is set to the default value 0, the function
733 uses all the point pairs to compute an initial homography estimate with a simple least-squares scheme.
734
735 However, if not all of the point pairs (
736 :math:`srcPoints_i`,:math:`dstPoints_i` ) fit the rigid perspective transformation (that is, there
737 are some outliers), this initial estimate will be poor.
738 In this case, you can use one of the two robust methods. Both methods, ``RANSAC`` and ``LMeDS`` , try many different random subsets
739 of the corresponding point pairs (of four pairs each), estimate
740 the homography matrix using this subset and a simple least-square
741 algorithm, and then compute the quality/goodness of the computed homography
742 (which is the number of inliers for RANSAC or the median re-projection
743 error for LMeDs). The best subset is then used to produce the initial
744 estimate of the homography matrix and the mask of inliers/outliers.
745
746 Regardless of the method, robust or not, the computed homography
747 matrix is refined further (using inliers only in case of a robust
748 method) with the Levenberg-Marquardt method to reduce the
749 re-projection error even more.
750
751 The method ``RANSAC`` can handle practically any ratio of outliers
752 but it needs a threshold to distinguish inliers from outliers.
753 The method ``LMeDS`` does not need any threshold but it works
754 correctly only when there are more than 50% of inliers. Finally,
755 if there are no outliers and the noise is rather small, use the default method (``method=0``).
756
757 The function is used to find initial intrinsic and extrinsic matrices.
758 Homography matrix is determined up to a scale. Thus, it is normalized so that
759 :math:`h_{33}=1` .
760
761 .. seealso::
762
763     :ocv:func:`getAffineTransform`,
764     :ocv:func:`getPerspectiveTransform`,
765     :ocv:func:`estimateRigidTransform`,
766     :ocv:func:`warpPerspective`,
767     :ocv:func:`perspectiveTransform`
768
769
770 estimateAffine3D
771 --------------------
772 Computes an optimal affine transformation between two 3D point sets.
773
774 .. ocv:function:: int estimateAffine3D(InputArray src, InputArray dst, OutputArray out,  OutputArray inliers, double ransacThreshold = 3, double confidence = 0.99)
775
776 .. ocv:pyfunction:: cv2.estimateAffine3D(src, dst[, out[, inliers[, ransacThreshold[, confidence]]]]) -> retval, out, inliers
777
778     :param src: First input 3D point set.
779
780     :param dst: Second input 3D point set.
781
782     :param out: Output 3D affine transformation matrix  :math:`3 \times 4` .
783
784     :param inliers: Output vector indicating which points are inliers.
785
786     :param ransacThreshold: Maximum reprojection error in the RANSAC algorithm to consider a point as an inlier.
787
788     :param confidence: Confidence level, between 0 and 1, for the estimated transformation. Anything between 0.95 and 0.99 is usually good enough. Values too close to 1 can slow down the estimation significantly. Values lower than 0.8-0.9 can result in an incorrectly estimated transformation.
789
790 The function estimates an optimal 3D affine transformation between two 3D point sets using the RANSAC algorithm.
791
792
793 filterSpeckles
794 --------------
795 Filters off small noise blobs (speckles) in the disparity map
796
797 .. ocv:function:: void filterSpeckles( InputOutputArray img, double newVal, int maxSpeckleSize, double maxDiff, InputOutputArray buf=noArray() )
798
799 .. ocv:pyfunction:: cv2.filterSpeckles(img, newVal, maxSpeckleSize, maxDiff[, buf]) -> None
800
801     :param img: The input 16-bit signed disparity image
802
803     :param newVal: The disparity value used to paint-off the speckles
804
805     :param maxSpeckleSize: The maximum speckle size to consider it a speckle. Larger blobs are not affected by the algorithm
806
807     :param maxDiff: Maximum difference between neighbor disparity pixels to put them into the same blob. Note that since StereoBM, StereoSGBM and may be other algorithms return a fixed-point disparity map, where disparity values are multiplied by 16, this scale factor should be taken into account when specifying this parameter value.
808
809     :param buf: The optional temporary buffer to avoid memory allocation within the function.
810
811
812 getOptimalNewCameraMatrix
813 -----------------------------
814 Returns the new camera matrix based on the free scaling parameter.
815
816 .. ocv:function:: Mat getOptimalNewCameraMatrix( InputArray cameraMatrix, InputArray distCoeffs, Size imageSize, double alpha, Size newImgSize=Size(), Rect* validPixROI=0, bool centerPrincipalPoint=false )
817
818 .. ocv:pyfunction:: cv2.getOptimalNewCameraMatrix(cameraMatrix, distCoeffs, imageSize, alpha[, newImgSize[, centerPrincipalPoint]]) -> retval, validPixROI
819
820 .. ocv:cfunction:: void cvGetOptimalNewCameraMatrix( const CvMat* camera_matrix, const CvMat* dist_coeffs, CvSize image_size, double alpha, CvMat* new_camera_matrix, CvSize new_imag_size=cvSize(0,0), CvRect* valid_pixel_ROI=0, int center_principal_point=0 )
821
822 .. ocv:pyoldfunction:: cv.GetOptimalNewCameraMatrix(cameraMatrix, distCoeffs, imageSize, alpha, newCameraMatrix, newImageSize=(0, 0), validPixROI=0, centerPrincipalPoint=0) -> None
823
824     :param cameraMatrix: Input camera matrix.
825
826     :param distCoeffs: Input vector of distortion coefficients  :math:`(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6]])`  of 4, 5, or 8 elements. If the vector is NULL/empty, the zero distortion coefficients are assumed.
827
828     :param imageSize: Original image size.
829
830     :param alpha: 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). See  :ocv:func:`stereoRectify` for details.
831
832     :param new_camera_matrix: Output new camera matrix.
833
834     :param new_imag_size: Image size after rectification. By default,it is set to  ``imageSize`` .
835
836     :param validPixROI: Optional output rectangle that outlines all-good-pixels region in the undistorted image. See  ``roi1, roi2``  description in  :ocv:func:`stereoRectify` .
837
838     :param centerPrincipalPoint: Optional flag that indicates whether in the new camera matrix the principal point should be at the image center or not. By default, the principal point is chosen to best fit a subset of the source image (determined by ``alpha``) to the corrected image.
839
840 The function computes and returns
841 the optimal new camera matrix based on the free scaling parameter. By varying  this parameter, you may retrieve only sensible pixels ``alpha=0`` , keep all the original image pixels if there is valuable information in the corners ``alpha=1`` , or get something in between. When ``alpha>0`` , the undistortion result is likely to have some black pixels corresponding to "virtual" pixels outside of the captured distorted image. The original camera matrix, distortion coefficients, the computed new camera matrix, and ``newImageSize`` should be passed to
842 :ocv:func:`initUndistortRectifyMap` to produce the maps for
843 :ocv:func:`remap` .
844
845
846
847 initCameraMatrix2D
848 ----------------------
849 Finds an initial camera matrix from 3D-2D point correspondences.
850
851 .. ocv:function:: Mat initCameraMatrix2D( InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints, Size imageSize, double aspectRatio=1.)
852
853 .. ocv:pyfunction:: cv2.initCameraMatrix2D(objectPoints, imagePoints, imageSize[, aspectRatio]) -> retval
854
855 .. ocv:cfunction:: void cvInitIntrinsicParams2D( const CvMat* object_points, const CvMat* image_points, const CvMat* npoints, CvSize image_size, CvMat* camera_matrix, double aspect_ratio=1. )
856
857 .. ocv:pyoldfunction:: cv.InitIntrinsicParams2D(objectPoints, imagePoints, npoints, imageSize, cameraMatrix, aspectRatio=1.) -> None
858
859     :param objectPoints: Vector of vectors of the calibration pattern points in the calibration pattern coordinate space. In the old interface all the per-view vectors are concatenated. See :ocv:func:`calibrateCamera` for details.
860
861     :param imagePoints: Vector of vectors of the projections of the calibration pattern points. In the old interface all the per-view vectors are concatenated.
862
863     :param npoints: The integer vector of point counters for each view.
864
865     :param imageSize: Image size in pixels used to initialize the principal point.
866
867     :param aspectRatio: If it is zero or negative, both  :math:`f_x`  and  :math:`f_y`  are estimated independently. Otherwise,  :math:`f_x = f_y * \texttt{aspectRatio}` .
868
869 The function estimates and returns an initial camera matrix for the camera calibration process.
870 Currently, the function only supports planar calibration patterns, which are patterns where each object point has z-coordinate =0.
871
872
873
874 matMulDeriv
875 ---------------
876 Computes partial derivatives of the matrix product for each multiplied matrix.
877
878 .. ocv:function:: void matMulDeriv( InputArray A, InputArray B, OutputArray dABdA, OutputArray dABdB )
879
880 .. ocv:pyfunction:: cv2.matMulDeriv(A, B[, dABdA[, dABdB]]) -> dABdA, dABdB
881
882     :param A: First multiplied matrix.
883
884     :param B: Second multiplied matrix.
885
886     :param dABdA: First output derivative matrix  ``d(A*B)/dA``  of size  :math:`\texttt{A.rows*B.cols} \times {A.rows*A.cols}` .
887
888     :param dABdB: Second output derivative matrix  ``d(A*B)/dB``  of size  :math:`\texttt{A.rows*B.cols} \times {B.rows*B.cols}` .
889
890 The function computes partial derivatives of the elements of the matrix product
891 :math:`A*B` with regard to the elements of each of the two input matrices. The function is used to compute the Jacobian matrices in
892 :ocv:func:`stereoCalibrate`  but can also be used in any other similar optimization function.
893
894
895
896 projectPoints
897 -----------------
898 Projects 3D points to an image plane.
899
900 .. ocv:function:: void projectPoints( InputArray objectPoints, InputArray rvec, InputArray tvec, InputArray cameraMatrix, InputArray distCoeffs, OutputArray imagePoints, OutputArray jacobian=noArray(), double aspectRatio=0 )
901
902 .. ocv:pyfunction:: cv2.projectPoints(objectPoints, rvec, tvec, cameraMatrix, distCoeffs[, imagePoints[, jacobian[, aspectRatio]]]) -> imagePoints, jacobian
903
904 .. ocv:cfunction:: void cvProjectPoints2( const CvMat* object_points, const CvMat* rotation_vector, const CvMat* translation_vector, const CvMat* camera_matrix, const CvMat* distortion_coeffs, CvMat* image_points, CvMat* dpdrot=NULL, CvMat* dpdt=NULL, CvMat* dpdf=NULL, CvMat* dpdc=NULL, CvMat* dpddist=NULL, double aspect_ratio=0 )
905
906 .. ocv:pyoldfunction:: cv.ProjectPoints2(objectPoints, rvec, tvec, cameraMatrix, distCoeffs, imagePoints, dpdrot=None, dpdt=None, dpdf=None, dpdc=None, dpddist=None)-> None
907
908     :param objectPoints: Array of object points, 3xN/Nx3 1-channel or 1xN/Nx1 3-channel  (or  ``vector<Point3f>`` ), where N is the number of points in the view.
909
910     :param rvec: Rotation vector. See  :ocv:func:`Rodrigues` for details.
911
912     :param tvec: Translation vector.
913
914     :param cameraMatrix: Camera matrix  :math:`A = \vecthreethree{f_x}{0}{c_x}{0}{f_y}{c_y}{0}{0}{_1}` .
915
916     :param distCoeffs: Input vector of distortion coefficients  :math:`(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6]])`  of 4, 5, or 8 elements. If the vector is NULL/empty, the zero distortion coefficients are assumed.
917
918     :param imagePoints: Output array of image points, 2xN/Nx2 1-channel or 1xN/Nx1 2-channel, or  ``vector<Point2f>`` .
919
920     :param jacobian: Optional output 2Nx(10+<numDistCoeffs>) jacobian matrix of derivatives of image points with respect to components of the rotation vector, translation vector, focal lengths, coordinates of the principal point and the distortion coefficients. In the old interface different components of the jacobian are returned via different output parameters.
921
922     :param aspectRatio: Optional "fixed aspect ratio" parameter. If the parameter is not 0, the function assumes that the aspect ratio (*fx/fy*) is fixed and correspondingly adjusts the jacobian matrix.
923
924 The function computes projections of 3D
925 points to the image plane given intrinsic and extrinsic camera
926 parameters. Optionally, the function computes Jacobians - matrices
927 of partial derivatives of image points coordinates (as functions of all the
928 input parameters) with respect to the particular parameters, intrinsic and/or
929 extrinsic. The Jacobians are used during the global optimization
930 in
931 :ocv:func:`calibrateCamera`,
932 :ocv:func:`solvePnP`, and
933 :ocv:func:`stereoCalibrate` . The
934 function itself can also be used to compute a re-projection error given the
935 current intrinsic and extrinsic parameters.
936
937 .. note:: By setting ``rvec=tvec=(0,0,0)``  or by setting ``cameraMatrix`` to a 3x3 identity matrix, or by passing zero distortion coefficients, you can get various useful partial cases of the function. This means that you can compute the distorted coordinates for a sparse set of points or apply a perspective transformation (and also compute the derivatives) in the ideal zero-distortion setup.
938
939
940
941 reprojectImageTo3D
942 ----------------------
943 Reprojects a disparity image to 3D space.
944
945 .. ocv:function:: void reprojectImageTo3D( InputArray disparity, OutputArray _3dImage, InputArray Q, bool handleMissingValues=false, int ddepth=-1 )
946
947 .. ocv:pyfunction:: cv2.reprojectImageTo3D(disparity, Q[, _3dImage[, handleMissingValues[, ddepth]]]) -> _3dImage
948
949 .. ocv:cfunction:: void cvReprojectImageTo3D( const CvArr* disparityImage, CvArr* _3dImage, const CvMat* Q, int handleMissingValues=0 )
950
951 .. ocv:pyoldfunction:: cv.ReprojectImageTo3D(disparity, _3dImage, Q, handleMissingValues=0) -> None
952
953     :param disparity: Input single-channel 8-bit unsigned, 16-bit signed, 32-bit signed or 32-bit floating-point disparity image.
954
955     :param _3dImage: Output 3-channel floating-point image of the same size as  ``disparity`` . Each element of  ``_3dImage(x,y)``  contains 3D coordinates of the point  ``(x,y)``  computed from the disparity map.
956
957     :param Q: :math:`4 \times 4`  perspective transformation matrix that can be obtained with  :ocv:func:`stereoRectify`.
958
959     :param handleMissingValues: Indicates, whether the function should handle missing values (i.e. points where the disparity was not computed). If ``handleMissingValues=true``, then pixels with the minimal disparity that corresponds to the outliers (see  :ocv:funcx:`StereoBM::operator()` ) are transformed to 3D points with a very large Z value (currently set to 10000).
960
961     :param ddepth: The optional output array depth. If it is ``-1``, the output image will have ``CV_32F`` depth. ``ddepth`` can also be set to ``CV_16S``, ``CV_32S`` or ``CV_32F``.
962
963 The function transforms a single-channel disparity map to a 3-channel image representing a 3D surface. That is, for each pixel ``(x,y)`` andthe  corresponding disparity ``d=disparity(x,y)`` , it computes:
964
965 .. math::
966
967     \begin{array}{l} [X \; Y \; Z \; W]^T =  \texttt{Q} *[x \; y \; \texttt{disparity} (x,y) \; 1]^T  \\ \texttt{\_3dImage} (x,y) = (X/W, \; Y/W, \; Z/W) \end{array}
968
969 The matrix ``Q`` can be an arbitrary
970 :math:`4 \times 4` matrix (for example, the one computed by
971 :ocv:func:`stereoRectify`). To reproject a sparse set of points {(x,y,d),...} to 3D space, use
972 :ocv:func:`perspectiveTransform` .
973
974
975
976 RQDecomp3x3
977 ---------------
978 Computes an RQ decomposition of 3x3 matrices.
979
980 .. ocv:function:: Vec3d RQDecomp3x3( InputArray src, OutputArray mtxR, OutputArray mtxQ, OutputArray Qx=noArray(), OutputArray Qy=noArray(), OutputArray Qz=noArray() )
981
982 .. ocv:pyfunction:: cv2.RQDecomp3x3(src[, mtxR[, mtxQ[, Qx[, Qy[, Qz]]]]]) -> retval, mtxR, mtxQ, Qx, Qy, Qz
983
984 .. ocv:cfunction:: void cvRQDecomp3x3( const CvMat * matrixM, CvMat * matrixR, CvMat * matrixQ, CvMat * matrixQx=NULL, CvMat * matrixQy=NULL, CvMat * matrixQz=NULL, CvPoint3D64f * eulerAngles=NULL )
985 .. ocv:pyoldfunction:: cv.RQDecomp3x3(M, R, Q, Qx=None, Qy=None, Qz=None) -> eulerAngles
986
987     :param src: 3x3 input matrix.
988
989     :param mtxR: Output 3x3 upper-triangular matrix.
990
991     :param mtxQ: Output 3x3 orthogonal matrix.
992
993     :param Qx: Optional output 3x3 rotation matrix around x-axis.
994
995     :param Qy: Optional output 3x3 rotation matrix around y-axis.
996
997     :param Qz: Optional output 3x3 rotation matrix around z-axis.
998
999 The function computes a RQ decomposition using the given rotations. This function is used in
1000 :ocv:func:`decomposeProjectionMatrix` to decompose the left 3x3 submatrix of a projection matrix into a camera and a rotation matrix.
1001
1002 It optionally returns three rotation matrices, one for each axis, and the three Euler angles in degrees (as the return value) that could be used in OpenGL. Note, there is always more than one sequence of rotations about the three principle axes that results in the same orientation of an object, eg. see [Slabaugh]_. Returned tree rotation matrices and corresponding three Euler angules are only one of the possible solutions.
1003
1004
1005
1006 Rodrigues
1007 -------------
1008 Converts a rotation matrix to a rotation vector or vice versa.
1009
1010 .. ocv:function:: void Rodrigues(InputArray src, OutputArray dst, OutputArray jacobian=noArray())
1011
1012 .. ocv:pyfunction:: cv2.Rodrigues(src[, dst[, jacobian]]) -> dst, jacobian
1013
1014 .. ocv:cfunction:: int cvRodrigues2( const CvMat* src, CvMat* dst, CvMat* jacobian=0 )
1015
1016 .. ocv:pyoldfunction:: cv.Rodrigues2(src, dst, jacobian=0)-> None
1017
1018     :param src: Input rotation vector (3x1 or 1x3) or rotation matrix (3x3).
1019
1020     :param dst: Output rotation matrix (3x3) or rotation vector (3x1 or 1x3), respectively.
1021
1022     :param jacobian: Optional output Jacobian matrix, 3x9 or 9x3, which is a matrix of partial derivatives of the output array components with respect to the input array components.
1023
1024 .. math::
1025
1026     \begin{array}{l} \theta \leftarrow norm(r) \\ r  \leftarrow r/ \theta \\ R =  \cos{\theta} I + (1- \cos{\theta} ) r r^T +  \sin{\theta} \vecthreethree{0}{-r_z}{r_y}{r_z}{0}{-r_x}{-r_y}{r_x}{0} \end{array}
1027
1028 Inverse transformation can be also done easily, since
1029
1030 .. math::
1031
1032     \sin ( \theta ) \vecthreethree{0}{-r_z}{r_y}{r_z}{0}{-r_x}{-r_y}{r_x}{0} = \frac{R - R^T}{2}
1033
1034 A rotation vector is a convenient and most compact representation of a rotation matrix
1035 (since any rotation matrix has just 3 degrees of freedom). The representation is
1036 used in the global 3D geometry optimization procedures like
1037 :ocv:func:`calibrateCamera`,
1038 :ocv:func:`stereoCalibrate`, or
1039 :ocv:func:`solvePnP` .
1040
1041
1042
1043 StereoBM
1044 --------
1045 .. ocv:class:: StereoBM
1046
1047 Class for computing stereo correspondence using the block matching algorithm. ::
1048
1049     // Block matching stereo correspondence algorithm class StereoBM
1050     {
1051         enum { NORMALIZED_RESPONSE = CV_STEREO_BM_NORMALIZED_RESPONSE,
1052             BASIC_PRESET=CV_STEREO_BM_BASIC,
1053             FISH_EYE_PRESET=CV_STEREO_BM_FISH_EYE,
1054             NARROW_PRESET=CV_STEREO_BM_NARROW };
1055
1056         StereoBM();
1057         // the preset is one of ..._PRESET above.
1058         // ndisparities is the size of disparity range,
1059         // in which the optimal disparity at each pixel is searched for.
1060         // SADWindowSize is the size of averaging window used to match pixel blocks
1061         //    (larger values mean better robustness to noise, but yield blurry disparity maps)
1062         StereoBM(int preset, int ndisparities=0, int SADWindowSize=21);
1063         // separate initialization function
1064         void init(int preset, int ndisparities=0, int SADWindowSize=21);
1065         // computes the disparity for the two rectified 8-bit single-channel images.
1066         // the disparity will be 16-bit signed (fixed-point) or 32-bit floating-point image of the same size as left.
1067         void operator()( InputArray left, InputArray right, OutputArray disparity, int disptype=CV_16S );
1068
1069         Ptr<CvStereoBMState> state;
1070     };
1071
1072 The class is a C++ wrapper for the associated functions. In particular, :ocv:funcx:`StereoBM::operator()` is the wrapper for
1073 :ocv:cfunc:`cvFindStereoCorrespondenceBM`.
1074
1075
1076 StereoBM::StereoBM
1077 ------------------
1078 The constructors.
1079
1080 .. ocv:function:: StereoBM::StereoBM()
1081 .. ocv:function:: StereoBM::StereoBM(int preset, int ndisparities=0, int SADWindowSize=21)
1082
1083 .. ocv:pyfunction:: cv2.StereoBM([preset[, ndisparities[, SADWindowSize]]]) -> <StereoBM object>
1084
1085 .. ocv:cfunction:: CvStereoBMState* cvCreateStereoBMState( int preset=CV_STEREO_BM_BASIC, int numberOfDisparities=0 )
1086
1087 .. ocv:pyoldfunction:: cv.CreateStereoBMState(preset=CV_STEREO_BM_BASIC, numberOfDisparities=0)-> CvStereoBMState
1088
1089     :param preset: specifies the whole set of algorithm parameters, one of:
1090
1091             * BASIC_PRESET - parameters suitable for general cameras
1092             * FISH_EYE_PRESET - parameters suitable for wide-angle cameras
1093             * NARROW_PRESET - parameters suitable for narrow-angle cameras
1094
1095         After constructing the class, you can override any parameters set by the preset.
1096
1097     :param ndisparities: the disparity search range. For each pixel algorithm will find the best disparity from 0 (default minimum disparity) to ``ndisparities``. The search range can then be shifted by changing the minimum disparity.
1098
1099     :param SADWindowSize: the linear size of the blocks compared by the algorithm. The size should be odd (as the block is centered at the current pixel). Larger block size implies smoother, though less accurate disparity map. Smaller block size gives more detailed disparity map, but there is higher chance for algorithm to find a wrong correspondence.
1100
1101 The constructors initialize ``StereoBM`` state. You can then call ``StereoBM::operator()`` to compute disparity for a specific stereo pair.
1102
1103 .. note:: In the C API you need to deallocate ``CvStereoBM`` state when it is not needed anymore using ``cvReleaseStereoBMState(&stereobm)``.
1104
1105 StereoBM::operator()
1106 -----------------------
1107 Computes disparity using the BM algorithm for a rectified stereo pair.
1108
1109 .. ocv:function:: void StereoBM::operator()( InputArray left, InputArray right, OutputArray disparity, int disptype=CV_16S )
1110
1111 .. ocv:pyfunction:: cv2.StereoBM.compute(left, right[, disparity[, disptype]]) -> disparity
1112
1113 .. ocv:cfunction:: void cvFindStereoCorrespondenceBM( const CvArr* left, const CvArr* right, CvArr* disparity, CvStereoBMState* state )
1114
1115 .. ocv:pyoldfunction:: cv.FindStereoCorrespondenceBM(left, right, disparity, state)-> None
1116
1117     :param left: Left 8-bit single-channel image.
1118
1119     :param right: Right image of the same size and the same type as the left one.
1120
1121     :param disparity: Output disparity map. It has the same size as the input images. When ``disptype==CV_16S``, the map is a 16-bit signed single-channel image, containing disparity values scaled by 16. To get the true disparity values from such fixed-point representation, you will need to divide each  ``disp`` element by 16. If ``disptype==CV_32F``, the disparity map will already contain the real disparity values on output.
1122
1123     :param disptype: Type of the output disparity map, ``CV_16S`` (default) or ``CV_32F``.
1124
1125     :param state: The pre-initialized ``CvStereoBMState`` structure in the case of the old API.
1126
1127 The method executes the BM algorithm on a rectified stereo pair. See the ``stereo_match.cpp`` OpenCV sample on how to prepare images and call the method. Note that the method is not constant, thus you should not use the same ``StereoBM`` instance from within different threads simultaneously. The function is parallelized with the TBB library.
1128
1129
1130
1131 StereoSGBM
1132 ----------
1133
1134 .. ocv:class:: StereoSGBM
1135
1136 Class for computing stereo correspondence using the semi-global block matching algorithm. ::
1137
1138     class StereoSGBM
1139     {
1140         StereoSGBM();
1141         StereoSGBM(int minDisparity, int numDisparities, int SADWindowSize,
1142                    int P1=0, int P2=0, int disp12MaxDiff=0,
1143                    int preFilterCap=0, int uniquenessRatio=0,
1144                    int speckleWindowSize=0, int speckleRange=0,
1145                    bool fullDP=false);
1146         virtual ~StereoSGBM();
1147
1148         virtual void operator()(InputArray left, InputArray right, OutputArray disp);
1149
1150         int minDisparity;
1151         int numberOfDisparities;
1152         int SADWindowSize;
1153         int preFilterCap;
1154         int uniquenessRatio;
1155         int P1, P2;
1156         int speckleWindowSize;
1157         int speckleRange;
1158         int disp12MaxDiff;
1159         bool fullDP;
1160
1161         ...
1162     };
1163
1164 The class implements the modified H. Hirschmuller algorithm [HH08]_ that differs from the original one as follows:
1165
1166  * By default, the algorithm is single-pass, which means that you consider only 5 directions instead of 8. Set ``fullDP=true`` to run the full variant of the algorithm but beware that it may consume a lot of memory.
1167
1168  * The algorithm matches blocks, not individual pixels. Though, setting ``SADWindowSize=1`` reduces the blocks to single pixels.
1169
1170  * Mutual information cost function is not implemented. Instead, a simpler Birchfield-Tomasi sub-pixel metric from [BT98]_ is used. Though, the color images are supported as well.
1171
1172  * Some pre- and post- processing steps from K. Konolige algorithm :ocv:funcx:`StereoBM::operator()`  are included, for example: pre-filtering (``CV_STEREO_BM_XSOBEL`` type) and post-filtering (uniqueness check, quadratic interpolation and speckle filtering).
1173
1174
1175
1176 StereoSGBM::StereoSGBM
1177 --------------------------
1178 .. ocv:function:: StereoSGBM::StereoSGBM()
1179
1180 .. ocv:function:: StereoSGBM::StereoSGBM( int minDisparity, int numDisparities, int SADWindowSize, int P1=0, int P2=0, int disp12MaxDiff=0, int preFilterCap=0, int uniquenessRatio=0, int speckleWindowSize=0, int speckleRange=0, bool fullDP=false)
1181
1182 .. ocv:pyfunction:: cv2.StereoSGBM([minDisparity, numDisparities, SADWindowSize[, P1[, P2[, disp12MaxDiff[, preFilterCap[, uniquenessRatio[, speckleWindowSize[, speckleRange[, fullDP]]]]]]]]]) -> <StereoSGBM object>
1183
1184     Initializes ``StereoSGBM`` and sets parameters to custom values.??
1185
1186     :param minDisparity: Minimum possible disparity value. Normally, it is zero but sometimes rectification algorithms can shift images, so this parameter needs to be adjusted accordingly.
1187
1188     :param numDisparities: Maximum disparity minus minimum disparity. The value is always greater than zero. In the current implementation, this parameter must be divisible by 16.
1189
1190     :param SADWindowSize: Matched block size. It must be an odd number  ``>=1`` . Normally, it should be somewhere in  the ``3..11``  range.
1191
1192     :param P1: The first parameter controlling the disparity smoothness. See below.
1193
1194     :param P2: The second parameter controlling the disparity smoothness. The larger the values are, the smoother the disparity is.  ``P1``  is the penalty on the disparity change by plus or minus 1 between neighbor pixels.  ``P2``  is the penalty on the disparity change by more than 1 between neighbor pixels. The algorithm requires  ``P2 > P1`` . See  ``stereo_match.cpp``  sample where some reasonably good  ``P1``  and  ``P2``  values are shown (like  ``8*number_of_image_channels*SADWindowSize*SADWindowSize``  and  ``32*number_of_image_channels*SADWindowSize*SADWindowSize`` , respectively).
1195
1196     :param disp12MaxDiff: Maximum allowed difference (in integer pixel units) in the left-right disparity check. Set it to a non-positive value to disable the check.
1197
1198     :param preFilterCap: Truncation value for the prefiltered image pixels. The algorithm first computes x-derivative at each pixel and clips its value by  ``[-preFilterCap, preFilterCap]``  interval. The result values are passed to the Birchfield-Tomasi pixel cost function.
1199
1200     :param uniquenessRatio: Margin in percentage by which the best (minimum) computed cost function value should "win" the second best value to consider the found match correct. Normally, a value within the 5-15 range is good enough.
1201
1202     :param speckleWindowSize: Maximum size of smooth disparity regions to consider their noise speckles and invalidate. Set it to 0 to disable speckle filtering. Otherwise, set it somewhere in the 50-200 range.
1203
1204     :param speckleRange: Maximum disparity variation within each connected component. If you do speckle filtering, set the parameter to a positive value, multiple of 16. Normally, 16 or 32 is good enough.
1205
1206     :param fullDP: Set it to  ``true``  to run the full-scale two-pass dynamic programming algorithm. It will consume O(W*H*numDisparities) bytes, which is large for 640x480 stereo and huge for HD-size pictures. By default, it is set to ``false`` .
1207
1208 The first constructor initializes ``StereoSGBM`` with all the default parameters. So, you only have to set ``StereoSGBM::numberOfDisparities`` at minimum. The second constructor enables you to set each parameter to a custom value.
1209
1210
1211
1212 StereoSGBM::operator ()
1213 -----------------------
1214
1215 .. ocv:function:: void StereoSGBM::operator()(InputArray left, InputArray right, OutputArray disp)
1216
1217 .. ocv:pyfunction:: cv2.StereoSGBM.compute(left, right[, disp]) -> disp
1218
1219     Computes disparity using the SGBM algorithm for a rectified stereo pair.
1220
1221     :param left: Left 8-bit single-channel or 3-channel image.
1222
1223     :param right: Right image of the same size and the same type as the left one.
1224
1225     :param disp: Output disparity map. It is a 16-bit signed single-channel image of the same size as the input image. It contains disparity values  scaled by 16. So, to get the floating-point disparity map, you need to divide each  ``disp``  element by 16.
1226
1227 The method executes the SGBM algorithm on a rectified stereo pair. See ``stereo_match.cpp`` OpenCV sample on how to prepare images and call the method.
1228
1229 .. note:: The method is not constant, so you should not use the same ``StereoSGBM`` instance from different threads simultaneously.
1230
1231
1232 stereoCalibrate
1233 -------------------
1234 Calibrates the stereo camera.
1235
1236 .. ocv:function:: double stereoCalibrate( InputArrayOfArrays objectPoints, InputArrayOfArrays imagePoints1, InputArrayOfArrays imagePoints2, InputOutputArray cameraMatrix1, InputOutputArray distCoeffs1, InputOutputArray cameraMatrix2, InputOutputArray distCoeffs2, Size imageSize, OutputArray R, OutputArray T, OutputArray E, OutputArray F, TermCriteria criteria=TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 30, 1e-6), int flags=CALIB_FIX_INTRINSIC )
1237
1238 .. ocv:pyfunction:: cv2.stereoCalibrate(objectPoints, imagePoints1, imagePoints2, imageSize[, cameraMatrix1[, distCoeffs1[, cameraMatrix2[, distCoeffs2[, R[, T[, E[, F[, criteria[, flags]]]]]]]]]]) -> retval, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F
1239
1240 .. ocv:cfunction:: double cvStereoCalibrate( const CvMat* object_points, const CvMat* image_points1, const CvMat* image_points2, const CvMat* npoints, CvMat* camera_matrix1, CvMat* dist_coeffs1, CvMat* camera_matrix2, CvMat* dist_coeffs2, CvSize image_size, CvMat* R, CvMat* T, CvMat* E=0, CvMat* F=0, CvTermCriteria term_crit=cvTermCriteria( CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,30,1e-6), int flags=CV_CALIB_FIX_INTRINSIC )
1241
1242 .. ocv:pyoldfunction:: cv.StereoCalibrate(objectPoints, imagePoints1, imagePoints2, pointCounts, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, imageSize, R, T, E=None, F=None, term_crit=(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS, 30, 1e-6), flags=CV_CALIB_FIX_INTRINSIC)-> None
1243
1244     :param objectPoints: Vector of vectors of the calibration pattern points.
1245
1246     :param imagePoints1: Vector of vectors of the projections of the calibration pattern points, observed by the first camera.
1247
1248     :param imagePoints2: Vector of vectors of the projections of the calibration pattern points, observed by the second camera.
1249
1250     :param cameraMatrix1: Input/output first camera matrix:  :math:`\vecthreethree{f_x^{(j)}}{0}{c_x^{(j)}}{0}{f_y^{(j)}}{c_y^{(j)}}{0}{0}{1}` , :math:`j = 0,\, 1` . If any of  ``CV_CALIB_USE_INTRINSIC_GUESS`` , ``CV_CALIB_FIX_ASPECT_RATIO`` , ``CV_CALIB_FIX_INTRINSIC`` , or  ``CV_CALIB_FIX_FOCAL_LENGTH``  are specified, some or all of the matrix components must be initialized. See the flags description for details.
1251
1252     :param distCoeffs1: Input/output vector of distortion coefficients  :math:`(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6]])`  of 4, 5, or 8 elements. The output vector length depends on the flags.
1253
1254     :param cameraMatrix2: Input/output second camera matrix. The parameter is similar to ``cameraMatrix1`` .
1255
1256     :param distCoeffs2: Input/output lens distortion coefficients for the second camera. The parameter is similar to  ``distCoeffs1`` .
1257
1258     :param imageSize: Size of the image used only to initialize intrinsic camera matrix.
1259
1260     :param R: Output rotation matrix between the 1st and the 2nd camera coordinate systems.
1261
1262     :param T: Output translation vector between the coordinate systems of the cameras.
1263
1264     :param E: Output essential matrix.
1265
1266     :param F: Output fundamental matrix.
1267
1268     :param term_crit: Termination criteria for the iterative optimization algorithm.
1269
1270     :param flags: Different flags that may be zero or a combination of the following values:
1271
1272             * **CV_CALIB_FIX_INTRINSIC** Fix ``cameraMatrix?`` and  ``distCoeffs?``  so that only  ``R, T, E`` ,  and  ``F`` matrices are estimated.
1273
1274             * **CV_CALIB_USE_INTRINSIC_GUESS** Optimize some or all of the intrinsic parameters according to the specified flags. Initial values are provided by the user.
1275
1276             * **CV_CALIB_FIX_PRINCIPAL_POINT** Fix the principal points during the optimization.
1277
1278             * **CV_CALIB_FIX_FOCAL_LENGTH** Fix :math:`f^{(j)}_x`  and  :math:`f^{(j)}_y` .
1279
1280             * **CV_CALIB_FIX_ASPECT_RATIO** Optimize :math:`f^{(j)}_y` . Fix the ratio  :math:`f^{(j)}_x/f^{(j)}_y` .
1281
1282             * **CV_CALIB_SAME_FOCAL_LENGTH** Enforce  :math:`f^{(0)}_x=f^{(1)}_x`  and  :math:`f^{(0)}_y=f^{(1)}_y` .
1283
1284             * **CV_CALIB_ZERO_TANGENT_DIST** Set tangential distortion coefficients for each camera to zeros and fix there.
1285
1286             * **CV_CALIB_FIX_K1,...,CV_CALIB_FIX_K6** Do not change the corresponding radial distortion coefficient during the optimization. If  ``CV_CALIB_USE_INTRINSIC_GUESS``  is set, the coefficient from the supplied  ``distCoeffs``  matrix is used. Otherwise, it is set to 0.
1287
1288             * **CV_CALIB_RATIONAL_MODEL** Enable coefficients k4, k5, and k6. To provide the backward compatibility, this extra flag should be explicitly specified to make the calibration function use the rational model and return 8 coefficients. If the flag is not set, the function computes  and returns only 5 distortion coefficients.
1289
1290 The function estimates transformation between two cameras making a stereo pair. If you have a stereo camera where the relative position and orientation of two cameras is fixed, and if you computed poses of an object relative to the first camera and to the second camera, (R1, T1) and (R2, T2), respectively (this can be done with
1291 :ocv:func:`solvePnP` ), then those poses definitely relate to each other. This means that, given (
1292 :math:`R_1`,:math:`T_1` ), it should be possible to compute (
1293 :math:`R_2`,:math:`T_2` ). You only need to know the position and orientation of the second camera relative to the first camera. This is what the described function does. It computes (
1294 :math:`R`,:math:`T` ) so that:
1295
1296 .. math::
1297
1298     R_2=R*R_1
1299     T_2=R*T_1 + T,
1300
1301 Optionally, it computes the essential matrix E:
1302
1303 .. math::
1304
1305     E= \vecthreethree{0}{-T_2}{T_1}{T_2}{0}{-T_0}{-T_1}{T_0}{0} *R
1306
1307 where
1308 :math:`T_i` are components of the translation vector
1309 :math:`T` :
1310 :math:`T=[T_0, T_1, T_2]^T` . And the function can also compute the fundamental matrix F:
1311
1312 .. math::
1313
1314     F = cameraMatrix2^{-T} E cameraMatrix1^{-1}
1315
1316 Besides the stereo-related information, the function can also perform a full calibration of each of two cameras. However, due to the high dimensionality of the parameter space and noise in the input data, the function can diverge from the correct solution. If the intrinsic parameters can be estimated with high accuracy for each of the cameras individually (for example, using
1317 :ocv:func:`calibrateCamera` ), you are recommended to do so and then pass ``CV_CALIB_FIX_INTRINSIC`` flag to the function along with the computed intrinsic parameters. Otherwise, if all the parameters are estimated at once, it makes sense to restrict some parameters, for example, pass ``CV_CALIB_SAME_FOCAL_LENGTH`` and ``CV_CALIB_ZERO_TANGENT_DIST`` flags, which is usually a reasonable assumption.
1318
1319 Similarly to :ocv:func:`calibrateCamera` , the function minimizes the total re-projection error for all the points in all the available views from both cameras. The function returns the final value of the re-projection error.
1320
1321
1322
1323 stereoRectify
1324 -----------------
1325 Computes rectification transforms for each head of a calibrated stereo camera.
1326
1327 .. ocv:function:: void stereoRectify( InputArray cameraMatrix1, InputArray distCoeffs1, InputArray cameraMatrix2, InputArray distCoeffs2, Size imageSize, InputArray R, InputArray T, OutputArray R1, OutputArray R2, OutputArray P1, OutputArray P2, OutputArray Q, int flags=CALIB_ZERO_DISPARITY, double alpha=-1, Size newImageSize=Size(), Rect* validPixROI1=0, Rect* validPixROI2=0 )
1328
1329 .. ocv:cfunction:: void cvStereoRectify( const CvMat* camera_matrix1, const CvMat* camera_matrix2, const CvMat* dist_coeffs1, const CvMat* dist_coeffs2, CvSize image_size, const CvMat* R, const CvMat* T, CvMat* R1, CvMat* R2, CvMat* P1, CvMat* P2, CvMat* Q=0, int flags=CV_CALIB_ZERO_DISPARITY, double alpha=-1, CvSize new_image_size=cvSize(0,0), CvRect* valid_pix_ROI1=0, CvRect* valid_pix_ROI2=0 )
1330
1331 .. ocv:pyoldfunction:: cv.StereoRectify(cameraMatrix1, cameraMatrix2, distCoeffs1, distCoeffs2, imageSize, R, T, R1, R2, P1, P2, Q=None, flags=CV_CALIB_ZERO_DISPARITY, alpha=-1, newImageSize=(0, 0)) -> (roi1, roi2)
1332
1333     :param cameraMatrix1: First camera matrix.
1334
1335     :param cameraMatrix2: Second camera matrix.
1336
1337     :param distCoeffs1: First camera distortion parameters.
1338
1339     :param distCoeffs2: Second camera distortion parameters.
1340
1341     :param imageSize: Size of the image used for stereo calibration.
1342
1343     :param R: Rotation matrix between the coordinate systems of the first and the second cameras.
1344
1345     :param T: Translation vector between coordinate systems of the cameras.
1346
1347     :param R1: Output  3x3 rectification transform (rotation matrix) for the first camera.
1348
1349     :param R2: Output  3x3 rectification transform (rotation matrix) for the second camera.
1350
1351     :param P1: Output  3x4 projection matrix in the new (rectified) coordinate systems for the first camera.
1352
1353     :param P2: Output  3x4 projection matrix in the new (rectified) coordinate systems for the second camera.
1354
1355     :param Q: Output  :math:`4 \times 4`  disparity-to-depth mapping matrix (see  :ocv:func:`reprojectImageTo3D` ).
1356
1357     :param flags: Operation flags that may be zero or  ``CV_CALIB_ZERO_DISPARITY`` . If the flag is set, the function makes the principal points of each camera have the same pixel coordinates in the rectified views. And if the flag is not set, the function may still shift the images in the horizontal or vertical direction (depending on the orientation of epipolar lines) to maximize the useful image area.
1358
1359     :param alpha: Free scaling parameter. If it is -1  or absent, the function performs the default scaling. Otherwise, the parameter should be between 0 and 1.  ``alpha=0``  means that the rectified images are zoomed and shifted so that only valid pixels are visible (no black areas after rectification).  ``alpha=1``  means that the rectified image is decimated and shifted so that all the pixels from the original images from the cameras are retained in the rectified images (no source image pixels are lost). Obviously, any intermediate value yields an intermediate result between those two extreme cases.
1360
1361     :param newImageSize: New image resolution after rectification. The same size should be passed to  :ocv:func:`initUndistortRectifyMap` (see the  ``stereo_calib.cpp``  sample in OpenCV samples directory). When (0,0) is passed (default), it is set to the original  ``imageSize`` . Setting it to larger value can help you preserve details in the original image, especially when there is a big radial distortion.
1362
1363     :param validPixROI1: Optional output rectangles inside the rectified images where all the pixels are valid. If  ``alpha=0`` , the ROIs cover the whole images. Otherwise, they are likely to be smaller (see the picture below).
1364
1365     :param validPixROI2: Optional output rectangles inside the rectified images where all the pixels are valid. If  ``alpha=0`` , the ROIs cover the whole images. Otherwise, they are likely to be smaller (see the picture below).
1366
1367 The function computes the rotation matrices for each camera that (virtually) make both camera image planes the same plane. Consequently, this makes all the epipolar lines parallel and thus simplifies the dense stereo correspondence problem. The function takes the matrices computed by
1368 :ocv:func:`stereoCalibrate` as input. As output, it provides two rotation matrices and also two projection matrices in the new coordinates. The function distinguishes the following two cases:
1369
1370 #.
1371     **Horizontal stereo**: the first and the second camera views are shifted relative to each other mainly along the x axis (with possible small vertical shift). In the rectified images, the corresponding epipolar lines in the left and right cameras are horizontal and have the same y-coordinate. P1 and P2 look like:
1372
1373     .. math::
1374
1375         \texttt{P1} = \begin{bmatrix} f & 0 & cx_1 & 0 \\ 0 & f & cy & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix}
1376
1377     .. math::
1378
1379         \texttt{P2} = \begin{bmatrix} f & 0 & cx_2 & T_x*f \\ 0 & f & cy & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} ,
1380
1381     where
1382     :math:`T_x`     is a horizontal shift between the cameras and
1383     :math:`cx_1=cx_2`     if ``CV_CALIB_ZERO_DISPARITY``     is set.
1384
1385 #.
1386     **Vertical stereo**: the first and the second camera views are shifted relative to each other mainly in vertical direction (and probably a bit in the horizontal direction too). The epipolar lines in the rectified images are vertical and have the same x-coordinate. P1 and P2 look like:
1387
1388     .. math::
1389
1390         \texttt{P1} = \begin{bmatrix} f & 0 & cx & 0 \\ 0 & f & cy_1 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix}
1391
1392     .. math::
1393
1394         \texttt{P2} = \begin{bmatrix} f & 0 & cx & 0 \\ 0 & f & cy_2 & T_y*f \\ 0 & 0 & 1 & 0 \end{bmatrix} ,
1395
1396     where
1397     :math:`T_y`     is a vertical shift between the cameras and
1398     :math:`cy_1=cy_2`     if ``CALIB_ZERO_DISPARITY``     is set.
1399
1400 As you can see, the first three columns of ``P1`` and ``P2`` will effectively be the new "rectified" camera matrices.
1401 The matrices, together with ``R1`` and ``R2`` , can then be passed to
1402 :ocv:func:`initUndistortRectifyMap` to initialize the rectification map for each camera.
1403
1404 See below the screenshot from the ``stereo_calib.cpp`` sample. Some red horizontal lines pass through the corresponding image regions. This means that the images are well rectified, which is what most stereo correspondence algorithms rely on. The green rectangles are ``roi1`` and ``roi2`` . You see that their interiors are all valid pixels.
1405
1406 .. image:: pics/stereo_undistort.jpg
1407
1408
1409
1410 stereoRectifyUncalibrated
1411 -----------------------------
1412 Computes a rectification transform for an uncalibrated stereo camera.
1413
1414 .. ocv:function:: bool stereoRectifyUncalibrated( InputArray points1, InputArray points2, InputArray F, Size imgSize, OutputArray H1, OutputArray H2, double threshold=5 )
1415
1416 .. ocv:pyfunction:: cv2.stereoRectifyUncalibrated(points1, points2, F, imgSize[, H1[, H2[, threshold]]]) -> retval, H1, H2
1417
1418 .. ocv:cfunction:: int cvStereoRectifyUncalibrated( const CvMat* points1, const CvMat* points2, const CvMat* F, CvSize img_size, CvMat* H1, CvMat* H2, double threshold=5 )
1419
1420 .. ocv:pyoldfunction:: cv.StereoRectifyUncalibrated(points1, points2, F, imageSize, H1, H2, threshold=5)-> None
1421
1422     :param points1: Array of feature points in the first image.
1423
1424     :param points2: The corresponding points in the second image. The same formats as in  :ocv:func:`findFundamentalMat` are supported.
1425
1426     :param F: Input fundamental matrix. It can be computed from the same set of point pairs using  :ocv:func:`findFundamentalMat` .
1427
1428     :param imgSize: Size of the image.
1429
1430     :param H1: Output rectification homography matrix for the first image.
1431
1432     :param H2: Output rectification homography matrix for the second image.
1433
1434     :param threshold: Optional threshold used to filter out the outliers. If the parameter is greater than zero, all the point pairs that do not comply with the epipolar geometry (that is, the points for which  :math:`|\texttt{points2[i]}^T*\texttt{F}*\texttt{points1[i]}|>\texttt{threshold}` ) are rejected prior to computing the homographies. Otherwise,all the points are considered inliers.
1435
1436 The function computes the rectification transformations without knowing intrinsic parameters of the cameras and their relative position in the space, which explains the suffix "uncalibrated". Another related difference from
1437 :ocv:func:`stereoRectify` is that the function outputs not the rectification transformations in the object (3D) space, but the planar perspective transformations encoded by the homography matrices ``H1`` and ``H2`` . The function implements the algorithm
1438 [Hartley99]_.
1439
1440 .. note::
1441
1442     While the algorithm does not need to know the intrinsic parameters of the cameras, it heavily depends on the epipolar geometry. Therefore, if the camera lenses have a significant distortion, it would be better to correct it before computing the fundamental matrix and calling this function. For example, distortion coefficients can be estimated for each head of stereo camera separately by using :ocv:func:`calibrateCamera` . Then, the images can be corrected using :ocv:func:`undistort` , or just the point coordinates can be corrected with :ocv:func:`undistortPoints` .
1443
1444
1445 triangulatePoints
1446 -----------------
1447 Reconstructs points by triangulation.
1448
1449 .. ocv:function:: void triangulatePoints( InputArray projMatr1, InputArray projMatr2, InputArray projPoints1, InputArray projPoints2, OutputArray points4D )
1450
1451 .. ocv:pyfunction:: cv2.triangulatePoints(projMatr1, projMatr2, projPoints1, projPoints2[, points4D]) -> points4D
1452
1453 .. ocv:cfunction:: void cvTriangulatePoints(CvMat* projMatr1, CvMat* projMatr2, CvMat* projPoints1, CvMat* projPoints2, CvMat* points4D)
1454
1455     :param projMatr1: 3x4 projection matrix of the first camera.
1456
1457     :param projMatr2: 3x4 projection matrix of the second camera.
1458
1459     :param projPoints1: 2xN array of feature points in the first image. In case of c++ version it can be also a vector of feature points or two-channel matrix of size 1xN or Nx1.
1460
1461     :param projPoints2: 2xN array of corresponding points in the second image. In case of c++ version it can be also a vector of feature points or two-channel matrix of size 1xN or Nx1.
1462
1463     :param points4D: 4xN array of reconstructed points in homogeneous coordinates.
1464
1465 The function reconstructs 3-dimensional points (in homogeneous coordinates) by using their observations with a stereo camera. Projections matrices can be obtained from :ocv:func:`stereoRectify`. 
1466
1467 .. seealso::
1468
1469     :ocv:func:`reprojectImageTo3D`
1470
1471
1472 .. [BT98] Birchfield, S. and Tomasi, C. A pixel dissimilarity measure that is insensitive to image sampling. IEEE Transactions on Pattern Analysis and Machine Intelligence. 1998.
1473
1474 .. [BouguetMCT] J.Y.Bouguet. MATLAB calibration tool. http://www.vision.caltech.edu/bouguetj/calib_doc/
1475
1476 .. [Hartley99] Hartley, R.I., Theory and Practice of Projective Rectification. IJCV 35 2, pp 115-127 (1999)
1477
1478 .. [HH08] Hirschmuller, H. Stereo Processing by Semiglobal Matching and Mutual Information, PAMI(30), No. 2, February 2008, pp. 328-341.
1479
1480 .. [Slabaugh] Slabaugh, G.G. Computing Euler angles from a rotation matrix. http://gregslabaugh.name/publications/euler.pdf
1481
1482 .. [Zhang2000] Z. Zhang. A Flexible New Technique for Camera Calibration. IEEE Transactions on Pattern Analysis and Machine Intelligence, 22(11):1330-1334, 2000.