Hi all,

I am working on the camera calibration for a super-fisheye lenses (i.e., FOV above 180 degree). According to the reference below, I know the fisheye calibration algorithm implemented at currently opencv cannot handle the lens with FOV above 180 degree.

https://stackoverflow.com/questions/31089265/what-are-the-main-references-to-the-fish-eye-camera-model-in-opencv3-0-0dev/34388476

Therefore, I searched the pre-version of opencv-4.0.0 and found this issue has been opened and resolved by

https://github.com/opencv/opencv/pull/6801

https://github.com/opencv/opencv/pull/6801/files

in the same time, you can find the corresponding document at

The formulas presented at document are reasonable and correct. Next, I compare this document with its corresponds source code. However, I found one piece of code and documents are contradictory:

[document]

a=x/z and b=y/z ………….(1)

x’=(theta_d/r)a ………….(2)

y’=(theta_d/r)b ………….(3)

[code at modules/calib3d/src/fisheye.cpp]

Vec2d x(Y[0], Y[1]); ………….(4)

Vec2d xd1 = x * cdist; ………….(5)

“xd1” at code and “x’, y’” at document are used to represent the location of one incoming light ray which mapping on the camera’s normalize image plane (i.e., f = 1). In which, if the document and code are identical, following two check points should be satisfied at the same time:

(a) “cdist” at code and “theta_d/r” at document should be the same.

(b) “x” at code should be the same as “a, b” at document.

However, check point (b) cannot been satisfied. For the convenience of explanation, I unifying the naming of variables at these two equations as below

[document]

a=x/z and b=y/z ………….(1)

x’=(theta_d/r)a ………….(2)

y’=(theta_d/r)b ………….(3)

[code at modules/calib3d/src/fisheye.cpp]

a=x and b=y ………….(4)

x’=(theta_d/r)a

y’=(theta_d/r)b ………….(5)

Obviously, equation (1) and (4) are difference. Is any one help to recheck it? Is my understanding correct?

Thanks.