本篇文章用来记录近期学习双目视觉定位的收获,后续我将随着不断深入学习对文章进行补充
视觉是人类感知外界环境信息的重要途径,其中人类约有80%的环境信息是通过双眼获取的。双目视觉系统是典型的类人视觉模型,可以很好的解决物体的识别与定位问题。
双目视觉定位的实现主要分为以下几个内容:
1. 相机标定
坐标系名称 | 坐标系描述 |
---|---|
世界坐标系(3D) | 描述目标在真实世界中的位置引入的参考坐标系(Xw,Yw,Zw) |
相机坐标系(3D) | 联系世界坐标系与图像坐标系的桥梁,一般取摄像机的光学轴为z轴(Xc,Yc,Zc) |
图像物理坐标系(2D) | 根据投影关系引入,方便进一步得到像素坐标,单位为毫米,坐标原点为摄像机光轴与图像物理坐标系的交点位置(x,y) |
图像像素坐标系(2D) | 真正从相机内读到的信息,图像物理坐标的离散化,以像素为单位,坐标原点在左上角(u,v) |
明确各个坐标系之间的相互转换关系:
(1)世界坐标系与相机坐标系
这是将一个三维的坐标系转换成另一个三维的坐标系,这两个坐标系之间的转换属于刚体转换,物体只改变在两个坐标系中的空间位置(平移)和朝向(旋转),而不改变其形状。它们之间的转换关系可以用旋转矩阵R和平移矩阵T来完成,这两个矩阵反映了世界坐标系与相机坐标系之间的转换关系,合称外参矩阵Lw。获得了外参矩阵,这样已知世界坐标系中的一点通过转换关系就可以得到此点在相机坐标系的位置,反之亦成立。
两个坐标系之间的转换关系用矩阵的形式表示如下:
[ X c Y c Z c ] \begin{bmatrix} Xc\\ Yc\\ Zc\\ \end{bmatrix} ⎣⎡XcYcZc⎦⎤ = R * [ X w Y w Z w ] \begin{bmatrix} Xw\\ Yw\\ Zw\\ \end{bmatrix} ⎣⎡XwYwZw⎦⎤ + T = [ R T 0 T 1 ] \begin{bmatrix} R&T\\ 0^T&1\\ \end{bmatrix} [R0TT1] [ X Y Z 1 ] \begin{bmatrix} X\\ Y\\ Z\\ 1\\ \end{bmatrix} ⎣⎢⎢⎡XYZ1⎦⎥⎥⎤ = Lw * [ X Y Z 1 ] \begin{bmatrix} X\\ Y\\ Z\\ 1\\ \end{bmatrix} ⎣⎢⎢⎡XYZ1⎦⎥⎥⎤
旋转矩阵R为3*3矩阵,是三个旋转矩阵相乘的结果,代表了坐标系旋转的三个方向。平移矩阵T为3*1矩阵。
(2)相机坐标系与图像物理坐标系
这是将一个三维的坐标系转换成一个二维的坐标系,这两个坐标系的转换要通过几何投影关系获得,下面是两个坐标系的投影关系示意图:
在这里,我们可以轻松的由三角形的相似性原理得到如下关系式:
x f \frac{x}{f} fx = X c Z c \frac{Xc}{Zc} ZcXc
y f \frac{y}{f} fy = Y c Z c \frac{Yc}{Zc} ZcYc
⇓ \Downarrow ⇓
Zc*x = f * Xc
Zc*y = f * Yc
同样,可以用矩阵的形式来表示如下:
Zc * [ x y 1 ] \begin{bmatrix} x\\ y\\ 1\\ \end{bmatrix} ⎣⎡xy1⎦⎤ = [ f 0 0 0 0 f 0 0 0 0 1 0 ] \begin{bmatrix} f&0&0&0\\ 0&f&0&0\\ 0&0&1&0\\ \end{bmatrix} ⎣⎡f000f0001000⎦⎤ [ X c Y c Z c 1 ] \begin{bmatrix} Xc\\ Yc\\ Zc\\ 1\\ \end{bmatrix} ⎣⎢⎢⎡XcYcZc1⎦⎥⎥⎤
(3)图像物理坐标系与图像像素坐标系
首先以一个很形象的例子来说明两个坐标系间的区别。物理坐标系是一个连续的概念,它是以毫米为单位,就好某一观众在电影院里的具体坐标值(3.4,5.9);而像素坐标系是一个离散的概念,它是以像素作为单位,只能是整数值坐标,就好比某一观众在电影院里的位置是(第三排,第六列)。另外还需要注意的是,这两个坐标系的原点位置也不相同,物理坐标系将原点定为摄像机光轴与图像物理坐标系的交点位置,通常称其为主点;而像素坐标系则以像素图像的左上角为原点。
这是将一个连续的二维坐标系转换成了一个离散的二维坐标系,这两个坐标系之间的转换关系要通过数字离散化的方式获得。两个坐标系之间的转换关系用矩阵的形式表示如下:
[ u v 1 ] \begin{bmatrix} u\\ v\\ 1\\ \end{bmatrix} ⎣⎡uv1⎦⎤= [ α 0 0 0 β 0 0 0 1 ] \begin{bmatrix} \alpha&0&0\\ 0&\beta&0\\ 0&0&1\\ \end{bmatrix} ⎣⎡α000β0001⎦⎤ [ x y 1 ] \begin{bmatrix} x\\ y\\ 1\\ \end{bmatrix} ⎣⎡xy1⎦⎤
α \alpha α 为x方向单位长度包括像素的个数, β \beta β为y方向单位长度包括像素的个数,(u,v)为像素坐标,(x,y)为物理坐标
考虑到两个坐标系中的原点位置不同,假设主点在像素坐标系中的坐标为(u0,v0),则有:
[ u v 1 ] \begin{bmatrix} u\\ v\\ 1\\ \end{bmatrix} ⎣⎡uv1⎦⎤ = [ α 0 u o 0 β v o 0 0 1 ] \begin{bmatrix} \alpha&0&uo\\ 0&\beta&vo\\ 0&0&1\\ \end{bmatrix} ⎣⎡α000β0uovo1⎦⎤ [ x y 1 ] \begin{bmatrix} x\\ y\\ 1\\ \end{bmatrix} ⎣⎡xy1⎦⎤
将相机坐标系到物理坐标系的转换矩阵与物理坐标系到像素坐标系的转换矩阵进行合并:
Zc * [ u v 1 ] \begin{bmatrix} u\\ v\\ 1\\ \end{bmatrix} ⎣⎡uv1⎦⎤ = [ α 0 u o 0 β v o 0 0 1 ] \begin{bmatrix} \alpha&0&uo\\ 0&\beta&vo\\ 0&0&1\\ \end{bmatrix} ⎣⎡α000β0uovo1⎦⎤ * Zc * [ x y 1 ] \begin{bmatrix} x\\ y\\ 1\\ \end{bmatrix} ⎣⎡xy1⎦⎤ = [ α 0 u o 0 β v o 0 0 1 ] \begin{bmatrix} \alpha&0&uo\\ 0&\beta&vo\\ 0&0&1\\ \end{bmatrix} ⎣⎡α000β0uovo1⎦⎤ [ f 0 0 0 0 f 0 0 0 0 1 0 ] \begin{bmatrix} f&0&0&0\\ 0&f&0&0\\ 0&0&1&0\\ \end{bmatrix} ⎣⎡f000f0001000⎦⎤ [ X c Y c Z c 1 ] \begin{bmatrix} Xc\\ Yc\\ Zc\\ 1\\ \end{bmatrix} ⎣⎢⎢⎡XcYcZc1⎦⎥⎥⎤
= [ f x 0 u o 0 f y v o 0 0 1 ] \begin{bmatrix} fx&0&uo\\ 0&fy&vo\\ 0&0&1\\ \end{bmatrix} ⎣⎡fx000fy0uovo1⎦⎤ [ X c Y c Z c ] \begin{bmatrix} Xc\\ Yc\\ Zc\\ \end{bmatrix} ⎣⎡XcYcZc⎦⎤ = K*Pc
这里的K就是相机的内参矩阵,反映了相机坐标系与图像坐标系之间的转换关系。
(4)各坐标系转化示意图
注意:以下的1/dx和前文中的 α \alpha α等同,1/dy和前文中的 β \beta β等同,ku等同于前文中的fx,kv等同于前文中的fy, γ \gamma γ为畸变系数(本文暂且不考虑到相机畸变情况)。
各坐标系之间转换关系式: