相机无须标定,使用基础矩阵F实现多相机内参自标定

news2024/11/13 9:44:10

Abstract

从给定的基本矩阵中进行两个摄像头的自我校准问题是几何计算机视觉中的基本问题之一。在已知主点和正方形像素的假设下,Bougnoux公式提供了一种计算两个未知焦距的方法。然而,在许多实际情况下,由于常见的奇异性,公式会产生不准确的结果。此外,估算值对计算出的基本矩阵中的噪声和假定的主点位置非常敏感。因此,在本文中,我们提出了一种高效且鲁棒的迭代方法,用于估计给定基本矩阵和相机内参估计先验值的焦距和主点。此外,我们研究了一种计算效率高的RANSAC模型生成检查方法,该方法可以提高估计模型的准确性,同时减少总计算时间。对真实和合成数据的广泛实验表明,即使依赖不准确的先验值,我们的迭代方法在焦距估计的准确性方面也显著优于Bougnoux公式和其他先进方法。相关方法和实验的代码可在相机校准中找到,即相机内参估计问题,是计算机视觉中的一个基本问题,有许多应用。估计内参(如焦距和主点)的精度显著影响结构自运动(SfM)、视觉定位、3D物体检测、增强现实和其他应用的精度。经典校准方法使用已知校准图案(如棋盘格)或观察场景的额外知识来估计相机内参。因此,它们通常不切实际。相比之下,自校准方法不需要额外的场景几何知识,而依赖于图像特征的自动检测。因此,它们在许多应用中更可取。
代码地址:
https://github.com/kocurvik/robust_self_calibration

Introduction

在本文中,我们研究了两个摄像头的自校准问题,这两个摄像头可能具有不同的内参,捕捉同一个场景。两个摄像头的几何关系可以通过基本矩阵来描述。Bougnoux在1998年提出了一种方法,它假设主点已知且像素是正方形的,可以从基本矩阵中用封闭形式的公式得到焦距。这种方法很方便,因为通常主点被假定在图像中心。但Bougnoux公式和其他类似方法在估计焦距时容易受到误差的影响,有时甚至会产生不实际的虚数焦距。这是因为这些方法对基本矩阵中的噪声和主点位置的假设非常敏感。此外,当摄像头的主轴共面时,这些方法会失效,这种情况在拍摄同一对象的不同视角图像时很常见。

另一种迭代优化方法可以估计摄像头的焦距和主点,解决了一些上述问题,但仍然依赖于Bougnoux公式,在某些摄像头配置下可能不准确。我们提出的方法将估计焦距和主点的问题转化为一个约束优化问题,使用先验值,并确保解满足Kruppa方程。我们通过寻找拉格朗日函数的驻点来解决这个优化问题,这导致了一个复杂的多项式方程组,但我们通过迭代和Grobner基方法高效地求解它。每次迭代中,我们解决一个涉及两个变量的四次多项式方程组。

Method

我们将从给定的基本矩阵F估计焦距的问题,使用先验条件作为优化问题来表述。设F的奇异值分解为F = UDV⊤,其中U = [u1, u2, u3]和V = [v1, v2, v3]是正交矩阵,D = diag(σ1, σ2, 0)是对角矩阵,包含F的两个非零奇异值σ1和σ2。

设ω*i = KiK⊤i是第i个相机的绝对圆锥的对偶图像,i = 1, 2,Ki是3×3的校准矩阵,形式如下所示:

图片

其中fi是焦距,主点ci = [ui, vi]⊤。对于固定主点,例如ci = [0, 0],i = 1, 2,从给定的基本矩阵F中提取焦距有一个封闭形式的解决方案,即Bougnoux公式。由于这个公式可能导致不稳定或虚数估计,在本公式中,我们允许移动估计的主点以避免这种不稳定性。

对于非固定主点ci,F可以分解为本质矩阵E和两个形式如(1)的校准矩阵,有无限多种分解方式。因此,我们将从F估计焦距的问题表述为一个受约束的优化问题,在优化过程中,焦距以及两个图像中主点的位置都被优化以最小化代价函数:

图片

