1.什么是相机标定
镜头对光线有折射作用,将现实中的景物投射成一幅图像。这个过程可以用一套完整的数学模型来表示。而相机的标定就是来估计这套模型的参数。
- 对大多数普通相机,他们的数学模型就是小孔成像模型。
- 而对广角和鱼眼镜头他们的模型可能就要复杂一些,OpenCV等采用多项式的形式去近似入射角和成像的关系。
*opencv的鱼眼相机模型,采用直接近似的形式,误差比较大,并不适合一些精确的计算。
目前常见的鱼眼镜头类型有下面几种,他们都有一些有意思的特性,感兴趣的小伙伴可以去了解一下。
Stereographic | Equidistant | Equisolid Angle | Orthographic |
---|---|---|---|
2 f ⋅ t a n ( θ / 2 ) 2f\cdot tan(\theta/2) 2f⋅tan(θ/2) | f ⋅ θ f\cdot\theta f⋅θ | 2 f ⋅ s i n ( θ / 2 ) 2f\cdot sin(\theta/2) 2f⋅sin(θ/2) | f ⋅ s i n ( θ ) f\cdot sin(\theta) f⋅sin(θ) |
2.如何标定
目前相机标定比较成熟和简单的方案就是张正友的棋盘格标定法。仅通过观测图像上棋盘格的二维坐标,并利用棋盘格的实际物理尺寸来计算出相机的数学模型参数以及棋盘格的三维坐标。相关的文章有很多,此处不作详细介绍。
棋盘格
棋盘格的选用比较随意,只有精确数量足够即可,但由于一般棋盘格是重复性图案,为了将图像上的二维坐标和三维坐标对应起来,拍摄过程中,棋盘格必须要拍摄完整。
有问题就有方案,有人将其他领域的Mark方案拿过来用。
相当于给每个网格加了一个位置标记, 可以容忍部分遮挡的问题,但标定方式的本质是不变的。
3.分享
分享几个我平时用的标定软件。
第一个是我基于Opencv写的简单的标定工具,可以用charUco 标定鱼眼相机。期待大家的使用和建议。https://github.com/blanklog/CameraCalibration_Qt
另外Matlab里也有对应的工具,还有一个第三方的工具库,Camera Calibration Toolbox :http://www.vision.caltech.edu/bouguetj/calib_doc/