修订:# 4 如何求解原图像中像素点的实际距离;20200522

文章目录

  • 0.0 相关知识:
  • P:相机透视视角下 a帧和b帧之间旋转矩阵通过特征点对齐, 获得的r和t; 如果a帧和b帧变成鸟瞰图,特征点对齐的r和t还是同一组吗?
  • Simplify P:2D-2D;且特征点都位于一个平面上,获得的r和t(即单应矩阵)
  • 1 储备知识点
    • 1.1 单应矩阵等同于旋转+平移
    • 1.2 归一化
      • 1.2.1尺度不确定性
      • 1.2.2初始化的纯旋转问题
      • 1.2.3多于8对点的情况
  • 2 鸟瞰图——逆透视IMP(属于透视变换的一种)
    • 2.0 求解IPM的方法包括
      • 1.简单的对应点单应变换方法
      • 2.简化相机模型的逆透视变换
      • 3.其他IPM变换方法:
    • 2.1 实例:“对应点”单应变换的IPM
    • 2.2 实例:基于消失点,基于相机姿态的IPM
  • 3.0 关于尺度的问题,相关论文:
    • 3.1 Vision-based ACC with a Single Camera: Bounds on Range and Range Rate Accuracy——著名的Mobileye论文
    • 3.2 Robust Vehicle Detection and Distance Estimation Under Challenging Lighting Conditions——IPM的鸟瞰图展示距离
    • 4.0 综上所述
  • 4 如何求解原图像中像素点的实际距离;

0.0 相关知识:

特征匹配分为:
(1)2D-2D ;
(2)2D-3D ;
(3)3D-3D。

P:相机透视视角下 a帧和b帧之间旋转矩阵通过特征点对齐, 获得的r和t; 如果a帧和b帧变成鸟瞰图,特征点对齐的r和t还是同一组吗?

Simplify P:2D-2D;且特征点都位于一个平面上,获得的r和t(即单应矩阵)

1 储备知识点

1.1 单应矩阵等同于旋转+平移




这里引入参数s,它是任意尺度的比例(目的是使得单应性定义到该尺度比例)。通常根据习惯放在H的外面。



1.2 归一化

单应性矩阵取决于一个尺度,那么通常归一化,以使得h33=1

知乎

2D-2D相机位姿估计存在以下三个敏感的问题:

  • https://zhuanlan.zhihu.com/p/92221963
  • 链接:https://www.jianshu.com/p/fbf56587a268

1.2.1尺度不确定性

用上面的方法估计出的相机平移向量t的值并没有单位,也就是说相机移动的距离只有相对值,没有绝对值。这是单目相机固有的尺度不确定性问题,无法从根本上解决。因此单目SLAM中一般把初始化后的t归一化,即把初始化时移动的距离默认为1,此后的距离都以这个1为单位。

1.2.2初始化的纯旋转问题

单目初始化不能只有旋转,必须要有一定程度的平移,否则由于t趋近于0,导致无从求解R或者误差非常大。

1.2.3多于8对点的情况

如果匹配的点对数多于8(大多数情况都是这样),可以考虑充分利用这些点,而不是只从中选择8对用于计算。推荐的算法是随机采样一致性(Random Sample Consensus,RANSAC),该算法可以有效地避免错误数据对整体结果的影响。在代码中,只需要将findFundamentalMat函数的第三个参数从CV_FM_8POINT换成CV_FM_RANSAC就可以了。

2 鸟瞰图——逆透视IMP(属于透视变换的一种)

IPM变换就是消除这种透视效应,所以也叫逆透视。

透视变换的作用是让我们从另外一个角度观察图片中的场景,例如俯视。它能帮助我们避免例如“近大远小”造成的图像世界与现实世界的偏差,其方法的本质是“映射”,将原图像的像素点按照一定的“比例”映射到另外一张图上。

IPM变换具有很多应用,求取IPM图像的方法亦是有很多

2.0 求解IPM的方法包括

https://blog.csdn.net/feiyang_luo/article/details/103555036

1.简单的对应点单应变换方法

  • 输入:至少四个对应点对,不能有三点及以上共线,不需要知道摄相机参数或者平面位置的任何信息。

  • 数学原理:利用点对,求解透视变换矩阵,其中map_matrix是一个3×3矩阵,所以可以构建一个线性方程组进行求解。如果大于4个点,可采用ransac的方法进行求解,一边具有更好的稳定性。

  • 选点方法:一般采取手动选取,或者利用消影点(图像上平行线的交点,也叫消失点,vanish point)选取。

  • 代码实现:代码实现比较简单,可以很容易实现IPM变换

2.简化相机模型的逆透视变换

利用相机成像过程当中各种坐标系之间的转换关系,对其基本原理进行抽象和简化,从而得到世界坐标系和图像坐标系之间坐标的对应关系,并对逆透视变换的坐标关系进行公式化描述。这种逆透视变换形式简单,计算速度快,并且适用于复杂道路场景。

  • Stereo inverse perspective mapping,考虑了上下俯仰角和水平偏航角度的矫正,但是存在水平线弯曲误差。
  • 基于消失点的俯仰角和偏航角计算
  • 基于消失点,基于相机位姿,在相邻帧中加入了俯仰角的修正

