Efficient Global 2D-3D Matching for Camera Localization in a Large-Scale 3D Map

这篇具有很好参考价值的文章主要介绍了Efficient Global 2D-3D Matching for Camera Localization in a Large-Scale 3D Map。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Efficient Global 2D-3D Matching for Camera Localization in a Large-Scale 3D Map

1. 相似源码

由于paper并没有给出源码,我们找到了相似的源码:https://github.com/nadiawangberg/structure-based-visual-localization。

这是一个相机内部参数的文本文件,其中包含了一个内部参数矩阵K。该矩阵的元素用于将3D世界坐标系中的点转换为2D图像坐标系中的点。这个文件中的矩阵表示相机的内部参数,该矩阵的值在相机制造时被测量得到。

具体来说,这个文件中的每一行包含一个3×3的矩阵K。这个矩阵包含了相机的内部参数,它包括焦距、图像中心的偏移量和一个缩放因子。该矩阵用于将3D世界坐标系中的点投影到2D图像平面上。K矩阵中的值可以通过对相机进行标定(即在多个位置和朝向下拍摄一些图像,然后测量相机的参数)得到。

这里的K矩阵如下:

1520.4  0       302.32
0       1525.9  246.87
0       0       1

其中,第一行表示相机在水平方向上的焦距和图像中心的偏移量,第二行表示相机在竖直方向上的焦距和图像中心的偏移量,最后一行表示一个缩放因子和一个平移因子

打印:
K1:相机1的内参矩阵
K2:相机2的内参矩阵
R: 从相机1到相机2的旋转矩阵,是一个3x3的矩阵。
t: 从相机1到相机2的平移向量,是一个3x1的列向量。

函数返回相机1和相机2的投影矩阵P1和P2,分别是3x4的矩阵。

P1和P2分别是相机1和相机2的投影矩阵,是一个3x4的矩阵。

在计算机视觉中,我们通常使用投影矩阵将三维空间中的点投影到相机坐标系下的二维图像平面上。对于一个三维点 X = ( X , Y , Z ) X=(X,Y,Z) X=(X,Y,Z),它在相机坐标系下的表示为 X c = ( X c , Y c , Z c ) X_c=(X_c,Y_c,Z_c) Xc=(Xc,Yc,Zc)。那么,它在相机图像平面上的投影点 p = ( u , v ) p=(u,v) p=(u,v),可以通过以下方式计算:
Efficient Global 2D-3D Matching for Camera Localization in a Large-Scale 3D Map

其中, P P P是投影矩阵,是一个3x4的矩阵。因此,对于相机1和相机2,它们的投影矩阵分别是 P 1 P_1 P1 P 2 P_2 P2

在这个函数中,我们根据相机1和相机2的内参矩阵 K 1 K_1 K1 K 2 K_2 K2以及从相机1到相机2的旋转矩阵 R R R和平移向量 t t t,计算得到它们的投影矩阵 P 1 P_1 P1 P 2 P_2 P2。这些投影矩阵可以用来将三维空间中的点投影到相应的二维图像平面上。

这是一个 Python 函数,它接受两个相机的内参矩阵(K1 和 K2),以及它们之间的旋转和平移(R 和 t),并计算出它们的投影矩阵 P1 和 P2。

第一个相机的投影矩阵 P1 是通过将内参矩阵 K1 与一个 3x4 的矩阵相乘得出的,这个 3x4 的矩阵的前三列是单位矩阵,第四列是零向量。这个 3x4 的矩阵表示从相机的 3D 坐标系到世界坐标系的转换。

第二个相机的投影矩阵 P2 是通过将内参矩阵 K2 与一个 3x4 的矩阵相乘得出的,这个 3x4 的矩阵的前三列是旋转矩阵 R,第四列是平移向量 t。这个 3x4 的矩阵表示从世界坐标系到第二个相机的 3D 坐标系的转换。

