如何通过图像消失点计算相机的位姿?

论文阅读模块将分享点云处理,SLAM,三维视觉,高精地图相关的文章。公众号致力于理解三维视觉领域相关内容的干货分享,欢迎各位加入我,我们一起每天一篇文章阅读,开启分享之旅,有兴趣的可联系微信dianyunpcl@163.com。

基础知识

本文主要是个人在学习过程中的笔记和总结,如有错误欢迎留言指出。也欢迎大家能够通过我的邮箱与博主进行交流或者分享一些文章和技术博客。

c4dc9c62437a1307dd8460b4907675dd.png

首先我们来学习一下在自动驾驶领域中常见的坐标系之间的关系,如图所示:

b4515b4ee0fc780152efef2c76aa0f4d.png

自动驾驶中坐标系的一般定义如图所示

默认摄像头的坐标系对应于车辆的“右”、“下”和“前”方向

这里首先描述一下如何在世界坐标和相机坐标之间进行变换,但上述任意两个参考帧之间的变换也适用相同的数学原理,世界坐标系中的点(Xw,Yw,Zw)T 通过旋转矩阵R(更精确地说,R∈SO(3))和平移向量t映射到相机坐标系中的点∈R3×3

34f03d27dfeb054f2b145b9a89bd9bad.png

再介绍旋转的偏航角(yaw)、俯仰角(pitch)和滚动(roll)的概念:实际的相机帧和默认相机帧之间的一般旋转可以通过以下方式描述:

首先围绕Zd轴旋转一个角度(称为滚动角度),然后旋转另一个角度(称为俯仰角度)围绕Xd轴,最后是围绕Yd轴的另一个角度(称为偏航角)。如下图所示:

7d8585093cb033b4628c1a30b318ab96.png

如果我们将滚动角(roll)的余弦和正弦分别定义为cp和cr,则滚动旋转矩阵为

0e2d7d25fb71dab2b6eaca518fa22794.png

定义俯仰角(pitch)的余弦和正弦为cp和sp,偏航角(yaw)的余弦和正弦为cy和sy,俯仰和偏航旋转矩阵为

56855d7f0b8ad53ec36fb69a3e614f0c.png

那么最终的旋转矩阵则可以通过横滚、俯仰和偏航矩阵相乘表示为

79a72990a5d9dc20a896e93851d5c439.png

消失点计算俯仰角和偏航角

我们知道,车辆行驶轨道或车道线基本上是平行的,但是,如果我们用相机拍摄轨道或道路的图像,我们会发现图像中的轨道线或车道并不平行。这些线在图像中相交的点称为消失点。

使用这种消失点方法来计算相机位姿,实际上我们只能恢复相机的偏航和俯仰,从直觉上讲,消失点方法无法恢复横滚角和平移,因为消失点不受这两种方法的影响!

35340fa7bf94585f918a799f022f840e.png

默认的车辆俯仰角和偏航角横滚角的定义

不同roll角的图像可视化:

4e2de9c5d29a35e86c977a60e9126fa3.png

roll  =20度

7aad35a45b425eecc92e7fff18a7ab70.png

 roll  =0度

8952f162c92340ce809550448916cbb8.png

 roll  =-20度

我们知道在世界坐标系中,这些平行线永远不会相交,所以我们说消失点在无穷远处,假设汽车的前进方向与车道线对齐,我们可以说车道线的相交点的坐标的Z=∞, 其中(X,Y,Z)是道路参考坐标系中一点的坐标。

我们刚刚所做的假设非常非常重要:车辆与车道对齐,车道笔直,然后,图像中车道线的交点(消失点)将为我们提供有关摄像头安装的位姿信息,即摄像头相对于车辆的方向,否则,它只能告诉我们车辆相对于车道线的方向

公式推导

首先根据相机的投影方程

6a25b90ccc19c1730689764075cd50c5.png

因为这是齐次坐标中的一个方程,我们可以将两边乘以1/Z,并将这个数字换算到左边的λ中:

0a5c174f28a94874a838b3eb5fb8e473.png

如果让Z为无穷大,则得到图像空间中消失点的坐标(u,v):

179c14e473eb280a6fa53059898b1fa7.png