3.其他IPM变换方法:

相比较于以上几种方法来说,更多的是应用了多视图几何的知识来得到IPM变换。

  • 已知相机位姿,利用求单应矩阵得到IPM:在已知相机pose情况下,可将相机向路面方向旋转90度-俯仰角,那么得到一个新的相机pose,此时的相机是垂直与路面向下,那么得到的图像自然也就是IPM图像。

2.1 实例:“对应点”单应变换的IPM

https://www.cnblogs.com/tiandsp/archive/2012/12/16/2820916.html

2.2 实例:基于消失点,基于相机姿态的IPM

参考:《Real time Detection of Lane Markers in Urban Streets》

  • https://blog.csdn.net/yeyang911/article/details/51915348
  • https://blog.csdn.net/yeyang911/article/details/51912322
  • https://blog.csdn.net/weixin_44409075/article/details/97892652

    为了获得输入图像的IPM,我们使用相机内参(焦距和光学中心)和外部(俯仰角,偏航角和地面高度)参数来执行此转换。如图所示, 我们首先定义一个世界坐标系{Fw} = {Xw,Yw,Zw}(以相机光学中心为中心),相机坐标系{Fc} ={Xc,Yc,Zc},以及图像坐标系{Fi} = {u,v}。 我们假设相机框坐标系的Xc轴停留在世界坐标系XwYw平面中,且相机只存在俯仰角α(上下)和偏转角β(左右)但没有滚动。 相机坐标系中心在地平面上方的高度为h。

3.0 关于尺度的问题,相关论文:

3.1 Vision-based ACC with a Single Camera: Bounds on Range and Range Rate Accuracy——著名的Mobileye论文

3.2 Robust Vehicle Detection and Distance Estimation Under Challenging Lighting Conditions——IPM的鸟瞰图展示距离


4.0 综上所述

(1)直接计算两帧a,b得到的单应矩阵,包含了旋转与平移(R,T),但是T是一个没有单位的量,经过了归一化。
(2)尺度问题来源于单目中路标点的深度具有不确定性(所以才反投影到归一化平面上),也就是说尺度缩放实际作用的是两个相机之间的平移缩放。
(3)鸟瞰图,等同于顶视图,纯2D的图像。 2D对应的平面位置回到3D是准确的,但在2D图像上肯定是被压缩了。
(4)如果限定了相机的高度H,尺度虽然没有限定,但是可以用来还原部分3D信息。如果包含了相机的完整姿态,可以用来进行测距。
(5)对于特征点,鸟瞰图中求解R,T,是准确的,但尺度不确定,若已知相机姿态(包括高度),可以获得尺度确定的R,T值。
(6)对于特征点,直接通过相机的两帧数据进行透视变换,求解R,T,尺度是不确定,进行了归一化。
(7)对于特征点,两帧2D-2D数据进行透视变换求解R,T 与鸟瞰图求解R,T。本质上是相同的。都是尺度不确定的,经过了归一化处理的。
(8)如果希望得到求解相机自身的完整姿态,需要使用2D-3D的方法,即PnP。

PnP的方法可参考https://blog.csdn.net/cocoaqin/article/details/77841261。需要输入:(1)objectPoints特征点世界坐标 (2) imagePoints特征点在摄像头下的像素点坐标 (3) cameraMatrixdistCoeffs内参矩阵和畸变矩阵。输出:(1)求世界坐标中的点在相机坐标系下的坐标 (2)求相机在世界坐标中的坐标,旋转角度。

(9)鸟瞰图中的R,T反应的是世界坐标系中的情况;两帧之间的R,T是两帧之间的,但是如果已知世界坐标系到图片坐标系的转换矩阵,依然可以求解世界坐标系中的R,T情况。

4 如何求解原图像中像素点的实际距离;

1.IPM包含3个函数。

image2ground:将图像中的像素点(u, v)对应到地平面上(Z=1)IPM的像素点(x, y);

ground2image:将IPM中的像素点(x, y)基于IPM的最大范围转换为xygrid,从而转化为uvgrid;

src2ipm:基于uvgrid插值得到IPM中像素点(x, y)的的灰度值并显示,同时转换得到IPM中每个像素点的实际距离coord;

2.如何求解原图像中像素点的实际距离;

image2ground: uvp ——> xyp;

xyp2ipmp: xyp ——> ipmp;

xmin + x.ipmp * stepcol = x.xyp;

ymax - y.ipmp * steprow = y.xyp;

从而推导出,

x.ipmp = ( x.xyp - xmin ) / stepcol;

y.ipmp = ( ymax - y.xyp ) / steprow;

3.注意:

3.1.查看x.ipmp和y.ipm的结果是否越界,需要添加越界判断;

3.2.编码的时候需要非常注意各个参数的数据类型及格式是否匹配或者一致;

