||
计算视觉学习材料整理
主要是做的所做工作总结:
1. 摄像机标定摄像机标定的研究按照先后顺序分为如下几个方面:
1:摄像机内参数标定。张正友棋盘格标定法计算摄像机的内参数K矩阵。
2:摄像机外参数标定。分别采用2D模板和3D模板,解摄像机矩阵P,计算R和T。
结论:内参数标定重复性差,外参数标定方法实验结果重复性好。我先计算内参数,然后根据选定的棋盘格角点,计算外参数矩阵(其中,世界坐标系选为棋盘上第一个选取点所在的平面坐标及其垂直方向的三维坐标),计算结果重复性能较好,但是,内标定参数误差会影响外标定的精度。
关于摄像机标定一个疑惑的解答:棋盘格标定法,标定得到的焦距,有两个数:fx和fy,这实际上就是有效焦距,只不过,其单位是像素,不是mm,所以,还不能直接用于估计真实世界特征的物理尺度。那么,真实的物理尺寸大小如何获取呢??
Done:图片的分辨率已知,图片的真实尺寸可以用photoshop查到,所以,真实的焦距尺寸也就不难求解啦!
针对摄像机的标定精度不高的问题,原因分析和相应对策如下:
1:角点检测精度不高的问题。如果采用工具箱自带的张正友标定方法,即使设置distortion优化也不能很好的消除角点检测误差。采用手动检测角点的方法,采用amplify_image.m中的程序,实现角点的精确选取,见图1;
图1:角点的精确选取
2:模型的不确定性和参数的不确定性。K的不确定性,会导致外参数的不确定性。另外,模型的不确定性(是否考虑畸变),采用粒子滤波的方法,对K和R和T的不确定性状态进行粒子滤波,但是由于维数较高,效果并不明显。
3:约束条件没有充分利用。考虑增加约束条件:例如隐消点约束。,通过一组隐消点,可以确定绝对二次曲线w,,可以求出K。
我采用瓷砖实验(或者其他直线特征较为明显的背景),消隐点计算精度较高(10像素以内)。但是难以在实际应用中获取多组隐消点。因此,考虑将其中的某一组平行线作为一条增加的约束条件。
用预测点得精度来衡量标定的精度,结果如下(对6个角点进行预测,框的越准越好):
常规的最小二乘方法:
部分状态粒子滤波:
采用滚动时域估计方法:针对特征点不够的场合。
效果非常不明显,原因为:状态维数太高(11维),粒子滤波效率低下。
2. 位姿解算
姿态解算的基础是外参数的解算。前面已经进行了较为准确的外参数解算过程仿真模拟。这里在其基础上进行扩展:
基于2D棋盘格标定模板,位姿解算步骤及结果如下;
Pre:内参数工具箱标定。
第一步:外参数解算子程序模块。(mycalib02.m及其粒子滤波程序)
虽然外参数解算过程本身重复精度较高,但是其直接受到内参数的影响,因此,实际过程中也难以得到很准确的外参数解算结果。
第二步:通过外参数解算的R,求解姿态角(这部分程序没问题了)
这里要求特征点的世界坐标是已知的,但是,实际应用背景中,这种已知世界坐标的点数量会很少,因此,需要将这种方法和后面的特征匹配点对应单应矩阵计算——外参数解算结合起来。
第三步:计算摄像机旋转前后的姿态角解算结果之间的差别,用以验证结果。
Image0053 (原始) Image0054 (左转10°) Image0056 (右转10°)
-10.7760 6.6200 0.4526
-9.9652 -1.0199 358.4123
-8.0834 14.4724 1.8188
3D模板的位姿解算
如上图所示,我打算从P和F两个角度确定T时刻的位姿
1:摄像机矩阵P的估计——R(phi)和T
摄像机矩阵P的估计:主要有最小二乘《视觉测量p103》,奇异值分解方法《Hartley 多视图几何p121》等。这两种方法都含有矩阵求逆,容易出现奇异。+“vgg_KR_from_P.m”(Andrew)
我采用的是基于初始值得迭代求非线性指标最小的方法。程序见Debug_P.m,该程序的问题,或者说需要注意的地方是,需要给定一个外参数初始估计值,该初始值是我采用myCalib02.m中2D模板坐标计算得到的。给定误差范围大致为:randn*[10*pi/180; 10*pi/180; 10*pi/180; 10;10;10]。
2:相邻图像之间的F矩阵——R和T
这个过程比较复杂,完整的算法应该包括:特征点提取和匹配,依据匹配点计算基本矩阵(采用Ransac方法进行鲁棒计算),然后由基本矩阵计算姿态变化。
第一步:由已知的匹配点,Ransac方法估计基本矩阵F。
见MyFMatrix.m(分别用DLT和Ransac方法进行了估计)
第二步:根据基本矩阵F计算R和T。
该过程的误差传递:匹配点——基本矩阵——本质矩阵——平移向量——旋转矩阵。
先由基本矩阵计算本质矩阵,根据本质矩阵,计算其最小特征值对应的特征向量,也就得到了平移向量t的单位矢量。该过程精度如何呢?实验发现当特征点提取存在误差时,R和T的计算结果都会受到很大影响,即精度不高。见“myFMatrix.m”中的结果。
AUX:从图像中找匹配点。
Harris特征点匹配:
根据该特征点匹配计算基本矩阵,然后计算位姿变化。例如,可以计算出基本矩阵为:F = [0 0 0.00167906184225252;
0 0 0.00217598129086436;
-0.002 -0.0056 0.1986]
但是Harris特征点匹配的精度不会太高,下面考虑用surf特征或者sift特征。(正在看。。。)
附:单应矩阵的计算:
常规的估计方法已经有了,并且用了,见“Outer_Cal.m”中分别用liner 和 nonlinear 的方法进行了单应矩阵的计算。
下面用ransac方法:见“Debug_H.m”,
当选取的特征点(目前是手动选取的)数目较少且噪声不大时(小于ransac方法的threshold),DLT方法和Ransac方法结果是非常相近的。
附:
Other highly recommended Computer Vision software sitesArchiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-3 19:35
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社