单目视觉测距

来源:互联网 发布:剑三怎么开淘宝链接 编辑:程序博客网 时间:2024/04/28 10:08

1、引言

近年来,由于无人机、无人车等技术的不断成熟,需要用到实时测距的场所也越来越多,如定位,避障,测速等,相比于其他测距方法,单目测距是利用一个摄像头进行视频拍摄,在图像中找到待测物体。这一系列动作,涉及到了物体的识别,相机的结构,坐标变换的一些知识,距离的获取是一个很广泛的课题,用摄像头来测距是其中一个方向,包括单目测距、双目测距、结构光测距等方法。

在这里,我们主要用一个摄像头通过建立一定的模型来解决测距的问题。

 

2、摄相机模型:

单目摄像头的模型可以近似考虑为针孔模型,如图所示:

 

                                                         图1. 摄相机针孔成像模型     来自Forsyth

 

f为摄像头的焦距

c为镜头光心

物体发出的光经过相机的光心,然后成像于图像传感器或者也可以说是像平面上,如果设物体所在平面与相机平面的距离为d,物体实际高度为H,在传感器上的高度为h,那么有这样的关系:

                                                                                        

我们接下依据的也主要是这条公式,那么根据这个思路,我们主要的难点是物体在传感器上的高度 怎么测量,一旦 是足够精确的,那么所测的距离 的精确度也能够得到保证。

下面来主要推导h应该怎么来求。

 

 

 

3、单目视觉测距原理

接下来就是本文的主要部分,主要介绍物体投影在传感器上的高度 怎么获得。

由公式①可知,这里的关键点在于怎么确定物体在图像上的高度,在这之前,我们唯一能够做到的就是识别出某个具体的物体,但前提是已知其实际高度H,先谈谈我们怎样简单地识别出一个物体的:物体的识别必须围绕其特征做文章,实验时,我们暂时挑一个简单易识别的东西来,如图所示,我们识别对象是一张粉红色的凳子:

 

                                                                                                                             

                                                                                                                    图2. 被测量的实际对象


                                                                                                                     

                                                                                                                       图3. 识别后的图形

现在我们基于如下假设,一步步完善我们的测距模型:

假设一:物体中心在主光轴上,且镜头平面与物体所在平面平行,可以用下图表示:

                                                              

                                                                                                                                           图4. 假设一模型图

 

由我们前面所述的摄像头模型中,可以清楚地知道,图像传感器是接受光线的关键器件,如果我们想要求出物像实际高度,从传感器尺寸出发,举个例子,我们用到的摄像头传感器尺寸是1/2.7英尺,换算成米制单位之后,传感器的宽度为SENSOR_WIDTH= 5.31mm,高度为SENSOR_HEIGHT = 3.98mm,设物体的像素高度为Taget_h,则:

                                                                 

结合①②两条公式,就能计算假设一模型的距离了。

假设二:物体偏离光轴夹角 α ,镜头平面仍与物体平面平行,如图:

                                                                                                                                    

5. 假设二模型图

同样跟据假设一的解决方法,因为光心穿过图像的中心(图中的(Cx,Cy)就是图像中心),那么物体与图像中心的距离为:

  

则角度α 为:                                  

在假设二的情况下,结合①②③④,可以求出具体的距离。

 

 

 

 

4、摄相机畸变及其解决

这里简单地介绍畸变现象,由于我们平常使用的摄像头焦距小,可以当成一个凸透镜,那么光线通过不同厚度的镜片时,光线发生弯折的情况也不一样,这被称为径向畸变,对于径向畸变来说,远离透镜中心的光线弯曲比靠近中心的严重的多,这对我们依靠像素点来求物体的物像高度是不利的。除了径向畸变外,还有一个很重要的的切向畸变,而这由整个摄像机的组装过程中出现的问题引起,如透镜本身与图像平面不平行产生切向畸变。
畸变的产生涉及到了一些复杂的几何光学的知识,而这两种图像畸变是我们误差的主要来源,那么应该怎么去解决这种畸变呢?
解决畸变的问题必须回到摄像机拍摄视频的本质上来,摄像头本质上是把实际三维空间坐标投影到图像平面上,成为一个二维平面图, 可以用如下式子表示:

                                                                                         

上面的Q称为重投影矩阵,它由摄像头的内参数矩阵和外参数矩阵所决定,(xy)是图像上的点的坐标,而(XYZ)是实际物理空间坐标。

也就是说假如我们知道足够多的三维空间与图像二维平面上的一一对应关系,那么通过上面的约束关系,就可以将未知的参数求出来。具体的方法分为两步,求摄像机内参数和外参数,这里直接用matlabCalibrate ToolBox很容易就可以得到内参数和外参数,这里就不再赘述了。 

                                                                             参考资料:Gary Bradski&Adrian Kaebler. Learning OpenCV


0 0