
求解参数(内参、外参、畸变参数)的过程就称之为相机标定(或摄像机标定)。
机器视觉应用中常用的有两种不同类型的镜头:普通镜头和远心镜头。将摄像机与普通镜头的组合称为针孔摄像机模型(默认为面阵图像传感器),摄像机与远心镜头的组合为远心摄像机模型。
相机内参的作用是确定相机从三维空间到二维图像的投影关系。
对于针孔摄像机模型,该投影是透视投影:
相机内参共有6个参数(f,κ,Sx,Sy,Cx,Cy),其中:
f为焦距;
k为径向畸变量级(k<0为桶形畸变;k>0为枕形畸变);
Sx,Sy为缩放比例因子(对于针孔摄像机表示图像传感器水平和垂直方向相邻像素之间的距离);
Cx,Cy是图像的主点(对于针孔相机表示投影中心在成像平面上的垂直投影,也是径向畸变中心)。
相机外参也称为摄像机位姿的作用是确定相机坐标与世界坐标系之间相对位置关系。
摄像机外参共有6个参数(α,β,γ,Tx,Ty,Tz),其中:
R =R(α,β,γ)是旋转矩阵,分别为绕绕x,y,z轴旋转角度;
T= (Tx,Ty,Tz)是平移向量
从世界坐标系到摄像机坐标系的变换属于刚性变换(由平移和旋转组成),相机坐标Pc与世界坐标Pw的关系可以表述为:Pc= RPw + T
畸变(distortion)是对直线投影(rectilinear projection)的一种偏移。直线投影是场景内的一条直线投影到图片上也保持为一条直线。畸变就是由于某种原因(如镜头)一条直线投影到图片上不能保持为一条直线了,这是一种光学畸变(optical aberration)。
在视觉测量中,首先需要定义三个坐标系,即 世界坐标系、摄像机坐标系 、 图像坐标系。
目标物体位置的参考系,用来描述三维空间中的物体和相机之间的坐标位置。
以相机的光心作为原点,Zc轴与光轴重合,并垂直于成像平面,且取摄影方向为正方向,Xc、Yc轴与图像物理坐标系的u、v轴平行。世界坐标系下的物体需先经历刚体变化转到摄像机坐标系(旋转和平移),然后再和图像坐标系发生关系。
是以图像的左上角为原点的图像坐标系(u,v),以像素为单位。用于指定物体在照片中的位置
张正友相机标定流程
1. 打印棋盘标定纸,附加到一个平坦的表面上;
2. 通过移动相机或者平面拍摄标定板各种角度的图片,一般拍摄20张;
3. 检测图片中的特征点;
4. 计算5个内部参数和所有的外部参数;
5. 通过最小二乘法先行求解径向畸变系数;
6. 通过求最小参数值,优化所有参数;
张正友的平面标定方法是介于传统标定方法和自标定方法之间的一种方法,它既避免了传统方法设备要求高, *** 作繁琐等缺点,又较自标定方法精度高,符合通用的桌面视觉系统(DVS)的标定要求。该方法的缺点是确定模板上点阵的物理坐标以及图像和模板之间的点的匹配,专业性要求比较高。
相机的标定,现在基本上都是用张正友标定法,OpenCV中这些模块和函数也非常成熟。只要照着这个流程做下来就行了。
当然首先要弄一个棋盘格做标定板,标定图片需要使用标定板在不同位置、不同角度、不同姿态下拍摄,最少需要3张,以10~20张为宜。
(一) 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--摄像机标定和鱼眼校正
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)