1.1、方案讨论

定位激光在摄像头画面中的位置,最容易想到的方法是通过图像处理找到激光点。因为激光点图像与一般环境图像不一样,通过图像处理可以辨别激光与环境的差异,从而定位激光。首先,这是从人的视角出发的,摄像头看到的并不是这样。摄像头中的感光片可能因为差异看到的是形形色色的画面,可能你看见的激光是一个红色的亮点,而在摄像头画面中它就是一个白色的亮点。

激光照射在不同颜色背景下,所呈的颜色也是不一样的,感光片是通过感知光来储存颜色信息的,然后通过处理把这些光信息反映在屏幕上。在一个背景颜色单一,且深色(比如黑色),那么很容易通过图像处理来找到激光点,在这种环境下,图像处理通过二值化,灰度取阈值,找特征值(白色255等)就可以找到激光点,还有HSV颜色空间来确定激光点,这种方式适应较复杂的环境,因为采用这种方式一定比用RGB方式更准确。上面说的两种方式只要参数调的好,是能达到一定准确度的,但是用在可能出现不同环境下,各颜色,光线,背景等在不断变化的情况下参数也要变,用图像处理精度定位难度是很高的。

当然并不是说图像处理不能实现精准定位,想一想,图像处理如果真能实现完美定位,如果几个相同的激光点同时打在摄像头画面中,那么它应该取识别谁呢?

上面所讲的是基于激光测距应用上的,而不是单纯的进行激光定位的。既然应用在测距应用上,那么在结构固定了的情况下可不可以通过物理的方式来定位激光点呢?

1.2、方案论证

激光测距应用上,我们假设摄像头与激光的位置如下:

图1.1 模拟激光测距仪的结构

我们知道了激光距离摄像头的相对位置,我们就知道了摄像头与激光之间的角度(a=arctan(y/x)),无论摄像头画面看多远或者激光打到多远,摄像头与激光之间的相对位置是不会改变的,那么从摄像头画面上来看,激光点将沿着a角度进入摄像头画面,

图1.2 激光进入摄像头画面角度

首先我们需要知道,摄像头和激光是平行的,那么为什么在摄像头画面中激光越远,激光点里摄像头中心就越近呢?摄像头和激光的距离是固定的,只是越远,摄像头拍摄越广,还是同样大小的屏幕显示画面,就相当于激光点在摄像头画面中被压缩了,被往中心挤了。如下图,d为摄像头与激光实际距离,

图1.3 激光在不同距离下画面中的呈现方式

如图1.3,随着激光距离越远,摄像头画面越广,而两者之间的实际距离不变,同样显示器显示的情况下,激光点就无限靠近摄像头中心。在摄像头画面中,在激光点打点较近时,如果此时将测距仪器移动,会看到激光在摄像头画面中移动的很明显,当到了一定的距离,激光点就无限靠近画面中心,就是到了某个距离,激光点就和摄像头中心重合了。那么这样的话,就可以知道激光在摄像头中的坐标和激光距离存在这样一个关系:斜率逐渐减小,最后无限趋近于一点的减函数(类似倒函数)。如下图所示:

图1.4 激光在画面中坐标于激光距离的关系

上面所讲的是理论论证,下面我们尝试得到图1.4中的函数。摄像头内部有焦距,所有采集到的光信息通过这一点发散再经过物距镜(调整这个可使成像变得清晰,比如相机的自动对焦AF就是调整这个距离)打到感光传感器上,然后成像。那在感光片上成像的物体正是实际物像的缩小版,所以两者具有对应关系。我们取最小关系,假设感光片和屏幕尺寸大小对应。感光传感器上尺寸之比就等于实际物像之比就等于屏幕上的坐标之比。

图1.4 激光在画面中坐标于激光距离的关系

上图只讨论在x方向的成像,y方向相同(垂直视场角)综上所述,有:

dx / (L+f)*tan(a)  = px / sx/2

       dy / (L+f)*tan(b)  = py / sy/2

注:dx,dy为激光距离摄像头中心x方向上的实际距离和y方向的实际距离;

L为测出来的距离

f为摄像头焦距

a为摄像头水平视场角

b为摄像头垂直视场角

px,py为激光在屏幕中的x,y坐标

sx,sy为屏幕的像素大小

从上述公式上可以看出,

Px = dx*sx/((L+f)*tana*2)

其中f,a,b,px,py为基本属性,为固定的,所以px和L成倒函数关系,恰好验证了图1.4所示。

需要注意两点:

1.坐标系是从摄像头中心建立的,不是底角建立的,所以在结构设计时要考虑激光在摄像头的哪一方。还有两者之间的角度决定了激光点从什么方向进入摄像头画面,如1.2所示,这会影响对最小测距距离的影响。

2.最小测距的确定:首先一般测距模块会给出激光的最小测距距离。还有一种是摄像头刚进入画面时,我们可以把此时的距离当作测距最小距离。当dx/(L+f)*tana等于1时,激光正好进入摄像头画面。如果dx>激光最小测距距离,那么dx为最小测距距离;反之,则最小测距距离为激光最小测距距离。

讲的比较粗糙,主要是用来备忘,不过很简单,很好理解。嘿嘿~

源码提供测试方法,要根据实际参数更改和调整。源码中使用的是myantenna L1激光测距模块!!!

github源码