其中fpi和cpi = [upi, vpi]⊤,i = 1, 2是焦距和主点的先验值,wfi和wci是预定的权重,κ1 = 0和κ2 = 0是两个Kruppa方程,它们是焦距和主点的函数,出现在ω*i = KiK⊤i中。

Kruppa方程确保输入的基本矩阵F和估计的校准矩阵K1和K2(1),矩阵K⊤1FK2是一个有效的基本矩阵。

代价函数(2)代价函数有几个优点。(1)它不包含Sampson误差项,(2)它直接作用在焦距fi上,而不是焦距的平方f2i。(3)最小化(2)不需要使用Bougnoux公式[2]进行计算或初始化,这样的初始化可能与真实焦距相差很远,在许多情况下可能导致f2i ≤ 0。因此,最小化(2)不需要使用f2i ≤ 0的特殊惩罚项。

受约束的优化问题(2)可以使用拉格朗日乘数法转换为无约束问题。这导致拉格朗日函数L(f1, f2, c1, c2, λ1, λ2):

图片

其中λ1和λ2是拉格朗日乘数。常数“−2”是为了更方便地后续操作方程而引入的,不影响最终解决方案。

在这种情况下,如果(f⋆1, f⋆2, c⋆1, c⋆2)是原始受约束问题(2)的最小点,那么存在λ⋆1和λ⋆2,使得(f⋆1, f⋆2, c⋆1, c⋆2, λ⋆1, λ⋆2)是L(3)的静止点,即所有L的偏导数消失的点。拉格朗日函数L(f1, f2, c1, c2, λ1, λ2)(3)是一个八个未知数的函数。因此,为了找到L的所有静止点,我们需要解决以下八个多项式方程的系统:

图片

不幸的是,八个方程(4)-(7)的系统太复杂,无法使用代数方法有效解决,例如使用Grobner基方法。接下来,我们提出了一种迭代方法,有效地找到系统(4)-(7)的解,该解最小化了代价函数(2)。

1. 迭代方法

首先,让我们表示Δfi = fi − fp_i, Δci = ci − cp_i, i = 1, 2。从方程(4)-(5)我们有

图片

原始受约束优化问题(2)中的代价函数可以重写为

图片

我们提出的迭代解方程(4)-(7)的方法遵循迭代三角测量方法的思想。首先,让我们用sk−1 = 〈f k−1 1, f k−1 2, c k−1 1, c k−1 2〉表示在(k − 1)次迭代后焦距和主点的最佳当前估计。先前值f0i ≡ fpi, c0i ≡ cpi, i = 1, 2用作初始化。在第k次迭代中,通过用当前最佳估计sk−1 = 〈f k−1 1, f k−1 2, c k−1 1, c k−1 2〉替换方程(8)-(9)右侧的焦距和主点〈f1, f2, c1, c2〉来获得更新的估计sk = 〈f k 1, f k 2, c k 1, c k 2〉。通过这种方式,我们得到Δfi和Δci的表达式,它们是两个拉格朗日乘数λ1和λ2的函数。然后,将Δfi和Δci依次代入Kruppa方程(6)和(7)。这是通过使用关系fi = Δfi + fpi和ci = Δci + cpi将Δfi和Δci,i = 1, 2代入ω*i来完成的。

更新后的Kruppa方程(6)和(7),我们表示为κk1 = 0和κk2 = 0,形成一个由两个未知数构成的四次方程组。这个系统最多有16个实数解,可以使用Grobner基方法有效解决。最终求解器执行一个20×36矩阵的消元,并从16×16矩阵的特征值和特征向量中提取解。从多达16个可能的解中,选择一个使|λ1| + |λ2|最小的解λk1和λk2。这个解用于使用方程(8)-(9)计算第k次迭代的更新Δfki和Δcki,然后是新的焦距和主点的估计sk = 〈f k 1, f k 2, c k 1, c k 2〉。

迭代算法在连续两次迭代的误差相对变化|ek−ek−1|/ek < ε,对于给定的阈值ε时停止。注意,在每次迭代中,获得的解满足Kruppa方程κ1 = 0和κ2 = 0。这意味着对于输入的基本矩阵F和估计的校准矩阵K1和K2(1),矩阵K⊤1FK2在每次迭代中都是一个有效的基本矩阵。