03月11日单应矩阵与鸟瞰图IPM变换相关推荐

  1. 案例十:03月11日政采云首页无法访问

    一. 故障简述 故障简要描述: 于3月11日14:21分收到用户大量反馈政采云首页访问出现502,14:32分运维重启应用后首页可以访问,但协议商品创建等还是出现报错,14:50分架构配置限流后影响消 ...

  2. 小米抢购页面源码分析2014年03月11号

    这个是3月11号的源码分析,后来没有写18号的,因为18号抢到一个,而且自己还有脑残行为,虽然有重大发现,看25号的情况再说吧... By:小宗 3月11号又是抢小米的日子....(今天出去了一下,回 ...

  3. 日记 [2008年03月11日]

    服务器上如果出现大量的1030.1058 application error ,那么肯定是everyone on sysvol permission 出了问题,注意sysvol 的路径和所在文件夹的权 ...

  4. 05月11日三支有望飙涨股与操盘策略分析

    05月11日(星期一)推荐三只潜力股是: (安源股份600397)会员在08日早盘以7.20元买入, (四川路桥600039)会员在08日早盘以8.05元买入,(000502绿景地产)会员在08日午盘 ...

  5. 工作日志-2020年03月

    星期一 03月02日 1.解决问题Ubuntu18.04 人脸检测插件报错问题: 2.下午移植kmspointerdetector插件代码,编译通过,但是运行项目,插件找不到,明日继续. 3.部门周会 ...

  6. 单应矩阵(Homography)基本概念和代码测试

    简 介: 应用棋盘格图片或者相机图片中与标准棋盘格之间的单应矩阵.其中应用到opencv中的findChessboardCorners, findHomographys等函数. 这位利用单应矩阵进行下 ...

  7. 【历史上的今天】11 月 11 日:腾讯成立;信息论先驱出生;阿德曼提出 DNA 计算

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 11 月 11 日,1924 年的今天,中山大学成立:中山大学由原中山大学和中山医科大学合并组建,是 ...

  8. 苹果xr配置_定了!苹果发布会9月11日

    财经961听财经,懂生活 即将进入九月,又要到苹果发布新iPhone的时候.今日,苹果正式发出秋季发布会邀请函:致创新.苹果2019秋季新品发布会将于当地时间9月10日上午10:00(北京时间9月11 ...

  9. C语言3067答案,教师招聘《小学教育心理学》通关试题每日练(2020年03月03日-3067)...

    1:将学习策略分为基本策略和支持策略的是( ). 单项选择题 A.丹瑟洛 B.尼斯比特 C.皮连生 D.鲍斯菲尔德 2:奠定儿童人格和心理健康基础的是( ). 单项选择题 A.社会 B.家庭 C.学校 ...

  10. 2012年1月11日

    2012年1月11日 2012年01月11日 中国 科学技术大学 一九九八年招收硕士学位研究生入学考试试题 试题名称:程序设计 要求: 算法设计题目要求写注解,否则扣分. 写出正确的设计思想和伪代码给 ...

最新文章

  1. java 插入排序_看动画学算法之:排序-插入排序
  2. j详细说明ava于clone办法
  3. 【旧文章搬运】无Device的驱动如何通信
  4. [Android ] linux命令英文缩写的含义(方便记忆)
  5. 亚信安全认证acse_重装出发 | 2019亚信安全合作伙伴大会珠海站召开
  6. 系统优化的方法有哪些
  7. 【2017-12-06】c#基础-分支语句and循环语句
  8. 电子技术基础数字部分第六版_电子技术基础 数字部分 第六版课后参考答案 (康华光 高等教育)...
  9. c语言代码自动整理,C语言代码自动整理工具
  10. android win8 磁贴效果第三方库,Win8巧用动态磁贴让浏览更轻松
  11. 常规的几个API接口(也包括比价)
  12. Markdown中如何实现内容折叠操作
  13. C3P0:C3P0PooledConnectionPoolManager
  14. 2022年大学应届生破千万,就业形势严峻,打工人准备好了吗?
  15. LoRa开发7:PingPong系统
  16. 反激式开关电源设计方案,12V6A输出,有完整原理图
  17. 数据结构笔记(期末复习,持续更新)
  18. python数组乘以一个字符串_一个数组乘以一个元素
  19. 【完美运营】创云享知识付费系统V2
  20. Yarn上(Hadoop上)跑Spark出现Retring connect to server. 集群间机器无法连接的问题

热门文章

  1. ENVI/IDL实现每个波段信噪比计算
  2. java SimpleDateFormat类浅析
  3. DCFEE: A Document-level Chinese Financial Event Extraction System based on Automatically Labeled Tra
  4. Flutter之Flutter-Redux框架源码解析
  5. linux下epoll网络编程模型,C++ - 网络编程模型 - Linux EPOLL
  6. 程序员如何与产品经理优雅的干架
  7. 开工利是!循序渐进~
  8. Android Multimedia框架总结(二十)MediaCodec状态图及Codec与输入/输出Buffer过程(附实例)...
  9. 华擎 j3455 时钟 linux,经验 篇一:华擎J3455 硬改MAC地址
  10. java 带参数转发_Nginx 根据URL带的参数转发的实现