该函数返回投影矩阵 P1 和 P2,它们的形状都是 3x4。

第一个相机和第二个相机的坐标系通常是不同的,因为它们位于不同的位置和方向上。在三维空间中,我们通常使用世界坐标系来表示场景中的点和物体,而每个相机都有它自己的相机坐标系。

相机坐标系通常是相机的成像平面上的一个二维坐标系和相机光轴所构成的三维坐标系的结合。

在相机坐标系中,成像平面通常被定义为 z = f z=f z=f 的平面,其中 f f f 是相机的焦距。相机坐标系的 x x x 轴通常指向成像平面的右侧, y y y 轴通常指向成像平面的下方, z z z 轴通常指向相机的光轴方向。

因此,第一个相机和第二个相机的坐标系通常是不同的,因为它们位于不同的位置、方向和距离上,因此需要使用不同的相机矩阵来表示它们的投影矩阵。

choose_solution.py

这段代码的作用是从一组旋转和平移矩阵 R t s Rts Rts中选择一个最优解。这些矩阵用于将一个点从相机1的坐标系转换到相机2的坐标系。

具体地,这个函数计算每个旋转和平移矩阵 R R R t t t对应的相机1和相机2的投影矩阵 P 1 P_1 P1 P 2 P_2 P2,并使用这些矩阵对一组匹配的图像点进行三角化,得到三维点云。然后,对于每个旋转和平移矩阵,计算哪些点在两个相机都能看到(即在两个相机前面),并计算它们的数量。最终选择能够看到最多点的旋转和平移矩阵作为最优解,并返回该矩阵。

函数的输入参数包括:

  • u v 1 uv1 uv1:一个 n × 2 n\times 2 n×2的矩阵,表示第一张图像中的 n n n个匹配点的像素坐标。
  • u v 2 uv2 uv2:一个 n × 2 n\times 2 n×2的矩阵,表示第二张图像中的 n n n个匹配点的像素坐标。
  • K 1 K1 K1 K 2 K2 K2:分别表示相机1和相机2的内参矩阵。
  • R t s Rts Rts:一个包含多个旋转和平移矩阵的列表。

函数的输出参数包括:

  • R R R t t t:被选择为最优解的旋转和平移矩阵。

eight_point.py

这段代码实现了从给定的图像点对中计算基础矩阵的过程。基础矩阵是一个 3x3 的矩阵,用于将图像1中的点映射到图像2中的极线。具体来说,基础矩阵可以用于计算两个图像上的点对之间的对极几何关系。

该函数使用的方法是标准化8点算法(normalized 8-point algorithm),该算法通过最小二乘法来估计基础矩阵。具体来说,它使用归一化坐标来构造一个 9 × 9 9 \times 9 9×9 的矩阵 A A A,然后使用奇异值分解(SVD)来计算基础矩阵 F F F。然后,通过强制基础矩阵满足 F ⊤ F = I F^\top F = I FF=I 的条件来获得最终的基础矩阵。

