| cv.stereoCalibrate - MATLAB File Help |
Calibrates the stereo camera
S = cv.stereoCalibrate(objectPoints, imagePoints1, imagePoints2, imageSize)
[...] = cv.stereoCalibrate(..., 'OptionName', optionValue, ...)
{{[x,y,z], ..}, ...}.{{[x,y], ..}, ...}, observed by the first camera.{{[x,y], ..}, ...}, observed by the second camera.[w,h].A = [fx1 0 cx1; 0 fy1 cy1; 0 0 1].[k1,k2,p1,p2,k3,k4,k5,k6,s1,s2,s3,s4,taux,tauy] of 4, 5, 8, 12
or 14 elements. The output vector length depends on the options.A = [fx2 0 cx2; 0 fy2 cy2; 0 0 1]. The parameter is similar to
cameraMatrix1.distCoeffs1.UseIntrinsicGuess, FixAspectRatio, FixIntrinsic (default), or
FixFocalLength are specified, some or all of the matrix components must
be initialized. See the flags description for details.R and T.
If UseExtrinsicGuess is set, these must be initialized. Not set by
default.cameraMatrix1,cameraMatrix2 and distCoeffs1,
distCoeffs2 so that only R, T, E, and F matrices are estimated.
default true.R, T contain valid initial values that are
optimized further. Otherwise R, T are initialized to the median value
of the pattern views (each dimension separately). default falsefx1,fx2 and fy1,fy2. default false.fy1,fy2 and fix the ratio fx1/fy1,
fx2/fy2. default false.fx1=fx2 and fy1=fy2. default false.UseIntrinsicGuess is set, the
coefficient from the supplied DistCoeffs matrix is used. Otherwise, it
is set to 0. default false.UseIntrinsicGuess is set, the
coefficient from the supplied DistCoeffs matrix is used. Otherwise, it
is set to 0. default false.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. default false.
(RationalModel as false implies FixK4,FixK5,FixK6 as true).s1, s2, s3 and s4 are enabled. To
provide the backward compatibility, this extra flag should be explicitly
specified to make the calibration function use the thin prism model and
return 12 coefficients. If the flag is not set, the function computes and
returns only 5 distortion coefficients. default false.
(ThinPrismModel as false implies FixS1S2S3S4 as true).UseIntrinsicGuess is set, the coefficient
from the supplied DistCoeffs matrix is used. Otherwise, it is set to 0.
default false.tauX and tauY are enabled. To provide the
backward compatibility, this extra flag should be explicitly specified to
make the calibration function use the tilted sensor model and return 14
coefficients. If the flag is not set, the function computes and returns
only 5 distortion coefficients. default false.
(TiltedModel as false implies FixTauXTauY as true).UseIntrinsicGuess is set, the
coefficient from the supplied DistCoeffs matrix is used. Otherwise, it
is set to 0. default false.struct('type','Count+EPS', 'maxCount',30, 'epsilon',1e-6)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 cv.solvePnP), then those
poses definitely relate to each other. This means that, given (R1,T1), it
should be possible to compute (R2,T2). 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 (R,T) so that:
R2 = R * R1
T2 = R * T1 + T
Optionally, it computes the essential matrix E:
E = [ 0 -T2 T1;
T2 0 -T0;
-T1 T0 0] * R
where Ti are components of the translation vector T: T = [T0,T1,T2]'.
And the function can also compute the fundamental matrix F:
F = inv(cameraMatrix2)' * E * inv(cameraMatrix1)
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
cv.calibrateCamera), you are recommended to do so and then pass
FixIntrinsic 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 SameFocalLength and
ZeroTangentDist flags, which is usually a reasonable assumption.
Similarly to cv.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.