单目标定:从理论到OpenCV实践( 二 )


(3)张正友标定法

单目标定:从理论到OpenCV实践

文章插图
5.4.1 采用的理论方法
5.4.2 张正友标定相关理论资料
(1)精简版8页《bya Plane from》-
(2)完整版22页《ANewfor.rar》-
网址:~zhang//TR98-71.pdf
(3)张正友主页:
(3)张正友主页中的相机标定页:
5.4.3 Brown论文资料六、矫正
利用棋盘标定的结果可进行畸变矫正 。
七、.1主要相关函数 7.1 单目标定流程与对应主要函数
(1)查找棋盘角点:ers;
(2)亚像素角点:;
(3)显示角点结果:ers;
(4)单目标定:
[A]方式一:获取摄像机内外参数:(内部包含
);
[B]方式二:根据摄像机内参数求取外参数:
注意:上述两种方式输出的是旋转向量和平移向量,如果需要转换为矩阵使用函数,该函数可以将向量和矩阵进行互转 。
(5)图像畸变矫正:
[A]单目图像畸变矫正方式一(效率低):;
[B]单目图像畸变矫正方式二(效率高):+;
[C]双目点畸变矫正:(注意:输入输出为点坐标,只能在双目标定中使用) 。
(6)统计单目标定误差(计算3D点在图像上的投影坐标与棋盘点坐标的差值):
+ 。
注意:输入的是旋转向量和平移向量 。
7.2 主要相关函数详解 7.2.1 详解
(1)函数原型
a2(const CvMat*,
const CvMat*,
const CvMat*,
,
CvMat*,//[]
CvMat*,//[]
CvMat*=NULL,//[]
CvMat*=NULL,//[]
=0
);
(2)参数注释(9个)
定标点的世界坐标,为3xN或者Nx3的矩阵,这里N是所有视图中点的总数 。
定标点的图像坐标,为2xN或者Nx2的矩阵,这里N是所有视图中点的总数 。
向量,指定不同视图里点的数目,1xM或者Mx1向量,M是视图数目 。
图像大小,只用在初始化内参数时 。
输出内参矩阵(A),如果指定
和(或),fx、fy、cx和cy部分或者全部必须被初始化 。
输出大小为4x1或者1x4的向量,里面为形变参数[k1, k2, p1, p2] 。
输出大小为3xM或者Mx3的矩阵,里面为旋转向量(旋转矩阵的紧凑表示方式,具体参考函数)
不同的标志,可以是0(默认),或者下面值的组合:
(3)单目定标函数采用怎样的 flags 比较合适?(来自[文献4])
由于一般镜头只需要计算k1,k2,p1,p2四个参数,所以我们首先要设置 ;其次,如果所用的摄像头不是高端的、切向畸变系数非常少的,则不要设置,否则单目校正误差会很大;如果事先知道摄像头内参的大概数值,并且函数的第五个参数非空,则也可设置,以输入的为初始估计值来加快内参的计算;其它的 flag 一般都不需要设置,对单目定标的影响不大 。
7.2.2 详解
(1)函数原型
( const CvMat*,
const CvMat*,
const CvMat*,
const CvMat*,
CvMat*,//[]
CvMat*//[]
);
(2)参数注释(6个)
定标点的坐标,为3xN或者Nx3的矩阵,这里N是视图中的个数 。
定标点在图像内的坐标,为2xN或者Nx2的矩阵,这里N是视图中的个数 。
内参矩阵(A) 。
大小为4x1或者1x4的向量,里面为形变参数[k1,k2,p1,p2] 。如果是NULL,所有的形变系数都为0 。
输出大小为3x1或者1x3的矩阵,里面为旋转向量(旋转矩阵的紧凑表示方式,具体参考函数) 。
大小为3x1或1x3的矩阵,里面为平移向量 。
7.3 单目标定示例代码
八、单目标定效果不好的原因分析
(1)问题(来自[文献3]):中用 进行相机标定的精度差,标定结果不稳定 。