标签:学习 测量 序列 目标 rect ati stat find transform
立体成像的基本几何学就是对极几何。
对极几何就是将两个针孔模型和极点结合起来。
本征矩阵E包含在物理空间中两个摄像机相关的旋转与平移信息;
基础矩阵F除了包含E的信息外还包括两个摄像机的内参数。
本征矩阵E包含旋转参数、平移参数。
基础矩阵F包含本征矩阵E和左右相机的内参。
在没有摄像机标定的情况下,可以通过匹配点来求解基础矩阵F,基础矩阵F包含本征矩阵E,
(1)7点算法
缺点对异常点非常敏感。
(2)8点算法
缺点对异常点非常敏感。
(3)RANSAC算法和LmedS算法
立体标定是计算空间上两台摄像机几何关系的过程。
立体标定依赖于查找两台摄像机之间的旋转矩阵R和平移向量T。
R和T都是通过函数cvStereoCalibate()来计算的。
(来自[文献3])
立体校正的目的主要是让左右相机的图像完全行对准。
Hartley校正算法只使用基础矩阵来生成非标定立体视觉;Hartley算法可以通过单个摄像机记录的运动推导出立体结构,虽然单个摄像机会比Bouguet标定算法产生更多的畸变图像。
立体匹配的目的是通过匹配得到视差。
通过视差,可以得出图像点对应的3D坐标。
结果:
(1)查找棋盘角点:cvFindChessboardCorners;
(2)显示角点结果:cvDrawChessboardCorners;
(3)亚像素角点:cvFindCornerSubPix;
(4)立体标定:cvStereoCalibrate;
(5)双目点畸变矫正:cvUndistortPoints
(6)统计双目标定误差:
计算极线(需要基础矩阵F):cvComputeCorrespondEpilines;
注意:基础矩阵F有两种求解方式:
i.通过立体标定cvStereoCalibrate求解;
ii.通过匹配点求解cvFindFundamentalMat;
(7)立体校正(行对准)
[A]方式一:非标定立体校正
a.求基础矩阵F:cvFindFundamentalMat;
b.非标定立体校正(需要基础矩阵F):cvStereoRectifyUncalibrated;
注意:其实可以有两种使用方式:
i.未标定:cvFindFundamentalMat+cvStereoRectifyUncalibrated;
ii.标定:cvStereoCalibrate+cvStereoRectifyUncalibrated;
c.校正映射:cvInitUndistortRectifyMap+cvRemap;
[B]方式二:标定立体校正
a.标定立体校正:cvStereoRectify(注意:可获得重投影矩阵Q);
b.校正映射:cvInitUndistortRectifyMap+cvRemap;
(8)立体匹配(输出视差)
[A]方式一:BM算法
结构体:CvStereoBMState
函数:
cvCreateStereoBMState;
cvFindStereoCorrespondenceBM;
cvReleaseStereoBMState;
[B]方式二:GC算法
结构体:CvStereoGCState
函数:
cvCreateStereoGCState;
cvFindStereoCorrespondenceGC;
cvReleaseStereoGCState;
(9)根据视差d和重投影矩阵Q计算3D坐标(注意:输入项重投影矩阵Q可以从cvStereoRectify获取)
[A]方式一:获取序列点的3D坐标
cvPerspectiveTransform;
[B]方式二:获取整幅图像的3D坐标
cvReprojectImageTo3D。
(1) 新增了 SGBM 立体匹配算法(源自Heiko Hirschmuller的《Stereo Processing by Semi-global Matching and Mutual Information》
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.88.8897&rep=rep1&type=pdf),可以获得比 BM 算法物体轮廓更清晰的视差图(但低纹理区域容易出现横/斜纹路,在 GCstate->fullDP 选项使能时可消减这种异常纹路,但对应区域视差变为0,且运行速度会有所下降),速度比 BM 稍慢, 352*288的帧处理速度大约是 5 帧/秒;
(2) 视差效果:BM < SGBM < GC;处理速度:BM > SGBM > GC ;
(3) BM 算法比2.0版性能有所提升,其状态参数新增了对左右视图感兴趣区域 ROI 的支持(roi1 和 roi2,由stereoRectify函数产生);
(4) BM 算法和 GC 算法的核心代码改动不大,主要是面向多线程运算方面的(由 OpenMP 转向 Intel TBB);
(5) cvFindStereoCorrespondenceBM 函数的disparity参数的数据格式新增了 CV_32F 的支持,这种格式的数据给出实际视差,而 2.0 版只支持 CV_16S,需要除以 16.0 才能得到实际的视差数值。
11.2
(1)OpenCV双目标定的内参结果稍差于Matlab(来自[文献3])
(2)提高标定结果的精度和稳定性的方法(来自[文献3]):
http://www.doc88.com/p-7502068257943.html
标签:学习 测量 序列 目标 rect ati stat find transform
原文地址:https://www.cnblogs.com/zhazhiqiang2018/p/9538986.html