I have a camera with a 1/2.9" image sensor from FLIR and a 12-50mm motorized zoom lens from Theia. Because the lens is a motorized zoom lens, I tried to calibrate the camera for different zoom and focus setups with an asymmetric circle matrix board and OpenCV calibrateCamera function. Each time I calibrate for a specific zoom and focus level, both zoom and focus are fixed.

Ideally, the principal point position (cx, cy) should be close to (720, 540) because the image resolution is 1440 x 1080. When the focal length is 12mm and 50mm, cx and cy look good, less than 60 pixels away from the center. However, they vary a few hundred pixels for some middle focal length settings, such as (834, 546), (913, 596), and (949, 613), but the image center seems to be stable when the lens is zooming and should not move for a few hundred pixels. The other camera intrinsic parameters also look good.

From the minimum to the maximum focal length, I observed that the distortion status changes from barrel distortion to pincushion distortion. From my understanding, there is a range that provides the minimum distortion. The status is also that the less distortion the image has, the worse the principal position is found.

Could anyone provide me any suggestions on solving this unstable principal point estimation problem?


1 Answer 1


It is very natural to have unstable principal estimation with low distortion.

I don't see any other option rather than just defining spline-based continuous time parameter for your zoom lens and give some smoothness constraint around the focal length where the lens distortion is low. This wouldn't take too much time if you are adapt to system modeling and some optimization tools like Ceres.

But I guess it wouldn't make too much difference. Anyway, your optimizer is giving varying principal locations as they don't affect the residual much.

  • $\begingroup$ Thanks! However, another difficulty is that I can only get a relatively stable principal point estimation in a small range, from 12mm to 18mm and 45mm to 50mm. I doubt that whether they are enough to fit a good spline-based model. Would it be reasonable to always fixing the principal point position in the center of the image? $\endgroup$
    – sixer
    Commented Aug 3, 2021 at 14:22
  • 1
    $\begingroup$ If you fix it to center all time that will create errors at both ends. I guess 4 is enough to make a smooth transition. Just add a pinning constraint (cx = w/2, cy = h/2) at 19mm to your spline control point optimizer. $\endgroup$ Commented Aug 4, 2021 at 5:34

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.