f1 = f2的情况可以使用相同的方法解决。在这种情况下,在代价函数(2)中,以及在拉格朗日函数和(4)-(5)中,我们只有i = 1。然而,由于我们仍然有两个Kruppa方程κ1 = 0和κ2 = 0,最终算法也依赖于解决两个未知数的四次方程组的解。算法总结在补充材料中。

2. RANSAC中的实焦距检查

在1中提出的方法通常应用于使用鲁棒的RANSAC风格估计获得的基本矩阵F。与Bougnoux公式相比,我们的方法在存在噪声或主点位置错误的情况下不会出现虚数焦距估计。因此,我们的方法不需要检查RANSAC返回的基本矩阵是否可以分解为实数焦距。尽管如此,正如我们在实验中观察到的,当使用Bougnoux公式分解时,导致虚数焦距的基本矩阵通常不提供良好的估计,因此不会被RANSAC选为最佳模型。

受到这一观察的启发,我们提出了一个基于拒绝导致虚数焦距的模型的RANSAC的简单修改。拒绝是在对所有点对应关系进行模型评分之前完成的。这减少了评分模型所需的计算时间,这种模型不太可能导致最终输出。因此,这种方法类似于其他退化检查算法。

为了拒绝模型,Bougnoux公式的修改版本,它的形式是基本矩阵元素的两个多项式的比率。公式返回平方焦距。当平方焦距之一的符号为负时,我们拒绝该模型。这种方法不需要使用SVD或其他昂贵的矩阵操作。这种检查可以实施到RANSAC的不同变体中,并且正如我们稍后在实验中所示,它导致计算时间减少,同时保持甚至提高姿态估计的准确性。实现细节可以在补充材料(SM)中找到。

Experiment

仿真实验:

图片

图片

真实实验:

度量标准:
我们采用平均平均精度(mAA)指标。这个指标的基础是姿态误差(perr),它是旋转和平移误差中的最大值,以度为单位计算。

基本矩阵估计:我们使用LoFTR获得点对应关系。我们在大小调整为最大尺寸等于1024像素的图像上进行推理。为了估计基本矩阵,我们使用MAGSAC++[1],并将极线阈值设置为3像素。

我们还进行了有无使用3.2小节中描述的实际焦距检查(RFC)的实验。图3显示,在Phototourism数据集上,使用RFC获得的基本矩阵通常可以导致更准确的姿态估计,同时也可以减少各种RANSAC实现的计算时间。

图片

比较方法:
我们将我们的方法与三种最先进的方法进行比较。我们评估了Bougnoux公式、Hartley和Silpa-Anan的迭代方法以及Fetzer等人的迭代方法。

对于所有图像,我们考虑主点位于它们的中心,这是一个常用的假设。除了Bougnoux公式之外,所有方法都需要焦距的先验或初始估计。按照COLMAP中建立的常规做法,我们将焦距的先验初始化为图像最大尺寸的1.2倍。这种初始设置意味着相机大约有50度的视野。

结果:
表1中报告了姿态和焦距的中位数误差和平均平均精度分数。在两个数据集上,我们的方法在估计焦距的准确性方面显著优于其他方法。我们方法在焦距准确性方面的优越性也可以在图4a和4b中看到。在姿态准确性方面,我们的方法也比所有比较的方法提供了更准确的结果。

结果还表明,在RANSAC中执行3.2小节提出的实际焦距的RFC通常可以在比较的方法中提高姿态和焦距的准确性。

图片

计算速度:
表2显示了各种方法的平均计算时间。我们的方法比其他迭代方法显著更快。请注意,我们方法的实现尚未优化,仍有加速的空间。

图片

相等的焦距:
我们还评估了我们的方法在假定两个焦距相等的情况下的表现。在这种情况下,我们使用第3.1节中我们迭代算法的修改版本。为了进行评估,我们使用了ETH3D Multiview数据集。我们使用测试集中12个场景的所有满足共视性标准的图像对,总共得到3830对。

图片

总结:

文章的主要贡献如下:

  1. 提出了一种新颖的迭代方法,用于从基本矩阵中估计焦距和主点。该方法在合成数据和真实大规模数据集上经过评估,显示出在焦距估计和相机姿态准确性方面具有显著的性能优势。

  2. 介绍了一种在RANSAC算法中用于检测和排除导致虚焦距的基本矩阵的高效退化检查方法。实验结果表明,这种方法能够在不同的RANSAC变体中提高计算速度,并提升姿态和焦距估计的准确性。

