Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

calibrateCamera - distortion coefficients differ greatly

I'm trying to calibrate the camera of a Blackberry Playbook tablet. To do this I shot several videos of both a chessboard and an asymmetric circles pattern. I film the pattern from different angles and sides. Using OpenCV, I find a frame that contains the pattern and then I skip a number of frames (equivalent to 0.25-1.0 seconds) for the next input. I use a total of 30 frames. This consistently gives me a reprojection error of about 0.24-0.30, which is reasonable I guess.

My problem is that when I change the amount of frames skipped or the calibration pattern the distortion coefficients change dramatically. I thought it might be caused by motion blur of the camera, but I can't really detect it with my own eyes and I do not move the camera quite gently.

What could I be doing wrong?


Here are some calibration results, taken from output .yml files written using FileStorage:

distCoeffs: [ 7.8525429419470660e-02, -3.0960261342412626e-01, 
             -8.6524434042007194e-04, -1.5106802929380169e-03,
              2.4943420525237567e-01 ]
reprojectionError: 2.5980283849938213e-01

distCoeffs: [ 9.5072469884162333e-02, -4.0909425759139262e-01,
             -1.4098479752338933e-03, -8.5000416228384647e-03,
             4.9234810766112463e-01 ]
reprojectionError: 2.9590490979407219e-01

distCoeffs: [ 8.4964364149716379e-02, -2.6207341751103475e-01,
             -4.4505493959335414e-04, -5.4369272625535434e-03,
              4.7645565934149210e-02 ]
reprojectionError: 2.4693283075662995e-01

distCoeffs: [ -2.4401111960459070e-03, 7.7251179587715735e-01,
              -3.4754734701746902e-03, -5.5816510106682163e-03,
              -3.8066475946718032e+00 ]
reprojectionError: 2.4246869857561970e-01

I call calibrateCamera a total of 4 times with the following flags (I thought this would increase the accuracy, but the results don't change between calibration passes):

flags = 0;
flags = CALIB_USE_INTRINSIC_GUESS | CALIB_FIX_PRINCIPAL_POINT;
flags = CALIB_USE_INTRINSIC_GUESS | CALIB_FIX_ASPECT_RATIO;
flags = CALIB_USE_INTRINSIC_GUESS;