Skip to content

Commit 43b03b6

Browse files
committed
Merge pull request opencv#8864 from sovrasov:calib_flags_update
2 parents 594652c + c0e456d commit 43b03b6

File tree

2 files changed

+43
-38
lines changed

2 files changed

+43
-38
lines changed

modules/calib3d/include/opencv2/calib3d.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,7 @@ enum { CALIB_USE_INTRINSIC_GUESS = 0x00001,
268268
CALIB_TILTED_MODEL = 0x40000,
269269
CALIB_FIX_TAUX_TAUY = 0x80000,
270270
CALIB_USE_QR = 0x100000, //!< use QR instead of SVD decomposition for solving. Faster but potentially less precise
271+
CALIB_FIX_TANGENT_DIST = 0x200000,
271272
// only for stereo
272273
CALIB_FIX_INTRINSIC = 0x00100,
273274
CALIB_SAME_FOCAL_LENGTH = 0x00200,

modules/calib3d/src/calibration.cpp

Lines changed: 42 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1319,7 +1319,7 @@ static double cvCalibrateCamera2Internal( const CvMat* objectPoints,
13191319
(npoints->rows != 1 && npoints->cols != 1) )
13201320
CV_Error( CV_StsUnsupportedFormat,
13211321
"the array of point counters must be 1-dimensional integer vector" );
1322-
if(flags & CV_CALIB_TILTED_MODEL)
1322+
if(flags & CALIB_TILTED_MODEL)
13231323
{
13241324
//when the tilted sensor model is used the distortion coefficients matrix must have 14 parameters
13251325
if (distCoeffs->cols*distCoeffs->rows != 14)
@@ -1328,7 +1328,7 @@ static double cvCalibrateCamera2Internal( const CvMat* objectPoints,
13281328
else
13291329
{
13301330
//when the thin prism model is used the distortion coefficients matrix must have 12 parameters
1331-
if(flags & CV_CALIB_THIN_PRISM_MODEL)
1331+
if(flags & CALIB_THIN_PRISM_MODEL)
13321332
if (distCoeffs->cols*distCoeffs->rows != 12)
13331333
CV_Error( CV_StsBadArg, "Thin prism model must have 12 parameters in the distortion matrix" );
13341334
}
@@ -1498,24 +1498,28 @@ static double cvCalibrateCamera2Internal( const CvMat* objectPoints,
14981498

14991499
if(flags & CALIB_FIX_ASPECT_RATIO)
15001500
mask[0] = 0;
1501-
if( flags & CV_CALIB_FIX_FOCAL_LENGTH )
1501+
if( flags & CALIB_FIX_FOCAL_LENGTH )
15021502
mask[0] = mask[1] = 0;
1503-
if( flags & CV_CALIB_FIX_PRINCIPAL_POINT )
1503+
if( flags & CALIB_FIX_PRINCIPAL_POINT )
15041504
mask[2] = mask[3] = 0;
1505-
if( flags & CV_CALIB_ZERO_TANGENT_DIST )
1505+
if( flags & CALIB_ZERO_TANGENT_DIST )
15061506
{
15071507
param[6] = param[7] = 0;
15081508
mask[6] = mask[7] = 0;
15091509
}
15101510
if( !(flags & CALIB_RATIONAL_MODEL) )
15111511
flags |= CALIB_FIX_K4 + CALIB_FIX_K5 + CALIB_FIX_K6;
1512-
if( !(flags & CV_CALIB_THIN_PRISM_MODEL))
1512+
if( !(flags & CALIB_THIN_PRISM_MODEL))
15131513
flags |= CALIB_FIX_S1_S2_S3_S4;
1514-
if( !(flags & CV_CALIB_TILTED_MODEL))
1514+
if( !(flags & CALIB_TILTED_MODEL))
15151515
flags |= CALIB_FIX_TAUX_TAUY;
15161516

15171517
mask[ 4] = !(flags & CALIB_FIX_K1);
15181518
mask[ 5] = !(flags & CALIB_FIX_K2);
1519+
if( flags & CALIB_FIX_TANGENT_DIST )
1520+
{
1521+
mask[6] = mask[7] = 1;
1522+
}
15191523
mask[ 8] = !(flags & CALIB_FIX_K3);
15201524
mask[ 9] = !(flags & CALIB_FIX_K4);
15211525
mask[10] = !(flags & CALIB_FIX_K5);
@@ -1817,39 +1821,39 @@ double cvStereoCalibrate( const CvMat* _objectPoints, const CvMat* _imagePoints1
18171821
cvConvert( points, imagePoints[k] );
18181822
cvReshape( imagePoints[k], imagePoints[k], 2, 1 );
18191823

1820-
if( flags & (CV_CALIB_FIX_INTRINSIC|CV_CALIB_USE_INTRINSIC_GUESS|
1821-
CV_CALIB_FIX_ASPECT_RATIO|CV_CALIB_FIX_FOCAL_LENGTH) )
1824+
if( flags & (CALIB_FIX_INTRINSIC|CALIB_USE_INTRINSIC_GUESS|
1825+
CALIB_FIX_ASPECT_RATIO|CALIB_FIX_FOCAL_LENGTH) )
18221826
cvConvert( cameraMatrix, &K[k] );
18231827

1824-
if( flags & (CV_CALIB_FIX_INTRINSIC|CV_CALIB_USE_INTRINSIC_GUESS|
1825-
CV_CALIB_FIX_K1|CV_CALIB_FIX_K2|CV_CALIB_FIX_K3|CV_CALIB_FIX_K4|CV_CALIB_FIX_K5|CV_CALIB_FIX_K6) )
1828+
if( flags & (CALIB_FIX_INTRINSIC|CALIB_USE_INTRINSIC_GUESS|
1829+
CALIB_FIX_K1|CALIB_FIX_K2|CALIB_FIX_K3|CALIB_FIX_K4|CALIB_FIX_K5|CALIB_FIX_K6) )
18261830
{
18271831
CvMat tdist = cvMat( distCoeffs->rows, distCoeffs->cols,
18281832
CV_MAKETYPE(CV_64F,CV_MAT_CN(distCoeffs->type)), Dist[k].data.db );
18291833
cvConvert( distCoeffs, &tdist );
18301834
}
18311835

1832-
if( !(flags & (CV_CALIB_FIX_INTRINSIC|CV_CALIB_USE_INTRINSIC_GUESS)))
1836+
if( !(flags & (CALIB_FIX_INTRINSIC|CALIB_USE_INTRINSIC_GUESS)))
18331837
{
18341838
cvCalibrateCamera2( objectPoints, imagePoints[k],
18351839
npoints, imageSize, &K[k], &Dist[k], NULL, NULL, flags );
18361840
}
18371841
}
18381842

1839-
if( flags & CV_CALIB_SAME_FOCAL_LENGTH )
1843+
if( flags & CALIB_SAME_FOCAL_LENGTH )
18401844
{
18411845
static const int avg_idx[] = { 0, 4, 2, 5, -1 };
18421846
for( k = 0; avg_idx[k] >= 0; k++ )
18431847
A[0][avg_idx[k]] = A[1][avg_idx[k]] = (A[0][avg_idx[k]] + A[1][avg_idx[k]])*0.5;
18441848
}
18451849

1846-
if( flags & CV_CALIB_FIX_ASPECT_RATIO )
1850+
if( flags & CALIB_FIX_ASPECT_RATIO )
18471851
{
18481852
for( k = 0; k < 2; k++ )
18491853
aspectRatio[k] = A[k][0]/A[k][4];
18501854
}
18511855

1852-
recomputeIntrinsics = (flags & CV_CALIB_FIX_INTRINSIC) == 0;
1856+
recomputeIntrinsics = (flags & CALIB_FIX_INTRINSIC) == 0;
18531857

18541858
err.reset(cvCreateMat( maxPoints*2, 1, CV_64F ));
18551859
Je.reset(cvCreateMat( maxPoints*2, 6, CV_64F ));
@@ -1873,40 +1877,40 @@ double cvStereoCalibrate( const CvMat* _objectPoints, const CvMat* _imagePoints1
18731877
if( recomputeIntrinsics )
18741878
{
18751879
uchar* imask = solver.mask->data.ptr + nparams - NINTRINSIC*2;
1876-
if( !(flags & CV_CALIB_RATIONAL_MODEL) )
1877-
flags |= CV_CALIB_FIX_K4 | CV_CALIB_FIX_K5 | CV_CALIB_FIX_K6;
1878-
if( !(flags & CV_CALIB_THIN_PRISM_MODEL) )
1879-
flags |= CV_CALIB_FIX_S1_S2_S3_S4;
1880-
if( !(flags & CV_CALIB_TILTED_MODEL) )
1881-
flags |= CV_CALIB_FIX_TAUX_TAUY;
1882-
if( flags & CV_CALIB_FIX_ASPECT_RATIO )
1880+
if( !(flags & CALIB_RATIONAL_MODEL) )
1881+
flags |= CALIB_FIX_K4 | CALIB_FIX_K5 | CALIB_FIX_K6;
1882+
if( !(flags & CALIB_THIN_PRISM_MODEL) )
1883+
flags |= CALIB_FIX_S1_S2_S3_S4;
1884+
if( !(flags & CALIB_TILTED_MODEL) )
1885+
flags |= CALIB_FIX_TAUX_TAUY;
1886+
if( flags & CALIB_FIX_ASPECT_RATIO )
18831887
imask[0] = imask[NINTRINSIC] = 0;
1884-
if( flags & CV_CALIB_FIX_FOCAL_LENGTH )
1888+
if( flags & CALIB_FIX_FOCAL_LENGTH )
18851889
imask[0] = imask[1] = imask[NINTRINSIC] = imask[NINTRINSIC+1] = 0;
1886-
if( flags & CV_CALIB_FIX_PRINCIPAL_POINT )
1890+
if( flags & CALIB_FIX_PRINCIPAL_POINT )
18871891
imask[2] = imask[3] = imask[NINTRINSIC+2] = imask[NINTRINSIC+3] = 0;
1888-
if( flags & CV_CALIB_ZERO_TANGENT_DIST )
1892+
if( flags & CALIB_ZERO_TANGENT_DIST )
18891893
imask[6] = imask[7] = imask[NINTRINSIC+6] = imask[NINTRINSIC+7] = 0;
1890-
if( flags & CV_CALIB_FIX_K1 )
1894+
if( flags & CALIB_FIX_K1 )
18911895
imask[4] = imask[NINTRINSIC+4] = 0;
1892-
if( flags & CV_CALIB_FIX_K2 )
1896+
if( flags & CALIB_FIX_K2 )
18931897
imask[5] = imask[NINTRINSIC+5] = 0;
1894-
if( flags & CV_CALIB_FIX_K3 )
1898+
if( flags & CALIB_FIX_K3 )
18951899
imask[8] = imask[NINTRINSIC+8] = 0;
1896-
if( flags & CV_CALIB_FIX_K4 )
1900+
if( flags & CALIB_FIX_K4 )
18971901
imask[9] = imask[NINTRINSIC+9] = 0;
1898-
if( flags & CV_CALIB_FIX_K5 )
1902+
if( flags & CALIB_FIX_K5 )
18991903
imask[10] = imask[NINTRINSIC+10] = 0;
1900-
if( flags & CV_CALIB_FIX_K6 )
1904+
if( flags & CALIB_FIX_K6 )
19011905
imask[11] = imask[NINTRINSIC+11] = 0;
1902-
if( flags & CV_CALIB_FIX_S1_S2_S3_S4 )
1906+
if( flags & CALIB_FIX_S1_S2_S3_S4 )
19031907
{
19041908
imask[12] = imask[NINTRINSIC+12] = 0;
19051909
imask[13] = imask[NINTRINSIC+13] = 0;
19061910
imask[14] = imask[NINTRINSIC+14] = 0;
19071911
imask[15] = imask[NINTRINSIC+15] = 0;
19081912
}
1909-
if( flags & CV_CALIB_FIX_TAUX_TAUY )
1913+
if( flags & CALIB_FIX_TAUX_TAUY )
19101914
{
19111915
imask[16] = imask[NINTRINSIC+16] = 0;
19121916
imask[17] = imask[NINTRINSIC+17] = 0;
@@ -1977,7 +1981,7 @@ double cvStereoCalibrate( const CvMat* _objectPoints, const CvMat* _imagePoints1
19771981
for( k = 0; k < 2; k++ )
19781982
{
19791983
double* iparam = solver.param->data.db + (nimages+1)*6 + k*NINTRINSIC;
1980-
if( flags & CV_CALIB_ZERO_TANGENT_DIST )
1984+
if( flags & CALIB_ZERO_TANGENT_DIST )
19811985
dk[k][2] = dk[k][3] = 0;
19821986
iparam[0] = A[k][0]; iparam[1] = A[k][4]; iparam[2] = A[k][2]; iparam[3] = A[k][5];
19831987
iparam[4] = dk[k][0]; iparam[5] = dk[k][1]; iparam[6] = dk[k][2];
@@ -2027,14 +2031,14 @@ double cvStereoCalibrate( const CvMat* _objectPoints, const CvMat* _imagePoints1
20272031
dpdf = &dpdf_hdr;
20282032
dpdc = &dpdc_hdr;
20292033
dpdk = &dpdk_hdr;
2030-
if( flags & CV_CALIB_SAME_FOCAL_LENGTH )
2034+
if( flags & CALIB_SAME_FOCAL_LENGTH )
20312035
{
20322036
iparam[NINTRINSIC] = iparam[0];
20332037
iparam[NINTRINSIC+1] = iparam[1];
20342038
ipparam[NINTRINSIC] = ipparam[0];
20352039
ipparam[NINTRINSIC+1] = ipparam[1];
20362040
}
2037-
if( flags & CV_CALIB_FIX_ASPECT_RATIO )
2041+
if( flags & CALIB_FIX_ASPECT_RATIO )
20382042
{
20392043
iparam[0] = iparam[1]*aspectRatio[0];
20402044
iparam[NINTRINSIC] = iparam[NINTRINSIC+1]*aspectRatio[1];
@@ -2096,7 +2100,7 @@ double cvStereoCalibrate( const CvMat* _objectPoints, const CvMat* _imagePoints1
20962100
if( JtJ || JtErr )
20972101
cvProjectPoints2( &objpt_i, &om[k], &T[k], &K[k], &Dist[k],
20982102
&tmpimagePoints, dpdrot, dpdt, dpdf, dpdc, dpdk,
2099-
(flags & CV_CALIB_FIX_ASPECT_RATIO) ? aspectRatio[k] : 0);
2103+
(flags & CALIB_FIX_ASPECT_RATIO) ? aspectRatio[k] : 0);
21002104
else
21012105
cvProjectPoints2( &objpt_i, &om[k], &T[k], &K[k], &Dist[k], &tmpimagePoints );
21022106
cvSub( &tmpimagePoints, &imgpt_i[k], &tmpimagePoints );
@@ -2372,7 +2376,7 @@ void cvStereoRectify( const CvMat* _cameraMatrix1, const CvMat* _cameraMatrix2,
23722376

23732377
// For simplicity, set the principal points for both cameras to be the average
23742378
// of the two principal points (either one of or both x- and y- coordinates)
2375-
if( flags & CV_CALIB_ZERO_DISPARITY )
2379+
if( flags & CALIB_ZERO_DISPARITY )
23762380
{
23772381
cc_new[0].x = cc_new[1].x = (cc_new[0].x + cc_new[1].x)*0.5;
23782382
cc_new[0].y = cc_new[1].y = (cc_new[0].y + cc_new[1].y)*0.5;

0 commit comments

Comments
 (0)