引用文章:

Kocur_Robust_Self-calibration_of_Focal_Lengths_from_the_Fundamental_Matrix

关注我的公众号auto_driver_ai(Ai fighting), 第一时间获取更新内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1983225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xshell无法连接Ubuntu20.4

在之前红帽版本里&#xff0c;直接下了就可以用xshell直接连接&#xff0c;但是Ubuntu20.4不能直接连接&#xff0c;我开始以为是密码错了&#xff0c;但是我想了想vscode连接不需要密码&#xff0c;一样连接不上&#xff0c;我就在网上找了很多方法&#xff0c;最后终于连接上…

总线学习4--UART

想来串口通信是我第一次接触嵌入式就知道的&#xff0c;一直调试也是用串口线&#xff0c;但是里面的原理还真不清楚。这次难得把环境弄出来了&#xff0c;就顺便学学。 一 环境搭建 还是老规矩&#xff0c;废话不多说&#xff0c;干就完事。 这次用的树莓派zero小板&#x…

云计算实训19——上线一个静态的前端系统(续)

上线一个静态的前端系统(续) 准备工作 在eleme服务器上&#xff1a; 启动服务 启动rpcbind [rooteleme-static ~]# systemctl restart rpcbind 启动nfs [rooteleme-static ~]# systemctl restart nfs 在static-server主机上&#xff1a; 1.重启服务 启动smb [rootstatic…

重塑汽车制造未来:3D插图技术大师,零误差高效驱动新时代

在当今快速革新的汽车制造领域&#xff0c;高效、精准的产品设计与制造流程已成为众多车企破浪前行的核心引擎。但随着市场竞争的日益激烈&#xff0c;在产品设计与制造中&#xff0c;传统二维CAD设计的局限性越发明显——设计周期长、沟通成本高、错误频发及资源利用低效等问题…

AI算力租赁是什么,哪些行业会有需求?

一、AI算力租赁的定义与概述 AI算力租赁是指基于人工智能&#xff08;AI&#xff09;应用需求&#xff0c;将所需的计算能力&#xff08;即算力&#xff09;通过租赁服务的方式提供给企业和个人用户。这种服务允许用户根据需要租用人工智能计算资源&#xff0c;如图形处理单元…

[网鼎杯2018]Unfinish解题,五分钟带你解题

目录 前期准备 ​编辑 扫描目录 寻找注入点 构建payload&#xff1a; 开始注入&#xff1a; 寻找过滤规则 绕过过滤 构建python脚本 提交flag 总结 前期准备 这道题是2018年网鼎杯的一道题&#xff0c;是比较经典的一道sql二次注入的题&#xff0c;我们一起来看一下 …

B1.3 程序状态寄存器PSTATE的介绍

快速链接: . 👉👉👉 ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 付费专栏-付费课程 【购买须知】个人博客笔记导读目录(全部) B1.3 进程状态,PSTATE* 程序状态寄存器或PSTATE,是程序状态信息的抽象。所有指令集都提供操作 PSTATE 元素的指令。 以下 PSTATE 信…

第二十一天内容

上午 4、mysql基础命令 5、mysql操作命令 ------------------------------------------------------------------------------------------------------------------------------- 下午 1、脚本安装mysql 2、mysql命令回顾 3、mysql用户权限设置 4、命令练习 6、权限角色 7、…

按xls标签替换docx及xls内容

WPSoffice环境下&#xff0c;需要批量替换doc文档及xls表格某些内容&#xff0c;在windows下&#xff0c;可以用VBA宏实现&#xff0c;先建一个标签表格&#xff0c;然后按标签批量替换。但在Linux下&#xff0c;WPS表格宏不能跨文档操作WPS文字&#xff0c;于是想用python实现…

工程架构简析

文内项目 Github&#xff1a;XIAOJUSURVEY 架构 架构的设计最终是为了场景可以快速扩展&#xff0c;基于工程底座&#xff0c;使用者能够专注于业务领域的深入。 B端&#xff1a;面向问卷管理者&#xff0c;专注于问卷管理、问卷投放和数据分析三大核心能力的建设。&#xff0…