函数 normalize_points 用于对输入的点进行归一化,使得它们的坐标具有零均值和单位方差。函数 closest_fundamental_matrix 用于计算最接近给定基础矩阵的基础矩阵,满足 Frobenius 范数最小。

  • 第13行:计算 n × 9 n \times 9 n×9 的矩阵 A A A,矩阵每一行都是两个点 ( u 1 , v 1 ) (u_1, v_1) (u1,v1) ( u 2 , v 2 ) (u_2, v_2) (u2,v2) 通过 Kronecker product 生成的 2 × 2 2\times 2 2×2 的矩阵 [ u 1 u 2 u 1 v 2 u 1 v 1 u 2 v 1 v 2 v 1 u 2 v 2 1 ] \begin{bmatrix} u_1u_2 & u_1v_2 & u_1 & v_1u_2 & v_1v_2 & v_1 & u_2 & v_2 & 1 \end{bmatrix} [u1u2u1v2u1v1u2v1v2v1u2v21],这里是将一个矩阵分割成单个的部分(Kronecker product),然后每一行是对应的点生成的向量。

  • 第17行:对 A A A 进行 SVD,返回 U , s , V T U, s, VT U,s,VT,其中 s s s 是奇异值的向量。

  • 第19行:将 V T VT VT 的最后一行向量作为 F F F 的向量表示,并将其形状转换为 3 × 3 3\times 3 3×3 的矩阵。

  • 第21行:使用函数 closest_fundamental_matrix F F F 转换为最接近它的奇异值矩阵,该矩阵具有形式 [ s 1 0 0 0 s 2 0 0 0 0 ] \begin{bmatrix} s_1 & 0 & 0 \\ 0 & s_2 & 0 \\ 0 & 0 & 0 \end{bmatrix} s1000s20000 ,其中 s 1 s_1 s1 s 2 s_2 s2 F F F 的奇异值。

  • 第24行:使用 T 1 T1 T1 T 2 T2 T2 通过它们的转置来“去规范化” F F F,得到从像素坐标到基础矩阵的映射。 最后返回 F F F

epipolar_match.py

这段代码实现了对极线搜索,根据已知的基础矩阵 F F F 和图像1中的点 u v 1 uv1 uv1,在图像2中找到与之对应的点 u v 2 uv2 uv2

具体来说,该函数遍历所有的点 u v 1 uv1 uv1,计算出该点在图像2中的对极线,然后在该对极线上进行搜索,找到与该点最佳匹配的点。这里的“最佳匹配”是指在搜索过程中误差最小的点。

在搜索过程中,对于每个 u v 1 uv1 uv1,首先取出以该点为中心,宽度为 2 w + 1 2w+1 2w+1 的方形窗口 W 1 W1 W1。然后,沿着该点的对极线,从左往右依次取出图像2中的窗口 W 2 W2 W2,计算 W 1 W1 W1 W 2 W2 W2 之间的绝对差,以此作为误差衡量标准,寻找误差最小的 W 2 W2 W2,然后将其对应的点 u 2 u2 u2 作为该点在图像2中的匹配点 u v 2 uv2 uv2

需要注意的是,由于像素坐标必须为整数,因此在计算 u v 2 uv2 uv2 时,需要对计算结果进行四舍五入取整操作。此外,还需要判断 u v 1 uv1 uv1 u v 2 uv2 uv2 是否超出图像范围,避免访问不存在的像素,同时也需要设置窗口大小 w w w,避免访问不存在的像素。文章来源地址https://www.toymoban.com/news/detail-498515.html

