机器人视觉感知原理
机械人的蓝海,机器人的世界,
如果机器人需要和外界环境进行交互,那么机器人首先必须要感知周围的环境。机器视觉是最为常用的一种感知周围环境的方法。这里,我们将简单介绍机器视觉领域一些基本的概念。机器视觉是一个庞大的领域,这里我们将仅仅介绍其在工业机器人中的应用。通过本文的介绍,我们将可以自己构建一个简单的机器视觉系统,举例来说,我们可以通过图像确定室内物体的位置,并且确定物体的形状等。进一步的,机器视觉可以与机器人动力学相结合,从而可以操纵机器人完成一些特定的任务,如物体的搬运、抓取等。
首先,我们将讨论图像形成的几何原理,进而可以掌握现实世界中实际物体与它们在图像中表示的关系。
然后,我们将讨论如何确定上述关系中的一些关键参数。然后,将上述图像进行分割,从而得到图像中的背景描述以及物体描述。进一步的,我们将讨论图像中存在多个物体的情况。
最后,我们将学习利用图像中物体投影的位置确定现实世界中物体的实际位置。
图像形成的几何原理
数字图像是通过将光投影到一个二维的感光阵列上得到的一个二维的矩阵。镜头将光线投射到由CCD传感器组成的感光阵列上。镜头和感光阵列在摄像头中组装在一起,其中感光阵列的输出连接到数字化仪或者图像采集卡上。如果摄像头为模拟摄像头,那么数字化仪将模拟信号转换为数字信号,然后进一步的由帧捕捉器获得像素阵列。若摄像头为数字摄像头,那么帧捕捉器将来自摄像头的数据直接转换为像素阵列。其中,数字图像像素阵列中的每个像素值均为一个在0-255之间的灰度值,其表示外界光线投射到感光阵列上光的强度。
在机器人应用领域中,我们一般般仅仅考虑图像形成的几何过程,而不考虑其他过程(如镜头型号、辐射测量等)。
这里,我们将首先在成像系统中定义一个摄像头坐标系,然后将讨论针孔成像原理。进一步的,我们将推导图像中坐标点与现实世界的关系。最后,我们将讨论摄像头标定的方法,通过摄像头的标定将获得成像过程中的相关参数。
2. 摄像头坐标系
为了简化摄像头成像的建模过程,我们通常将摄像头坐标系中心固定在摄像头上。这里,我们将摄像头坐标系定义如下:
定义图像平面
表示摄像头中感光阵列所在平面,其中坐标轴
和
为图像平面中的一组基底,一般选择
和
平行于图像的水平和垂直轴。坐标轴
一般选择为垂直于上述图像平面并且与镜头的光轴(镜头焦点与其几何中心的连线)一致。摄像头坐标系的原点一般选择位于镜头的焦点处。摄像头坐标定义如下图所示:
在上面定义的摄像头坐标系中,图像平面中的任何一点均可以表示为
的形式,因而,我们可以使用坐标
来参数化图像平面,进一步的,我么可以用
表示图像平面中点的实际坐标。
3. 透射投影
摄像头成像过程一般使用针孔成像模型进行描述,这里,镜头被看作一个理想针孔,其中针孔固定在镜头的焦点上。光线通过针孔并且与图像平面相交。
假设P为现实世界中一点,其在摄像头坐标系中的坐标为
。p表示其在图像平面上的投影,其在摄像头坐标系中的坐标为
。在针孔成像模型下,摄像头坐标原点,成像点p,真实点P三点共线,因而,我们可以使用下式表示其关系:
其中,
为一常数。
上式可以被整理为如下形式:
因而,如果我们可以确定P与p在摄像头坐标系中的
方向坐标
,那么,我们可以得到:
上式即为透射投影的几何表达式。
4. 图像平面与传感器阵列
根据以上描述,我们知道,数字图像实际上是一个使用灰度值构成的离散阵列。这里,我们将使用坐标
表示图像中像素点的坐标(
均为整数)。为了使用图像描述真实世界,我们需要得到图像平面中点的坐标
(均为位置实际值)与像素点坐标
的关系。
一般而言,我们将像素阵列的起始点定义在图像的边缘而不是中心,假设像素阵列的中心点定义在
,像素阵列中每个像素的长和宽分别为
。另外需要注意的是,像素阵列坐标轴方向与图像平面坐标轴方向一般取为相反方向,因而,我们可以得到图像平面坐标与像素阵列坐标之间的关系如下:
即:
由于像素阵列坐标
为整数,因而我们无法根据图像像素信息获得精确的真实世界的描述。
5. 摄像头的标定
摄像头标定的目的是为了确定根据图像中像素点的坐标
信息预测真实世界信息所需要的摄像头的参数。也就是,给定现实世界中任意一点P,经过摄像头标定后,我们可以确定其在图像中的像素坐标
;反之亦然。
首先,我们确定摄像头外部几何参数。
在3中,我们推导透射投影公式的时候,所有的坐标都是基于摄像头坐标系进行描述。在典型的机器人应用领域中,所有的信息都是在现实世界坐标系进行描述的,因而,我们需要进行坐标变换。假设我们知道摄像头坐标系相对于现实世界坐标系的关系如下:
其中,
表示现实世界(world),
表示摄像头坐标系(camera)。
为了简便起见,我们使用定义:
其中,R为旋转矩阵,T为平移矩阵。
我们可以得到:
摄像头一般固定在三脚架上或者其他机械定位装置上(可以进行平移或者旋转运动)。一个很典型的机械定位装置是平移/倾斜头,其含有2个自由度,一个绕z方向旋转,一个绕x方向旋转(如人类头部一样,可以上下点头,也可以左右转动)。这是,旋转矩阵可以写作:
其中,
是摄像头坐标系与真实世界坐标系x轴之间的夹角,
为摄像头坐标系与真实世界坐标系z轴之间的夹角。
接下来,我们讨论摄像头内部参数。
根据针孔成像模型,我们可以使用下面的方程将摄像头坐标系中点的坐标映射到图像像素阵列中的坐标:
进一步整理得到:
因而,如果,我们可以得到
,那么我们便可以根据摄像头坐标系中点的位置确定其在像素阵列中的坐标,实际上,我们并不需要准确知道镜头焦距以及像素的长宽信息,而仅需要知道它们的比例即可,即:
上述四个参数
被称为摄像头的内部参数,对于一个摄像头来说,其参数均为常数,并且不随着摄像头位置改变而变化。
接下来我们将对上述内部和外部参数进行标定。
在摄像头所有参数中,图像中主点的位置
是最容易确定的参数,我们可以使用消失点法确定这两个参数。消失点法的基本思想如下:现实世界中的一系列平行直线在图像中将消失于一点,这个点被称为消失点。三组相互垂直的平行线将在图像中确定三个消失点。由三个消失点组成的三角形的重心(高的交点)即为图像的主点。因而,计算中心点最简单的方法就是在工作空间中放置一个立方体,然后计算出平行线簇在图像中的消失点,既可以确定图像的主点。
平行铁轨消失于远方
在得到图像的主点位置
后,我们进一步的确定其他参数。确定的方法这里是通过构建一组线性方程组描述真实世界中的点与图像中像素点的位置,其中线性方程组的未知参数即为摄像头的参数。因而,首先我们需要获取一些列点集,如
的形式,其中,
为现实世界坐标系中点的坐标,
为其在图像中的投影坐标。上述采集过程一般通过手动将摄像头移动到一个可以观察到已知位置
的地方,然后在图像中选择其投影点
。
在得到上述点集后,我们便可以构建线性方程组表示它们之间的关系。
根据上面的描述,我们知道没摄像头的外部参数可以使用下面两个变换表示:
因而,如果我们知道现实世界坐标系中点的坐标为
,那么,其在摄像头坐标系中点的坐标
为:
将其与上面摄像头坐标系与图像坐标系中像素点坐标的变换关系相结合可以得到:
由于我们已经得到了主点的坐标,因而,上是可以通过下面的方式进行简化:
接下来我们将上述投影变换方程统一表示为含有未知参数
的形式。对上述变换关系中两式两边取除得到:
定义:
我们可以进一步得到:
将N个上述线性方程结合可以得到矩阵形式:
上式为线性方程
的形式,因而,如果我们可以得到一组解:
其中,k为未知系数。
为了得到摄像头系统的真实值,我们需要确定上述未知参数
。考虑上述旋转矩阵
为旋转矩阵,因而:
同样的:
接下来,我们需要确定系数
的符号,其符号由下式确定。
我们需要保证我们选择的系数
的符号可以使得上式成立。
此时,我们已经得到了参数
,接下里我们需要确定
,根据:
然后,通过求解线性方程组,既可以得到
与
。