我们定义p∞=(u,v,1)T作为消失点,我们将变换矩阵的分量表示为

3cf9ec29e42d22e14296a26de6fd7061.png

现在,将变换矩阵与(0,0,1,0)T相乘将消除第1、2和4列,只剩下第3列,其值为Rxz、Ryz和Rzz。让我们用r3表示该列。然后

51a1bdb89e5d14f664907f56512abc14.png

旋转矩阵的列始终是长度为1的向量(单位向量),因此∥r3∥=1.因此,λ等于

d17aada50a17847a74b8ddb33fbc8c63.png

最终得到r3 表达式

75f6e918ecf84f341bdaf44d79f627b9.png

用于相机位姿估计的消失点方法的思想如下:首先确定图像中的消失点(u,v),因为该点是车道线相交的点,这就产生了p∞=(u,v,1)T,由于我们知道内参矩阵K,我们可以使用上面的公式计算r3。当然,r3只是旋转矩阵三列中的一列,但正如计算结果r3显示的,其包含足够的信息来确定旋转的偏航角和俯仰角,如果我们假设滚动角为零(当然是近似值),我们是可以计算整个旋转矩阵的。

我们对r3进行进一步的推导和分解

根据横滚、俯仰和偏航矩阵表达相机的旋转矩阵

82d2ad1cdb689bd5d4d4c17219018f64.png

此旋转矩阵的第三列为

a7d3a387b1b56f7ae446bfbc242445a3.png

如果我们确定图像中的消失点(u,v),我们就知道p∞=(u,v,1)T,因此我们可以计算r3=(Rxz,Ryz,Rzz)T的值,根据上面r3的公式,对于α和β,通过求解等式r3,我们得到:

46cdcce67e29eb7c81f74c42facf69a5.png

因此,我们从消失点推导出了俯仰角和偏航角!

资源

三维点云论文及相关应用分享

【点云论文速读】基于激光雷达的里程计及3D点云地图中的定位方法

3D目标检测:MV3D-Net

三维点云分割综述(上)

3D-MiniNet: 从点云中学习2D表示以实现快速有效的3D LIDAR语义分割(2020)

win下使用QT添加VTK插件实现点云可视化GUI

JSNet:3D点云的联合实例和语义分割

大场景三维点云的语义分割综述

PCL中outofcore模块---基于核外八叉树的大规模点云的显示

基于局部凹凸性进行目标分割

基于三维卷积神经网络的点云标记

点云的超体素(SuperVoxel)

基于超点图的大规模点云分割

更多文章可查看:点云学习历史文章大汇总

SLAM及AR相关分享

【开源方案共享】ORB-SLAM3开源啦!

【论文速读】AVP-SLAM:自动泊车系统中的语义SLAM

【点云论文速读】StructSLAM:结构化线特征SLAM

SLAM和AR综述

常用的3D深度相机

AR设备单目视觉惯导SLAM算法综述与评价

SLAM综述(4)激光与视觉融合SLAM

Kimera实时重建的语义SLAM系统

SLAM综述(3)-视觉与惯导,视觉与深度学习SLAM

易扩展的SLAM框架-OpenVSLAM

高翔:非结构化道路激光SLAM中的挑战

SLAM综述之Lidar SLAM

基于鱼眼相机的SLAM方法介绍

扫描下方微信视频号二维码可查看最新研究成果及相关开源方案的演示:

如果你对本文感兴趣,请点击“原文阅读”获取知识星球二维码,务必按照“姓名+学校/公司+研究方向”备注加入免费知识星球,免费下载pdf文档,和更多热爱分享的小伙伴一起交流吧!

以上内容如有错误请留言评论,欢迎指正交流。如有侵权,请联系删除

扫描二维码

                   关注我们

让我们一起分享一起学习吧!期待有想法,乐于分享的小伙伴加入免费星球注入爱分享的新鲜活力。分享的主题包含但不限于三维视觉,点云,高精地图,自动驾驶,以及机器人等相关的领域。

分享及合作:群主微信“920177957”(需要按要求备注) 联系邮箱:dianyunpcl@163.com,欢迎企业来联系公众号展开合作。

点一下“在看”你会更好看耶

84644d41a21a642938105df9f721ace3.gif

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点云PCL公众号博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值