热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【机器视觉】单目视觉测距

http:blog.csdn.netpurglearticledetails50811490单目视觉测距2016-03-0523:431800人阅读评论(0)收藏举报分类ÿ

http://blog.csdn.net/purgle/article/details/50811490



单目视觉测距



 1800人阅读 评论(0) 收藏 举报


 分类:



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称为重投影矩阵,它由摄像头的内参数矩阵和外参数矩阵所决定,(x,y)是图像上的点的坐标,而(X,Y,Z)是实际物理空间坐标。

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

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



推荐阅读
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • Echarts图表重复加载、axis重复多次请求问题解决记录
    文章目录1.需求描述2.问题描述正常状态:问题状态:3.解决方法1.需求描述使用Echats实现了一个中国地图:通过选择查询周期&#x ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
author-avatar
手机用户2502921281_649
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有