由于《Hartley, Zisserman ...》书太厚,啃不动。所以最近回头看youtube上的德国鬼子视频, 补习机器视觉最基础的知识。所以本次博文,没有算法,没有代码,纯粹的定义和识记。 老外视频课程地址:https://www.youtube.com/playlist?list=PLgnQpQtFTOGRsi5vzy9PiQpNWHjq-bKN1
本次总结涵盖视频:
Photogrammetry II - 02a - Relative Orientation (2015/16)
Photogrammetry II - 02b - Relative Orientation (2015/16)
Photogrammetry II - 03a - Epipolar Geometry and Essential Matrix (2015/16)
Photogrammetry II - 03b - Epipolar Geometry and Essential Matrix (2015/16)
讲师为:Cyrill Stachniss
我们看下二维图片与三维图片之间的联系。
相机在不同位置观察同一个物点:
- 如果知道相机拍摄位置信息,即可求物点的3D坐标
- 如果不知道相机拍摄的位置信息,若知道场景中若干control point信息,则可以反求相机拍摄位置信息(比如棋盘标定)
那么现在有个问题:
如果不知道场景中点的信息(即没有controlpoints),只知道图像A中的特征点与图像B中哪些特征点对应,我们如何求相机的拍摄位置?
先不回答这个问题,可以带着疑问看下面的基础知识:
- 各个相机之间的姿态camera pose的参数化表达
- 极性约束及数学表达
- 基础矩阵fundmental matrix数学定义
- 极几何及数学性质
- 本质矩阵定义及参数模型
1. 各个相机之间的姿态camera pose的参数化表达
对于标定的相机,需要用12个参数描述两个相机之间的pose关系:
2*(X,Y,Z),位移
2*(Rx,Ry,Rz),旋转
对于未标定的相机,需要用22个参数描述两个相机之间的pose关系:
2*(fx,fy,cx,cy,sheer),相机内参
2*(X,Y,Z),位移
2*(Rx,Ry,Rz),旋转
注:
每个相机的pose理论上可以独立表达,没必要成对。上面这么干是因为后面视频课程里不知道世界绝对坐标,只能搞相对的坐标,故必须成对;
DLT算法可以求单个相机的pose,前提是知道场景中control point的信息,所以此处并不适用;
2. 极性约束及数学表达
下图中O’,O’’分别为两个相机的中心,X是物点。如果两个相机画面的特征点对应场景同一物点,那么O’X、O’’X、O’O’’三个向量理应共面
数学上表达为:
[O’X,O’’X, O’O’’] = 0
注:Triple product,[A,B,C]=(A×B).C,表示三个向量构成的立方体体积,三个向量共面则立方体体积为0。
给定两个相机的图像,如下图所示,我们重建的对象只是一个相似变换(only up to a similarity transformation),把这种模型称为photogrammetricmodel。把photogrammetric model 的方向称为绝对方向。
对于标定的相机:
Mapping the calibrated camera is angle-perserving,即两个画面是相似的,非全等,图A中直线的夹角,在图B中的夹角任然是这个值
两个相机保持了relatvietransformation,如果没有额外的信息,我们无法获取全局偏移和旋转信息,只能知道12-7=5个参数,我们将丢失7个参数:第一个相机的R、T和scale(两个相机之间的距离)
我们可以以第一个相机为参照,计算第二个相机的旋转,还有基线baseline的方向(无法计算基线的长度)。
注:
(1)若构建场景3D模型,我们需要知道什么信息?
如果两个标定相机的基线已知,可求3D模型,但是我们并不知道3D模型在世界坐标系中的坐标;
或者,如果我们知道场景中至少3个control point的信息,即可求绝对方向
(2)若要求scale,我们需要知道什么信息?
已知物体的大小;
或者,已知两个相机相距的位置
对于未标定的相机:
Object can be reconstructed up to a straightline preserving mapping but not angle preserving. (图A与图B中原来直线的平行关系不再保留,即直线夹角的值不再相等),图A中是直线,图B中也是直线。
由于投影变换参数P=KR[I|-Xc]共15个参数未知,给定两个图像的匹配点,只可求22-15=7个参数来描述相对朝向。
另外,需要至少5个controlpoint,才可以求绝对朝向。
下图为相对朝向与绝对朝向的关系图
下表对上述标定和未标定相机的简单总结:
| 每张图参数 | 每对图参数 | 给定匹配点,可求参数 | 计算绝对方向所需最少控制点数 |
标定 | 6 | 12 | 5(Essential matrix) | 3 |
未标定 | 11 | 22 | 7(Fundmental matrix) | 5 |
3. 基础矩阵fundmental matrix数学定义
咱再次看下图,
O’X与O’’X的方向可以从图像坐标x’与x’’获取:
x’=P’X
x’’=P’’X
其中,
P’=K’R’[I|-Xc’]
P’’=K’’R’’[I|-Xc’’]
那么,O’X与O’’X的归一化方向可以表达为:
上式中x’与x’’是图像坐标像素,世界坐标X同归一化方向xn’的关系:
矩阵Sb为skew-symmetric matrix。现在我们把刚才的归一化方向代入上式得:
基础矩阵fundamentalmatrix中包含了两个未标定相机画面之间的相对朝向信息,F中有7个参数,5 for pose,2 for fake intrinics
注:
已知相机投影矩阵P,如何计算F?
将矩阵P分成两块左边3*3作为A’,右边3*1作为a’,即:
扯下图像坐标到世界坐标的过程:
图像坐标-->内参-->相机坐标-->外参-->世界坐标
x_img=K*x_camera=K*[R|T]*x_world
4. 极几何及数学性质
假设投影矩阵P和基础矩阵F已知:
The epipoles are the left and righteigenvectors of the fundamental matrix
5. 本质矩阵定义及参数模型
假设没有失真和图像错误,标定的相机可以简化朝向问题,基于标定矩阵K,我们可以获取图像中的点与物点连线的方向(标定相机可知光线方向)。
公式左边x是direction in camera frame(图像上一点与光心的连线方向(维度3*1),但是不包含camera pose,并不是世界坐标里的光线方向),公式右边x是图像坐标(维度3*1),内参K维度3*3。再看基础矩阵,
注意,
E有5个*度(参数),决定了相机之间的相对朝向。(12-7=5,丢失了第一个相机的RT和两个相机之间的scale)
仔细观察上式,它对于球面坐标的全景图,可以不需要知道内参,即可求E,因为球心至球面任意一点本身即为光线方向,只需通过球面坐标求出其camera frame下的3d point即可。(比如:x=cosacosb,y=cosasinb,z=sina)
本质矩阵是齐次的,奇异的(行列式值为0,矩阵的秩小于3)
====================================================================================================================
关于光线方向再扩展扯下:
小孔成像的光线是经由世界坐标,相机坐标,投影平面坐标,传感器平面坐标,即下图所示:
假设XP是世界坐标中物点坐标,向量XO=[x0,y0,z0]表示世界坐标原点移动值相机坐标原点的偏移量,那么下式就表示从世界坐标转换到相机坐标,因此刚才的光线并不包含camera pose,相机姿态是针对世界坐标而言的
世界坐标系里的光线应该是:
相机坐标系也是三维的,它是通过世界坐标系旋转平移而来
相机的外部参数,描述camera pose
相机的内部参数,描述将相机前方物点投影到最终的成像平面
============================================================================================================================
如何用参数表达E的5个参数,即如何赋予参数物理意义?
请忽略中间和右边这两种模型,左边的模型是最常用的。该模型定义第一个相机的R=I,b为归一化方向向量,现在有6个参数外加1个约束,因此E的*度是5
以上为Youtube课程总结,讲了半天大家一定很不爽,都是些定义概念,根本没讲什么算法,也没有代码演示。
现在如果要回答最开始的问题,如何从给定匹配点获取相机姿态,下篇博文将会讲如何求F和E的算法,然后再讲如何从E和F中提取R和T