如何利用鱼眼镜头测距

校准

每个图像都提供了一个专用的校准文件,包括内在和外在参数以及描述性名称。

名称是“FV”、“MVR”、“MVL”或“RV”之一,是“Front View”、“Mirror View Right”、“Mirror View Left”、“Rear View”的缩写。

外参 Extrinsic

遵循 ISO 8855 公约的车辆坐标系固定在后轴中点下方的地面上。 X 轴指向行驶方向,Y 轴指向车辆左侧,Z 轴指向地面上方。
相机传感器的坐标系基于 OpenCV。 X 轴沿传感器水平轴指向右侧,Y 轴沿传感器垂直轴指向下方,Z 轴沿光轴指向观察方向,以保持右手系。
平移的值以米为单位,旋转以四元数的形式给出。它们描述了从相机坐标系到车辆坐标系的坐标变换。可以使用例如获得旋转矩阵scipy.spatial.transform.Rotation.from_quat

内参

内在校准在校准模型中给出,该模型使用 4 阶多项式描述径向失真
rho(theta)=k1∗theta+k2∗theta∗∗2+k3∗theta∗∗3+k4∗theta∗∗4,rho(theta) = k1 * theta + k2 * theta ** 2 + k3 * theta ** 3 + k4 * theta ** 4, rho(theta)=k1∗theta+k2∗theta∗∗2+k3∗theta∗∗3+k4∗theta∗∗4,

其中theta是相对于光轴的入射角,rho是图像中心和投影点之间的距离。系数 k1、k2、k3 和 k4 在校准文件中给出。

主点的图像width和height以及偏移量(cx,cy)以像素为单位。

为了完整起见,以相机坐标给出的 3D 点 (X, Y, Z) 到图像坐标 (u, v) 的投影如下所示:

chi = sqrt( X ** 2 + Y ** 2)
theta = arctan2( chi, Z ) = pi / 2 - arctan2( Z, chi )
rho = rho(θ)
u' = rho * X / chi if chi != 0 else 0
v' = rho * Y / chi if chi != 0 else 0
u = u' + cx + width/2 - 0.5
v = v' * aspect_ratio + cy + height/2 - 0.5

最后两行显示了图像坐标系的最终转换,假设图像坐标系的原点位于左上角,左上角像素位于 (0, 0)。

20200302 我好像写错了

下图片中的计算,rho是图像中心点到投影点的距离。采用相似三角形计算
u‘=rho*X/chi。不是采用等距投影。我不清楚为什么我早上认为是等距投影公式,我可能以为rho代表距离,K1,K2,K3,K4 和X/chi联合计算的可能就是入射角a,这样好像也能够说的通顺。

20200303 我昨天好像写错了

是采用等距投影模型,以入射角为一个自变量。

我看了两套相机模组的K1,K2,K3,K4 的系数不一样。我仔细分析后:
1、四个系数是畸变系数,这个系数可以把很多参数藏在里面。如果是物理坐标XYZ直接到sensor的坐标,则系数里面可能藏在一个焦距值f,

参数1
rho(theta)=k1∗theta+k2∗theta∗∗2+k3∗theta∗∗3+k4∗theta∗∗4,rho(theta) = k1 * theta + k2 * theta ** 2 + k3 * theta ** 3 + k4 * theta ** 4, rho(theta)=k1∗theta+k2∗theta∗∗2+k3∗theta∗∗3+k4∗theta∗∗4,

  "intrinsic": {"aspect_ratio": 1.0,"cx_offset": 3.942,"cy_offset": -3.093,"height": 966.0,"k1": 339.749,"k2": -31.988,"k3": 48.275,"k4": -7.201,"model": "radial_poly","poly_order": 4,"width": 1280.0},

另外一个模组提供的系数是经过3×3投影矩阵后的xyz与sensor的坐标的调节系数,这些值就比较小了都是0.0几的值。而且给出的计算方程是

参数2
rho(theta)=theta+k1∗theta∗∗2+k2∗theta∗∗4+k3∗theta∗∗6+k4∗theta∗∗8rho(theta) = theta+k1 * theta**2 + k2 * theta ** 4 + k3 * theta ** 6 + k4 * theta ** 8 rho(theta)=theta+k1∗theta∗∗2+k2∗theta∗∗4+k3∗theta∗∗6+k4∗theta∗∗8

<intrinsic_matrix>3.1064417199616088e+02 0. 6.4211426421732665e+02 0.3.0902232061164585e+02 3.5986474570742291e+02 0. 0. 1.</intrinsic_matrix>
<distortion_coeffs>8.3833457351696380e-02 9.0871594056932698e-03 -8.6395467343150674e-04-1.2068752796059838e-03 0.</distortion_coeffs>
</opencv_storage>

我感觉,把参数1 除以 焦距值(好像是K1值代表焦距),就和参数2 比较相似了
方案1:修改为
rho(theta)=theta+k2/k1∗theta∗∗2+k3/k1∗theta∗∗3+k4/k1∗theta∗∗4,rho(theta) = theta + k2/k1 * theta ** 2 + k3/k1 * theta ** 3 + k4/k1 * theta ** 4, rho(theta)=theta+k2/k1∗theta∗∗2+k3/k1∗theta∗∗3+k4/k1∗theta∗∗4,

反正,K1,K2,K3,K4 与具体计算方法有重大关系。这个可能还是得和相机模组厂商拿到方案吧。

我下面关于等距投影的估计都是错的:

投影本身在 projection.py 中实现,可以在 https://github.com/valeoai/WoodScape/tree/master/scripts/calibration 找到。

输入与输出

【鱼眼镜头7】如何利用鱼眼镜头测距相关推荐

  1. 基于STM32F407的超声波定位装置(利用超声波测距原理)

    学校的课设,历时五周,总算做出了一点东西,现在给大家分享一下,也算给这个课设做一个最后的总结,第一次写,写得可能不好,请大家谅解. 先说一下课设所用的器材吧,本次设计主要用到了两个无刷直流电机,两块S ...

  2. html中鱼眼效果,鱼眼镜头使用入门指南:鱼眼镜头应该怎么用(附后期鱼眼效果)...

    使用鱼眼镜头拍摄的照片可以获得非常极宽的拍摄角度,通常是在180度.它们在风景,极限运动和艺术摄影中非常受欢迎.鱼眼镜头提供了任何其他类型镜头无法提供的独特创意视角. 什么是鱼眼镜头 鱼眼镜头是广角镜 ...

  3. 双目测距系列(二)鱼眼镜头双目标定及测距

    前言 这几天把基于opencv C++ api将鱼眼镜头的双目标定以及测距功能实现完毕,效果还可以,至少对齐得非常棒. 这里把其流程及其关键函数在这里总结一下. 对于双目标定而言,opencv一共支持 ...

  4. 360全景拍摄用鱼眼镜头还是广角镜头?有什么区别?

    什么是广角镜头?什么是鱼眼镜头?有什么区别?拍全景照片选鱼眼镜头还是广角镜头?我们一个一个来说. 什么是广角镜头? 广角镜头焦距很短,虽然没有一个单一定位,但是在全幅画的传感器上,广角镜头焦距通常小于 ...

  5. 手机鱼眼镜头拍摄VR全景注意事项

    随着手机全景拍摄的普及,手机全景拍摄的花样也越来越多了,其中就包括外接各种镜头.而手机鱼眼镜头就是备受人们喜爱的一种配件,它能够拍出各种炫酷的大片.今天就给大家介绍一下手机鱼眼镜头拍摄全景的几个小技巧 ...

  6. 关于鱼眼镜头展图开的一些研究

    前言:前段时间在做鱼眼展开的的程序,本来以为超简单,毕竟好多人都已经做过了不是,肯定有许多资料和参考.然而,做什么事情之前都不能眼高手低.我做了好久,还得不出想要的结果,是很烦.前两天导师没办法了给我 ...

  7. 鱼眼镜头opencv2校正

    #鱼眼镜头opencv2校正 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 目录 文章目录 #鱼眼镜头opencv2校正 @[toc ...

  8. stm32利用TOFSense模块测距教程

    stm32利用TOFSense模块测距教程 TOFSense是什么 简单来讲,TOFSense就是一个激光测距模块,它前面那个小小的黑框框就是它测距的地方即发射激光的地方.它有两种通讯方式:串口和ca ...

  9. 利用STM32CubeMX配置基于STMF32F407的FREERTOS操作系统控制直流电机速度和超声波测距实验

    前两周做基于STM32F407芯片的嵌入式系统设计的实验,主要完成利用超声波测距(电脑上用串口显示超声波所测距离,障碍物近于20cm时,使LED灯闪烁,并且可以通过串口更改报警距离)和利用编码器读取电 ...

  10. uwb最详细的DS-TWR测距

    简介 •测距.定位和数据传输. •利用双向测距(TOF)测量或单向到达时间差(TDOA)到达时间差,误差在10cm,经过一定的滤波可以达到更低. •跨越 3.5 GHz 至 6.5 GHz 的 6 个 ...

最新文章

  1. 机器的深度学习究竟有多“深”?
  2. 【位运算DFS/DLX】【HDU1426】【数独】
  3. spring加载顺序
  4. windows 的mysql5.7安装
  5. tornado 学习笔记17 HTTPServerRequest分析
  6. ArcGIS 10.5河流水系左斜体样式经典设置方法
  7. Wt::WTreeNode
  8. 解决python报错写入文件 io.UnsupportedOperation: not writable
  9. IOS绘制渐变背景色折线图的一种尝试
  10. 软件测试个人感悟之测试用例的评审重点是什么?
  11. 出去转了一转,便利店......
  12. 2. Android Basic 搭建Android开发环境
  13. commit分拆多个 git_git如何合并只有两个commit到一个?
  14. 7-24 说反话-加强版 (20 分)
  15. metadata文件_用Kubernetes部署Springboot或Nginx,也就一个文件的事
  16. Java热搜问题大整理
  17. linux gst-launch-1.0测试音视频
  18. 什么是光开光?它有什么作用?
  19. 程序自动修复相关工作总结
  20. Windows10更新后耳机没声音

热门文章

  1. Windows编程系列(前言)
  2. 错误使用 xlim (line 31) 范围必须为包含递增的日期时间值的 2 元素向量
  3. JavaEE学习08--jsp
  4. java 雪崩效应,Jmeter模拟雪崩效应
  5. 专治数仓疑难杂症!美团点评 Flink 实时数仓应用经验分享
  6. 2019 年度全球程序员薪酬报告:40岁以后普遍遭遇收入天花板
  7. Android View框架总结(九)KeyEvent事件分发机制
  8. android 函数式编程,响应式编程在Android中的应用
  9. linux 编辑文件 cat 跳到指定行,Linux文件操作详解(八)--文件的创建和编辑(vi/vim命令和cat命令)...
  10. python exec函数_Python3