单目视觉定位测距的两种方式

2023-05-16

  单目定位和双目定位的选择,我觉得主要还是成本和时间的考虑。之前也尝试过双目定位,感觉要更精准些,但双目测距需要对两幅图像进行图像变换和极线匹配,稍微耗时了一些。这几天尝试了一下单摄像头进行测距定位,主要有两个思路:
  1.定位测量插值得到每个像素的实际坐标  
  该方法总觉得有很大的问题:一个是摄像头安装后就必须固定不动,稍微的旋转都会导致之间测量的像素点对应的坐标偏移。另一个是人工测量的工程量之大,对于1024*1280像素的摄像头,准确的测量就应该是130万个点,而就算我们按米来分割地面,10*20m2的地面也要测量200个点,就算可以通过算法自动识别,做200个标志就算测量画线也是令人头疼的。考虑到针孔成像模型的等比例放大,我们通过直接打印布满等距阵列圆点的纸来进行测量。
  其原理如下:
        几何
  根据相似三角形的等比例关系,有:

EGBD=AGAD  

GFDC=AGAD  
   
  同时又有:
EGEB=AEAB  
  
  通过等式传递有:
EGBD=GFDC=AEAB  
  

  如此一来,可以在较高距离测量等距阵列点(如标定板),经过插值,再进行等比例放大即可得到每个像素点对应的实际地面的坐标。
  
  处理的示意图如下:

  这样操作可以省去人工在地面测量绘画标志。测量好纸上的点距后再进行H/h的放大就可以得到像素对应实际地面的坐标。但实际操作过程中遇到的问题是图像上边缘的梯形失真过于严重,导致打印纸上的标志点不容易识别,因此还需要准备不同距离的等距阵列圆点图。

  2.根据相似三角比例计算出对应像素点的实际坐标  
  这个方法对摄像机标定的要求比较高,同时要求镜头本身造成的畸变就比较小,但总体来说这种方法的可移植性和实用性都较强。其主要的思路还是小孔成像的模型。
   模型一:假设测量的点都在Y轴上,此时无X轴分量  