到了这里,关于Efficient Global 2D-3D Matching for Camera Localization in a Large-Scale 3D Map的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DreamGaussian: Generative Gaussian Splatting for Efficient 3D Content Creation解读

    太卷啦,太卷啦,视觉太卷啦,赶紧跑路吧~_~ 介绍DreamGaussian: Generative Gaussian Splatting for Efficient 3D Content Creation论文方法,解释原理,本文不是机械翻译,而是尝试讲解方法原理 论文地址:https://arxiv.org/abs/2309.16653 github地址:https://github.com/dreamgaussian/dreamgaussian?tab=readme-ov-fil

    2024年04月09日
    浏览(31)
  • LGFormer:LOCAL TO GLOBAL TRANSFORMER FOR VIDEO BASED 3D HUMAN POSE ESTIMATION

    基于视频的三维人体姿态估计的局部到全局Transformer 作者:马海峰 *,陆克 * †,薛健 *,牛泽海 *,高鹏程† *            中国科学院大学工程学院,北京100049             鹏程实验室,深圳518055 来源:2022 IEEE International Conference on Multimedia and Expo (IEEE ICME) 基于Transformer的

    2024年02月09日
    浏览(30)
  • [论文笔记] SurroundOcc: Multi-Camera 3D Occupancy Prediction for Autonomous Driving

    Wei, Yi, et al. “Surroundocc: Multi-camera 3d occupancy prediction for autonomous driving.” Proceedings of the IEEE/CVF International Conference on Computer Vision. 2023. 将占用网格应用到多个相机构成的3D空间中; 使用BEVFormer中的方法获取3D特征, 然后使用交叉熵损失计算loss; 和BEVFormer区别是BEV中z轴高度为1, 这里

    2024年02月04日
    浏览(29)
  • 【论文笔记】A Robust Diffusion Modeling Framework for Radar Camera 3D Object Detection

    原文链接:https://openaccess.thecvf.com/content/WACV2024/html/Wu_A_Robust_Diffusion_Modeling_Framework_for_Radar_Camera_3D_Object_WACV_2024_paper.html 本文使用概率去噪扩散模型的技术,提出完全可微的雷达-相机框架。使用校准矩阵将雷达点云投影到图像上后,在特征编码器和BEV下的Transformer检测解码器中

    2024年01月18日
    浏览(28)
  • PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images

    PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images 旷视 本文的目标是 通过扩展 PETR,使其有时序建模和多任务学习的能力 以此建立一个 强有力且统一的框架。 本文主要贡献: 将 位置 embedding 转换到 时序表示学习,时序的对齐 是在 3D PE 上做 姿态变换实现的。提出了

    2024年02月16日
    浏览(30)
  • CFT:Multi-Camera Calibration Free BEV Representation for 3D Object Detection——论文笔记

    参考代码:暂无 介绍:在相机数据作为输入的BEV感知算法中很多是需要显式或是隐式使用相机内外参数的,但是相机的参数自标定之后并不是一直保持不变的,这就对依赖相机标定参数的算法带来了麻烦。如何提升模型对相机参数鲁棒性,甚至是如何去掉相机参数成为一种趋

    2024年02月01日
    浏览(37)
  • 论文精读《BEVDet: High-Performance Multi-Camera 3D Object Detection in Bird-Eye-View》

    背景介绍:二维的目标检测算法启发我们去寻找一个高效可用的三维目标检测算法 自动驾驶通过感知周围环境来做出决定,这是视觉领域中最复杂的场景之一。范式创新在解决二维目标检测中的成功激励着我们去寻找一个简练的、可行的、可扩展的范例,从根本上推动该领域

    2024年01月18日
    浏览(32)
  • 多模态融合2022|TransFusion: Robust LiDAR-Camera Fusion for 3D Object Detection with Transformers

    论文题目:TransFusion: Robust LiDAR-Camera Fusion for 3D Object Detection with Transformers 会议:CVPR2022 单位:香港科技大学,华为 1.摘要+intro 作者认为目前的坑是在point-wise级的融合,之前方法存在两个主要问题,第一,它们简单地通过逐个元素相加或拼接来融合LiDAR特征和图像特征,因此

    2023年04月08日
    浏览(39)
  • 【CV论文精读】【BEV感知】BEVDet: High-Performance Multi-Camera 3D Object Detection in Bird-Eye-View

    【CV论文精读】【BEV感知】BEVDet: High-Performance Multi-Camera 3D Object Detection in Bird-Eye-View BEVDet:鸟瞰下的高性能多摄像机三维目标检测 自动驾驶感知周围环境进行决策,这是视觉感知中最复杂的场景之一。范式创新在解决2D目标检测任务中的成功激励我们寻求一种优雅、可行和可

    2024年02月22日
    浏览(32)
  • Cross-modal Moment Localization in Videos论文笔记

    2018年 Cross-modal Moment Localization in Videos 一种称为“语言-时间注意力网络”的方法,该方法利用视频中的时间上下文信息学习单词的注意力。因此,我们的模型可以自动选择“听哪些单词”以定位所需的瞬间。 以一个具有代表性的查询来说:一个摩天轮首先进入视野。之前的模

    2024年02月09日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包