博主在博客园的第一篇博客,以著名的张大牛标定法开始吧!
具体标定原理就不详细说了,资料数不胜数,重点看张正友的原著《A Flexible New Technique for Camera Calibration》,搞明白这篇文章就足够了。
好了,现在主要说一下标定过程,并附上博主自己调用Opencv接口编写的代码。
1.拍摄棋盘格图片,8幅左右合适,文献里说n=8时,最小二乘法计算内参有稳定解。所以我就拍了9幅。
2. 读取棋盘格图像,提取角点(注意:都是内角点)。为了提高角点提取精度,进一步进行亚像素角点的提取,附上亚像素角点提取后的棋盘格图像。
3. 开始摄像机标定,opencv1.0 2.0版只有一种摄像机标定模型,就是普通的小孔成像模型,在cv::空间下。而从opencv3.0开始,新增了一种鱼眼相机标定模型,在fisheye::空间下。两种模型的主要区别在于像与物的投影关系不同,具体的文献资料依然是数不胜数,这里就不赘述。根据opencv官方文档的建议,在畸变程度较大的广角镜头(比如:鱼眼镜头)上进行摄像机标定和畸变校正,最好是用fisheye模型,该模型在图像边缘畸变程度很大的地方比普通相机模型的效果要好。
4. 对标定结果进行评价
5.保存标定结果,写入txt文件,主要是内参(归一化焦距,fx,fy; 光心坐标cx,cy;以及畸变系数k1,k2k3...)