基础矩阵的另一种形式
对于红色虚线的说明:
三维点O1在O2相机坐标系下的投影为e',则红色虚线是在求e'像素坐标,其中O1的齐次坐标为(0,0,0,1)T,这里的e'可以看成O1O2和右像平面的交点
平行视图
e'的解释,因为所有直线都平行于u轴,又因为u轴的方向单位化后是(1,0),因此所有极线的方向都可以是(1,0)(极线和u轴平行),又因为极点在无穷远处,因此齐次坐标的第三维为0。
极线为什么是水平的:
p和p'的v坐标一样
总结平行平面的性质:
- 两相机内参矩阵相同
- 两个相机之间的旋转矩阵为单位矩阵(也就是无旋转)
- 两相机只有x轴方向的平移
- 基础矩阵为[e’×]
- 极线水平,平行于u轴
- 极点为无穷远
- p和p'的v坐标一样
深度与视差
xol和xor分别是左相机主点在左相机像素坐标系下的横坐标和左相机像素坐标系下的横坐标(主要像素坐标系的远点都在左上角)
图像校正
最终的目的:
校正前的样子是左右像平面不平行,并且是一上一下,一前一后
实现的步骤:
利用H和H'将左右两个视图映射为平行视图(也就是所有点乘以变换矩阵H和H')
Bouguet算法
我们也可以利用Bouguet算法进行立体校正
首先区分几个名词:
世界坐标系下的点到转换到左相机坐标系下的点的旋转矩阵为Rl,平移矩阵为Tl
一个点在世界坐标系下的坐标转换到左相机坐标系下的旋转矩阵为Rr,平移矩阵为Tr
一个点在左相机下的坐标转换到右相机坐标系下的旋转矩阵为R_l_r,平移矩阵为t_l_r,同时它也是左相机到右相机的旋转矩阵和平移矩阵
假定一个点在世界坐标系下的坐标转换到左相机坐标系下的坐标为Pl,转换到右相机坐标系下的坐标为Pr,则两者的关系为:
R_l_r,T_l_r可根据如下几步推导出来:
———————————————————————————————————————————
备注:
OpenCV官方给出的求解方法(和上述相同)
OpenCV: Camera Calibration and 3D Reconstruction
———————————————————————————————————————————
旋转到平行
旋转矩阵对应的旋转向量根据前文(深入理解旋转矩阵和平移向量的本质)对旋转矩阵和旋转向量的理解,可以知道左相机坐标系以
——————————————————————————————————————————————
备注:
这里面“前文(深入理解旋转矩阵和平移向量的本质)对旋转矩阵和旋转向量的理解”阐述了如下的结论:
—————————————————————————————————————————————
------------------------------------------------------------------------------------------
备注:
旋转矩阵到旋转向量:
------------------------------------------------------------------------------------------
各转一半据说是为了减少畸变和失真
此时两个坐标系平行,但是一前一后一上一下,也就是Ol和Or的连线没有和两个坐标系的X轴重合。
上述得到的结果如下:
推导如下:
旋转到共面
那么我们如何使它们共面呢(不是一前一后一上一下)此时我们用旋转矩阵Rrec(Prec=RrecP)表示空间点从相机坐标系到矫正坐标系的转换。
e1~3分别是O-XrecYrecZrecXYZ轴的基向量。
因此e1~3分别是Rrec的行向量
就是空间点在校正前的坐标系下的坐标到校正后的坐标系的坐标的变换矩阵
参考文章:
小白视角之Bouguet双目立体校正原理 - 知乎 (zhihu.com)
————————————————————————————————
备注:
OpenCV官方处理旋转到共面的方式如下:(猜测)
首先t已知,它就是向量OLOR在坐标系OL下的坐标,坐标系OL在X方向的基向量为(1,0,0)。因此坐标系OL-XLYLZL到Orec-XrecYrecZrec的旋转向量的轴为t✖(1,0,0),角为arcos(t(1,0,0)/||t||||(1,0,0)||)
------------------------------------------------------------------
备注:
本文的不解之处:
同时OR的rec也可以推一下
——————————————————————————————————
双目立体匹配
存在的问题
基线越大越容易发生遮挡,想想如果物体在两个相机中间此时一个物体左边都投影在左相机上去了,右边没有一个点投影到左相机,也就是在左相机的视角下物体左边完全遮住了物体右边。
基线过小,可能在图像上一点点的偏差(u->u'),就会引起深度上很大的偏差(绿色->红色)
一些约束
除非有遮挡不然的话左右视图的对应点次序一致
也就是相邻点的深度差不多,除了边界