I’m trying to get standard deviations of parameters from a calibrateCameraRO call for for an interactive calibration.
The calibration works but the standard deviations always return NaN - those of intrinsic, extrinsic and object points (in case Release Object is used).
I’m using 4.5.1. (custom build with only calibration, that is core+features2d+imgproc+flann+calib3d).
I’ve traced the problem to these lines. Most notably, sigma2 is negative, since the number of nonzero parameters exceeds the number of total image points.
In one example run, I put in 22 6-point markers. The variables are as follows: total=132 (22x6), nparams=150(22x6+18), nparams_nz=139.
Though these lines have been under scrutiny before they obviously result in wrong results in my case.
First, I assume the correct line should have been
double sigma2 = norm(allErrors, NORM_L2SQR) / (nparams - nparams_nz);
though that is purely based on logic and not knowledge of propagation of standard deviations.
Second, I assume the reason this error has not been detected so far is that I use unusually few points per markers, and few points to start. In a normal calibration, the ratio of total points / total points + 18 is much closer to 1 so the chance that all of them are nonzero might be lower.
Changing the line as described yields me correct looking standard deviations.
Are my assumptions correct?
If so I would go ahead and create a pull request.