畸变参数 k3
通常用于描述径向畸变的更高阶效应,即在需要高精度的应用中可以用到,一般的应用中 k1, k2
足矣。
常见的应用中, orbslam3 中是否传入 k3
是可选的,而 kalibr 标定中则只需要传入 k1, k2
。但计算 k3
时的 k1, k2
不等于不计算 k3
时的 k1, k2
,因此需要学会两种场景下参数的计算。
参考:https://blog.csdn.net/zong596568821xp/article/details/115286088
在调用 cv.calibrateCamera()
时,传入参数 flags=cv.CALIB_FIX_K3
即可,代码如下:
# 1. 计算 k1, k2, k3
ret, mtx, dist, rvecs, tvecs = cv.calibrateCamera(
objectPoints=objpoints, imagePoints=imgpoints, imageSize=imageSize, cameraMatrix=None, distCoeffs=None
)
# Camera.k1: -0.0503
# Camera.k2: 0.0654
# Camera.k3: -0.0200
# 2. 计算 k1, k2
ret, mtx, dist, rvecs, tvecs = cv.calibrateCamera(
objectPoints=objpoints, imagePoints=imgpoints, imageSize=imageSize, cameraMatrix=None, distCoeffs=None, flags=cv.CALIB_FIX_K3
)
# Camera.k1: -0.0355
# Camera.k2: 0.0346