vue3实现商品图片放大镜效果(芋道源码yudao-cloud 二开笔记)

今天开发一个防某商城的商品图片放大镜&#xff0c;鼠标移动到图片位置时&#xff0c;右侧出现一个已放大的图片效果。 示例如下&#xff1a; 下图的图片的放大效果和小图的切换封装成了组件PicShow.vue&#xff0c;可根据需求自行修改&#xff0c;如下&#xff1a; 第一步&…

鸿蒙应用服务开发【钱包服务(ArkTS)】

介绍 基于Stage模型&#xff0c;提供钱包交通卡和Pass卡的开卡、预览卡、查询卡信息、更新卡片信息、删除卡片、初始化钱包环境等功能。 效果预览 具体实现 交通卡 在hms.core.payment.walletTransitCard中定义了钱包交通卡接口API&#xff0c;示例接口如下&#xff1a; /*…

【漏洞复现】用友NC Cloud系统queryPsnInfo接口SQL注入

文章目录 0x00 漏洞描述影响范围 0x01 测绘工具0x02 漏洞复现0x03 Nuclei检测脚本0x04 修复建议0x05 免责声明 0x00 漏洞描述 用友NC Cloud存是一款大型企业数字化平台。 在受影响的版本中&#xff0c;攻击者可以通过未授权访问 /ncchr/pm/obj/queryPsnInfo 接口&#xff0c;利…

综合安防管理平台LntonCVS视频监控汇聚平台视频数据智能化与资源共享方案

随着全球城市化进程的加快&#xff0c;智慧城市概念日益受到重视。在这一趋势下&#xff0c;LntonCVS视频汇聚平台作为新型智慧城市的重要智能基础设施之一&#xff0c;扮演着关键角色。该平台整合、接入和管理城市中各类视频资源&#xff0c;涵盖公共安全视频、交通监控、城市…

【五大海内外高校支持】2024年数字经济与计算机科学国际学术会议(DECS2024)

大会官网&#xff1a;www.icdecs.net 大会时间&#xff1a;2024年9月20-22日 大会地点&#xff1a;中国-厦门 截稿日期&#xff1a;详情见官网 支持单位 马来西亚理工大学 北京科技大学经济管理学院 南京信息工程大学 马来西亚敦胡先翁大学 大会嘉宾 大会主席 罗航…

opencascade AIS_ViewController源码学习 视图控制、包含鼠标事件等

opencascade AIS_ViewController 前言 用于在GUI和渲染线程之间处理视图器事件的辅助结构。 该类实现了以下功能&#xff1a; 缓存存储用户输入状态&#xff08;鼠标、触摸和键盘&#xff09;。 将鼠标/多点触控输入映射到视图相机操作&#xff08;平移、旋转、缩放&#xff0…

Mybatis(Day 18)

数据持久化是将内存中的数据模型转换为存储模型&#xff0c;以及将存储模型转换为内存中数据模型的统称。MyBatis 支持定制化 SQL、存储过程以及高级映射&#xff0c;可以在实体类和 SQL 语句之间建立映射关系&#xff0c;是一种半自动化的 ORM 实现。ORM&#xff08;Object Re…

系统运维——PXE自动安装系统

摘要 PXE&#xff08;Preboot Execution Environment&#xff0c;预启动执行环境&#xff09;是一种允许计算机通过网络启动操作系统而无需本地存储设备的技术。本文详细介绍了 PXE 的定义、架构、原理、应用场景及常见命令体系。以 RedHat7 为例&#xff0c;展示如何配置和使…

Tooltip 文字提示

在偶然维护前端开发时&#xff0c;遇到页面列表中某个字段内容太长&#xff0c;且该字段使用了组件显示&#xff0c;导致不能使用纯文本得那个省略号代替显示得css样式效果&#xff0c;如下 所以只能另辟溪路了&#xff0c; 1、最开始想到是使用横向滚动得效果来实现&#xff…

【Vue3】Pinia存储及读取数据

【Vue3】Pinia存储及读取数据 背景简介开发环境开发步骤及源码 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋斗的日…