相机标定算法之Tsai算法

相机标定算法之Tsai算法,第1张

这篇文章参考了Tsai作者的原文章,原理基本相同,为了方便计算,进行了一部分计算的优化,略有不同。

Tsai标定法为了更准确的实现相机的标定,保证测量结果的精确度,所以考虑了相机的径向畸变。这里先谈一谈相机径向畸变产生的原因。

弄清楚了径向畸变的原因,那么现在开始切入正题。Tsai标定法的四个计算方程。

公式4:理想情况下是,(u0,v0)代表O1在u-v坐标系下的坐标,dx与dy分别表示每个像素在横轴x和纵轴y上的物理尺寸,具体如下图。

则图像中的每个像素在u-v坐标系中的坐标和在x-y坐标系中的坐标之间都存在如下的关系:

但是由于需要考虑径向畸变,所以公式改写为

[] 所以根据平行关系,可以得到以下关系:

(一) opencv里面摄像机标定计算内参数矩阵用的是张正友标定法,非常经典,MATLAB标定工具箱也是用的该方法。具体的标定过程可以参见张正友的原文: http://research.microsoft.com/en-us/um/people/zhang/Papers/TR98-71.pdf。或者参考博文:http://hi.baidu.com/chb_seaok/item/62179235eef8873c2e20c40b

(二) 基于opencv的摄像机标定用的主要函数有:

cvFindChessboardCorners:提取一幅图片上的所有角点。

cvFindCornerSubPix:亚像素精确化。

cvDrawChessboardCorners:显示角点。

cvCalibrateCamera2:标定摄像机参数,求出内参数矩阵,畸变系数,旋转向量和平移向量。

校正主要用的函数有2个:

cvInitUndistortMap:根据cvCalibrateCamera2计算出来的内参数矩阵和畸变系数计算畸变映射。

cvRemap:根据畸变映射校正图像。

(三)详细的过程及参考书籍:

1、《基于OpenCV的计算机视觉技术实现》 陈胜勇,刘盛编著 科学出版社,2008;(该书用OpenCV 1.0库,第14章详细介绍如何用opencv进行摄像机标定,包括摄像机标定的原理,opencv相关库函数详细的介绍以及例子)

2、《学习OpenCV(中文版)》 于仕琪译 清华大学出版社,2009;(OpenCV 2.0库,第11、12章详细介绍如何进行摄像机标定以及三维重建)

3、OpenCV的标定参数中,对于镜头畸变采用的方法是Brown博士在71年发表的文章中提到的。

(四)MATLAB标定也在这里提一下:

http://www.vision.caltech.edu/bouguetj/calib_doc/index.html#examples,该网站有很详细的使用说明

matlab标定工具箱来进行标定,它也是基于张正友的平面标定方法的,有误差分析、标定结果三维重建、重投影计算角点等功能 。

Matlab中的镜头畸变参数采用基于Heikkil博士提出的方法,将非线性干扰因素引入到内外参数的求解过程。标定的过程需要手动选取四个角点,标定图片拍摄的多的话,比较麻烦。

(五)实验结果

自己买了个手机鱼眼镜头,拍摄了16幅标定板图片。注意拍摄的角度不要和成像平面平行。

示例程序049--摄像机标定和鱼眼校正

如果知道图像,不知道相机还怎么通过相机来标定畸变。

1:只给定一张图片可以根据图像中相关特征进行标定,简单讲就是利用: line is straight 这个原理。

2:目前最常用的方法,是通过二维标定板,通过对 reprojection error 最小化进行非线性优化,来实现对相机的标定。并非根据看似高大上的训练集来标定。

3:畸变参数只是标定法所求参数的一部分,即:两个径向畸变系数和两个切向畸变系数。消除畸变的目的是让相机尽量地逼近针孔相机模型,这样相机成像时直线才会保持其直线性。

4:一般常见的畸变校正算法都是根据这一原理来实现的。当然,还有二般的情况。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8044989.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存