这里写图片描述
  该图主要有三个坐标系,分别是图像坐标系 UO1V ,以 O2 为原点的摄像机坐标系,世界坐标系 XO3Y 。(相关的内容我就不复述了,不懂的百度和知乎上都有,搜搜相机标定的知识)
  我们可以看到,世界坐标中的点通过光轴成像在图像坐标的点是成比例的,其比例媒介就是相机镜头中心在图像上的像素点O1与其在世界坐标中的实际点M,通过推导可以求解 O3P 的长度。(注意,由于相机安装一般都有误差,所以镜头中心点不一定是图像的中点,所以ucenter,vcenter不一定为0) 

  一步步推导如下:
  已知量:摄像机高度H
      图像坐标中心对应的世界坐标点与摄像头在y轴上的距离 O3M
      镜头中心点的图像坐标 (ucentervcenter)
      测量像素点的图像坐标 P1(u0       
      实际像素的长度xpix
      实际像素的宽度ypix。
      摄像头焦距f
      (镜头中心点图像坐标,焦距,像素长宽都可以由标定直接求解出来,通过halcon的标定助手可以很容易的得到,openCV也有相应的程序)
       α=arctan(HO3M)

       γ=arctan(O1P1×ypixf)=(vvcenter)ypixf

       β=αγ

       O3P=Htan(β)
  
  这样就可以得到垂直方向的坐标  Y=O3P
  
   模型二:假设测量的点有X轴、Y轴分量  

  针对以下模型图我们将进行说明:
这里写图片描述
  一步步推导如下:
  已知量:摄像机高度H
      图像坐标中心对应的世界坐标点与摄像头在y轴上的距离 O3M
      镜头中心点的图像坐标 O1(ucentervcenter)
      测量像素点的图像坐标 P1(u0Q1uv       
      实际像素的长度xpix
      实际像素的宽度ypix
      摄像头焦距f
(y轴方向计算和上一个模型相同,x轴计算是y轴坐标通过比例计算得到)
       α=arctan(HO3M)

       γ=arctan(O1P1×ypixf)=(vvcenter)ypixf

       β=αγ

       O3P=Htan(β)
  
  这样就可以得到垂直方向的坐标  Y=O3P

       O2P1=(vvcenter)xpix)2+f2

       O2P=Hsin(β)

  由 PQP1Q1=O2PO2P1  得到  PQ=O2P×P1Q1O2P1
  
  这样就可以得到垂直方向的坐标  X=PQ
   模型三:假设测量的点有X轴、Y轴分量,且物体有高度h    
  
  针对以下模型图我们将进行说明:
这里写图片描述
  由于物体有高度,因此还需要进行一个投影变换,其实也还是相似变换 
  
  设真实的坐标 (X,Y) ,模型二求出的坐标 (X,Y)
  
  则 (X,Y)=(X,Y)×(1hH)
   模型评价    

  实际操作过程中,发现该模型在畸变较小的图像中误差较小,且在矫正畸变后的图像中测量的图像坐标可以得到更准确的值。另一方面,在实际操作过程中,发现由于镜头有稍微歪曲或者内置感光区域安装歪了,可能导致我们找不到真正的X,Y轴,所以在测量验证的时候会有稍许误差,但即便如此,在10米的定位下,误差也不到5%,效果还是可以接受的。如果有人知道如何找到真正的X,Y轴,请博客留言告知一下,先谢谢了。

  • matlab计算代码下载http://download.csdn.net/download/sillykog/10048668
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单目视觉定位测距的两种方式 的相关文章

  • ubuntu 18.04 下 D435i SDK安装 ros-wapper安装 绘制rosbag 运行vins-mono离线/在线

    1 参考blog 1 D435i Ubuntu18 04使用D435i运行VINS Mono 2 RealSenseD435i xff08 一 xff09 xff1a Ubuntu18 04 下的安装 使用和bag录制 xff0c 且解决
  • 两年工作经验程序员的迷茫

    每个人都有每个人的经历 xff0c 每个程序员也有每个程序员的经历 上大学时 xff0c 读的是计算机专业 大一时 xff0c 开始学习office软件 xff0c 之后接触第一种计算机语言C语言 特别是C语言课时 xff0c 其实上课有很
  • 阿里云AccessKey ID获取方式

    1 登录到阿里云的控制台 xff0c 点击右上角的头像图标 xff0c 如下所示 xff1a 2 点击 AccessKey 管理 xff0c 展示如下 xff0c 然后点击 继续使用 xff0c 就可以申请AccessKeyID 和Acce
  • docker启动ubuntu的桌面环境

    一 概述 由于最近一段时间在家办公 xff0c 国内服务器在阿里云 xff0c 国外站点在aws 家里的移动宽带比较差 xff0c 无法访问aws 所以尝试在阿里云启动docker xff0c 找到一个lxde桌面环境的ubuntu镜像 二
  • Portainer中文汉化

    一 概述 Portainer是Docker的图形化管理工具 xff0c 提供状态显示面板 应用模板快速部署 容器镜像网络数据卷的基本操作 xff08 包括上传下载镜像 xff0c 创建容器等操作 xff09 事件日志显示 容器控制台操作 S
  • docker安装kibana

    一 概述 Kibana是一个针对Elasticsearch的开源分析及可视化平台 xff0c 用来搜索 查看交互存储在Elasticsearch索引中的数据 使用Kibana xff0c 可以通过各种图表进行高级数据分析及展示 环境说明 操
  • pyecharts 画地图(热力图)(世界地图,省市地图,区县地图)

    一 概述 在上一篇文章中 xff0c 链接如下 xff1a https www cnblogs com xiao987334176 p 13791061 html 已经介绍了pyecharts画一些基本图形 xff0c 接下来介绍画地图 二
  • vue日期格式化

    一 概述 现有vue页面如下 xff1a 需要将日期转换为 xff1a 2020 12 25 二 实现 修改vue html部分 xff0c 应用方法dateFormat lt el table column prop 61 34 star
  • ElementUI-textarea文本域高度自适应设置的方法

    一 概述 textarea默认情况下 xff0c 当超出范围后 xff0c 会在右边显示滑动条 体验不太好 xff0c 不需要滑动条 xff0c 根据内容 xff0c 自动增加高度 xff0c 并显示完整内容 二 解决方法 主要有3种方式
  • ElementUI 实现el-table 列宽自适应

    一 概述 Element UI 是 PC 端比较流行的 Vue js UI 框架 xff0c 它的组件库基本能满足大部分常见的业务需求 但有时候会有一些定制性比较高的需求 xff0c 组件本身可能没办法满足 最近在项目里就碰到了 很多页面都
  • 微信小程序设置底部导航栏

    一 概述 微信小程序底部想要有一个漂亮的导航栏目 xff0c 不知道怎么制作 xff0c 于是百度找到了本篇文章 xff0c 分享给大家 好了 小程序的头部标题 设置好了 xff0c 我们来说说底部导航栏是如何实现的 我们先来看个效果图 这
  • ElementUI 轮播图

    一 概述 因项目需求 xff0c 需要增加轮播图 xff0c 官方demo效果如下 xff1a 但这个不是我们想要的 xff0c 我们需要的是这样的 二 代码实现 需要在原有的基础上 xff0c 修改页面样式才行 test vue lt t
  • Word在试图打开文件时遇到错误。 请尝试下列方法: 检查文档或驱动器的文件权限。 确保有足够的内存和磁盘空间。 用文本恢复转换器打开文件。

    重新装office之后打开系统的文件提示 Word在试图打开文件时遇到错误 请尝试下列方法 检查文档或驱动器的文件权限 确保有足够的内存和磁盘空间 用文本恢复转换器打开文件 1 文件安全性问题 xff0c 可以打开Word 或ppt xff
  • Docker部署RocketMQ集群

    一 概述 Apache RocketMQ是阿里开源的一款高性能 高吞吐量 队列模型的消息中间件的分布式消息中间件 关于RocketMQ集群架构的详细介绍 xff0c 请参考链接 xff1a https blog csdn net Weixi
  • docker安装zabbix

    一 概述 Zabbix 是一款能够监控众多网络参数和服务器的健康度和完整性的软件 Zabbix 使用灵活的通知机制 xff0c 允许用户为几乎任何事件配置基于邮件的警报 这样可以快速相应服务器问题 Zabbix 基于存储的数据提供出色的报告
  • kafka删除topic数据

    kafka删除topic数据 一 概述 生产环境中 xff0c 有一个topic的数据量非常大 这些数据不是非常重要 xff0c 需要定期清理 要求 xff1a 默认保持24小时 xff0c 某些topic 需要保留2小时或者6小时 二 清
  • zookeeper无法启动的原因定位

    查看zookeeper out日志的错误日志进行分析 一般有下面的原因 xff1a 端口被占用 span class token comment 查看配置了哪些端口 span span class token function cat sp
  • 世界十大架构师博客

    http blog daocloud io microservices 4 自取学习
  • STM32F407的LCD1602液晶显示程序

    LCD1602 H ifndef LCD1602 H define LCD1602 H include sys h include stm32f4xx h unsigned char message 20 unsigned char mes
  • 推荐一款调试工具:深蓝串口网络调试工具(ACOM)2023春季版(2.18.12.30202),一直使用这个,最近更新好快。

    深蓝串口网络调试工具 ACOM 2023春季版 2 18 12 30202 此应用程序支持1M波特率 最高有效波特率受硬件设置的限制 串口数据采集 文本模式发送与接收 HEX模式发送与接收 报文模式 xff0c 数据模式 xff0c 数据管

随机推荐