一种定位激光在摄像头画面中位置的方法(附安卓源码)相关推荐

  1. java 编写无状态代码,一种真正实现RMI无状态化的方法续:JVM源码修改步骤

    下面详细讲解如何修改JVM源码解决RMI的有状态化问题. 从JVM源码可以看到,client通过控制链得到对象ID后,走数据链发送到RMI Server,Server的查找过程如下: target = ...

  2. VS2010下使用dmp文件和pdb文件定位到dll中崩溃位置的方法

    2018-01-15 创建人:Ruo_Xiao 邮箱:xclsoftware@163.com 一.基础链接 http://blog.csdn.net/itworld123/article/detail ...

  3. 用计算机查找文件地址吗,如何快速搜索电脑里的文件( 快速准确定位和查找电脑文件位置的方法...

    今天给大家带来如何快速搜索电脑里的文件(,快速准确定位和查找电脑文件位置的方法,让您轻松解决问题. 怎样快速搜索电脑里的文件 如何快速准确定位和查找电脑文件位.我们在使用电脑的时候,经常需要进行一些操 ...

  4. 如何用计算机模拟光的传播,一种模拟激光辐射颗粒的数值建模方法与流程

    本发明涉及计算机模拟仿真领域,具体涉及一种激光辐射颗粒的热辐射模拟仿真领域. 背景技术: 在激光烧结技术中,激光的参数与作用方式会直接影响到烧结件的质量.考虑到激光光斑及粉末粒径的尺寸太小且激光扫描的 ...

  5. 【毕业设计】3-基于单片机的公交车智能播报到站运行位置指示系统(原理图+源码+论文)

    [毕业设计]3-基于单片机的公交车智能播报到站运行位置指示系统(原理图+源码+论文) 文章目录 [毕业设计]3-基于单片机的公交车智能播报到站运行位置指示系统(原理图+源码+论文) 任务书 设计说明书 ...

  6. 3-基于单片机的公交车智能播报到站运行位置指示系统(原理图+源码+论文)

    3-基于单片机的公交车智能播报到站运行位置指示系统(原理图+源码+论文) 文章目录 3-基于单片机的公交车智能播报到站运行位置指示系统(原理图+源码+论文) 资料 任务书 设计说明书 摘要 设计框架架 ...

  7. Spring容器中获取Bean实例的七种方式(附实战源码)

    目录 写作说明 一:写作原因 二:源码出处 实现方式 一:使用BeanFactory直接获取(不推荐) 二:在初始化时保存ApplicationContext对象 三:继承自抽象类Applicatio ...

  8. JavaScript实现闭式函数计算特定位置的斐波那契数fibonacciNthClosedForm算法(附完整源码)

    JavaScript实现闭式函数计算特定位置的斐波那契数fibonacciNthClosedForm算法(附完整源码) fibonacciNthClosedForm.js完整源代码 fibonacci ...

  9. JavaScript实现动态规划方法计算特定位置的斐波那契数fibonacciNth算法(附完整源码)

    JavaScript实现动态规划方法计算特定位置的斐波那契数fibonacciNth算法(附完整源码) fibonacciNth.js完整源代码 fibonacciNth.js完整源代码 export ...

  10. 激光雕刻机图片解析C#上位机stm32f407控制板源码

    激光雕刻机图片解析C#上位机stm32f407控制板源码 视频中机器运行慢是因为测试激光头功率小,跑快了光斑在像素点烧蚀时间短打不出痕迹,需要速度快把激光头功率加大即可 支持多种常用图片格式的转换例如 ...

最新文章

  1. sql-labs page2(21~38) 解题过程记录
  2. java redis 没密码配置_如何解决redis的NOAUTH Authentication required异常
  3. 【Linux】一步一步学Linux——Centos7.5安装图解(08)
  4. UVA 11401 - Triangle Counting
  5. QPW 用户签署协议日志表(tf_user_agreement_log)
  6. js中的弹窗alert、confirm和prompt
  7. c语言清空文件内容_C 语言清空输入缓冲区的几个手段
  8. k8s java供应链项目篇
  9. 开发中常用的网址(快速解决方法)、免费的api接口地址、以及外包的接私活平台
  10. 群体智能与进化计算_群智能计算简介
  11. 新人如何快速熟悉一个新项目
  12. N诺刷题——字符串、排序、查找、链表
  13. 2019年第十届蓝桥杯C/C++ 省赛B组真题+题解
  14. NXP JN5189 ZigBee 3.0开发环境搭建(续)
  15. java读取Excel指定格式的数据
  16. 获得当前年月日时分秒并能判断是早晨 中午 下午 深夜
  17. 怎么把Word转换PPT?这几个方法超好用
  18. 称球问题-找出球中的坏球
  19. 工具篇(四)基于WPS的数据处理和分析
  20. 什么是内聚 内聚是什么 内聚的种类有哪些

热门文章

  1. 关于jesd204B调试总结
  2. 怎么从零编写一个 v3 版本的 chrome 浏览器插件实现 CSDN 博客网站的暗黑和明亮主题切换?
  3. 微信H5扫码支付 java
  4. 批量自动付款(京东)
  5. 搭建SFTP服务器实现文件上传
  6. 【OpenCV】用sobel算子和Susan算子提取恩智浦智能车赛道边缘
  7. SM3密码杂凑算法原理
  8. Cocos2d-x 3.17.2 集成X5WebView内核方法,完美运行
  9. 计算机桌面有浮层,win7电脑桌面便签小工具怎么显示悬浮文字?
  10. python实现九九乘法表代码解释_python编写九九乘法表代码