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