当前位置: 首页 > news >正文

基于消失点的相机自标定

基于消失点的相机自标定

附赠最强自动驾驶学习资料:直达链接

相机是通过透视投影变换来将3D场景转换为2D图像。在射影变换中,平行线相交于一点称之为消失点。本文详细介绍了两种利用消失点特性的标定方法。目的是为根据实际应用和初始条件选择合适的标定方法提供一个实用的工具。这里详细介绍了两种不同消失点的方法进行相机标定,并进行了比较。首先,利用合成数据对这两个模型进行了分析。最后,对每种方法进行了实际标定结果进行测试,结果证明了标定的质量。

主要内容

当我们在使用相机实现三维重建或者虚拟现实等交互场景时,需要对相机进行校准或者称之为标定。常见的比如三维重建、目标检测、场景建图和物体重建或自定位等任务都需要对场景进行标定。仅仅捕捉图像是不够的。显式相机标定是指标定过程以一组物理参数结束,获得一个详细的模型,尽可能接近真实系统的完整描述。Salvi等人发表了一份相机校准方法与精度评估的对比评论。这项调查的一个显著优点是,它标准化了符号,便于比较著名的标定方法,如Tsai、Hall或Faugeras。后来Zhang、Chen[5]或Heikkila对所提出的模型进行了改进。最常见的相机模型是针孔相机,它通过从三维欧几里德空间到图像平面的投影变换来生成图像。假设一个理想的投影中,点的共线保持不变。因此,场景中的线作为线投影到图像平面上。射影空间的一个有趣的特性是平行线相交于图像上的一个点,这与我们熟悉的欧几里德空间中平行线从不相交的情况不同。所以我们我们可以说在射影空间下,平行线的交点位于无穷远处,它在图像像平面上的投影称为消失点(VP)。

在本文中,我们将使用简短的符号VPs来表示属于正交方向的消失点。人们提出了许多方法来精确检测VPs。VPs的特性直接与焦距和相机相对于世界坐标系的旋转有关。Caprile和Beardsley是最早使用VPs估计相机内部参数的公司之一。后来,Hartley和Zisserman、Cipolla等人或He使用VPs来计算相机参数。两个类似的工作提出了一种利用从包含两个vp的多幅图像中获得的calibration sphere来寻找本征参数的方法。作者解释了用于提取校准矩阵的绝对二次曲线图像与calibration sphere之间的关系。

这里我们知道射影变换由齐次坐标的非奇异线性变换组成:

image

单应性矩阵P3×4,又称投影矩阵,可分解为相机内参矩阵与世界坐标系到相机机坐标系的变换矩阵的乘积:

image

针孔相机的通用模型考虑了两个像轴之间的倾斜系数,用γ表示,以及纵横比,或者比例因子,用αu和αv表示。因此,摄像机矩阵K的形式如下:

image

然而,通常采用的简化方法是将倾斜度设为零(γ=0),比例因子等于1,即αu=αv=1。构成旋转和平移矩阵的六个外部参数是对应于每个正交轴的三个旋转和三个平移。当内外参数确定后,对摄像机进行标定。

这里提出两种利用消失点特性的相机标定方法。Guillou等人提出的第一种方法只使用两个消失点。第二种方法由Cipolla等人提出,它使用三个消失点来确定摄像机模型的七个参数。两种方法产生的模型最初用于建筑物场景模型。(因为建筑物能够方便的提取出三个轴方向的消失点)

用两个消失点标定相机

以两个坐标系为中心。将摄像机投影中心置于Oc处,图像的中心用Oi表示,Oc为在像面上的正交投影。设两个消失点V1和V2为世界坐标系的两个轴xw和yw的消失点,如图1所示。消失点在图像平面上的坐标是V1=(v1i,v1j)和V2=(v2i,v2j)。Oi在直线(V1V2)上的投影用Vi表示,主点位于光轴与像面相交处。其位置对于校准过程中的进一步计算至关重要。假设主点位于图像中心,纵横比等于1,即αu=αv=f,则只需使用两个消失点,就可以通过几何关系获得相机的内参和外参(这里有一个强制的假设主点位于图像的中心)

image

内参计算

图像中心被认为与主点重合。因此,它的坐标(u0,v0)立即获得。考虑Oc和Oi是沿光轴线的,可以计算焦距f,如上图所示,得到:

image

这里,OiVi是从图像中心到地平线的距离,由两个消失点计算可得

image

外参计算

世界坐标系和摄像机坐标系之间的旋转用矩阵R表示,考虑到两个消失点V1和V2在世界参考系的两个正交轴的方向上,以Ow为中心,所有平行线在一个消失点相交,我们可以建立一个矢量关系

image

与世界系统具有相同的方向。因此,新坐标系和相机坐标系之间的旋转与世界坐标系和相机坐标系之间的旋转相同。向量X′c,Yc′,Z′c为:

image

最终的旋转矩阵R可得:

image

相机校准的最后一步是计算平移向量t。假设我们已知场景中已知长度的一小段,其两个端点中的第一个位于世界原点。在不失概括性的情况下,世界的中心可以在场景中的任何一点上选择。线段由世界点P1=[0,0,0]T和P2=[xp2,yp2,zp2]T确定,如下图所示。

image

由于旋转矩阵R已知,我们可以将线段与其在相机坐标系中的图像对齐:

image

现实世界的线段由相机通过投影变换成像,产生两个图像点pi1px和pi2px,以像素表示。在针孔模型中,可以通过不做像素变换来计算图像中任何点的公制坐标,则第三个坐标是焦距:

image

现在可以在图像平面上进行线段平移,方法是将其第一个点设置在其图像PI1m上并计算第二个点的位置。因此,平移后的线段由点P′1和P′2表示:

image

由此得到的△p1′p2与图中的两个三角形p1′Q平行。利用相似三角形的性质,我们可以得到:

image

因此,从相机中心到世界中心的距离D可以计算为:

image

那么平移矩阵可得

image

用三个消失点标定相机

该方法使用了从场景中正交方向确定的三个vp。假设图像中的三个消失点可以由已知的图像确定,例如两个正交的方格图案。本文不讨论非结构化场景中的VPs检测方法,因为这一主题超出了本文的主题。

内参计算

在当前的方法中,我们认为主点位于图像的中心,倾斜度为零(γ=0),比例因子等于1,即αu=αv=f。因此,相机矩阵具有简化形式:

image

当图像大小已知时,直接确定主点的位置。唯一需要计算的固定参数是焦距。通过以下单应性,将三个相互正交方向对应的消失点投影到图像平面上:

image

这三个消失点可以用比例来表示为:

image

考虑到投影矩阵的分解,如等式(2)所示,可得:

image

考虑到无穷远处齐次点与平移向量相乘的影响,我们得到:

image

使用相机矩阵K,旋转矩阵R可以写成

image

利用旋转矩阵的正交性,并将其应用于前两列,我们得到

image

那么焦距可以计算如下

image

外参计算

外部参数是旋转矩阵R和平移向量t的一部分。如果确定了尺度因子λi,则可以计算方程中给出的旋转矩阵。为了计算它们,可以通过分离比例因子λi并使用无穷远处的齐次点与平移向量相乘来重新排列方程:

image

将两边的方程乘以(KR)T,并考虑旋转矩阵的正交性约束,得到:

image

这里定义Q矩阵为

image

包含尺度因子λi的向量可以通过重新排列方程(20)和(21)来分离得到:

image

尺度因子可以通过方程组(22)上的奇异值分解来计算,并且可以确定旋转矩阵。注意,如果尺度因子已知,则确定方程(20)的左侧,并且可以通过在等式(21)中计算其值来直接计算固有参数。

当从场景中得到相互正交的方向的三个消失点时,可以使用另一种方法计算主点(u0,v0)的坐标,方法是找到由消失点形成的三角形的正交中心。平移向量t是从摄像机原点指向世界原点的向量,由投影矩阵的最后一列给出。世界坐标系的投影是从等式(1)中获得的,设定随机选择的原点的值Xi=0,Yi=0,Zi=0。在没有场景附加信息的情况下,从单个视图获得的平移将达到比例,其中λi具有任意值。如果有附加信息,如线段的长度或场景中点的坐标,则可以精确地提取平移矢量。设Ri为旋转矩阵的第i行,并且PWI=(X,Y,Zi,1)T是场景的点,投影到图像平面上

image

然后,得到以下方程组:

image

变换后得到

image

重新书写如下

image

平移向量的分量可以通过叠加多对图像和场景点的方程(26)来计算,并使用奇异值分解来求解得到。寻找三个消失点需要至少六个点,放置在场景中三个相互正交的轴上,这些点也可以用于计算平移向量。

实验结果

为了研究所实现方法对噪声的鲁棒性,我们进行了一系列实验。在合成环境中工作的优点是可以获得绝对的地面真实值。在真实场景中,噪声通常存在于图像层面,因此,高斯噪声逐渐被加入到图像中,并利用受影响的图像对相机进行标定。在知道VPs的位置后,可以使用前面介绍的标定方法来估计相机模型。这一步是为了增加高斯噪声水平而反复进行的。为了获得尽可能接近每个方法的典型行为的结果,已经进行了50次迭代。通过计算图像、内参数和外参数三种输出的误差,测量了噪声对标定模型的影响。图像误差计算为参考点和重新投影点之间的距离。比较了摄像机的内参数αu和αv以及外部参数,即摄像机与世界参考系之间的旋转和平移。

附赠最强自动驾驶学习资料:直达链接

相关文章:

基于消失点的相机自标定

基于消失点的相机自标定 附赠最强自动驾驶学习资料:直达链接 相机是通过透视投影变换来将3D场景转换为2D图像。在射影变换中,平行线相交于一点称之为消失点。本文详细介绍了两种利用消失点特性的标定方法。目的是为根据实际应用和初始条件选择合适的标…...

Python:filter过滤器

filter() 是 Python 中的一个内置函数,用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该函数接收两个参数,一个是函数,一个是序列,序列的每个元素作为参数传递给函数进行判定&…...

Python函数学习

Python函数学习 1.函数定义 在函数定义阶段只检查函数的语法问题 2.实参形参 ​​​​总结: (1)位置参数就是经常用的按照位置顺序给出实参的值; (2)关键字实参形式:key123;放在…...

IDEA中的Project工程、Module模块的概念及创建导入

1、IDEA中的层级关系: project(工程) - module(模块) - package(包) - class(类)/接口具体的: 一个project中可以创建多个module一个module中可以创建多个package一个package中可以创建多个class/接口2、Project和Module的概念: 在 IntelliJ …...

如何快速下载并剪辑B站视频

1、B站手机端右上角缓存视频; 2、在手机文件管理助手中找到android/data/80找到两个文件,video.m4s和audio.m4s,将它们发送到电脑,系统会默认保存在你的个人文件夹里,C:\users\用户名 3、下载ffmepg https://blog.cs…...

智慧矿山新趋势:大数据解决方案一览

1. 背景 随着信息技术的快速发展和矿山管理需求的日益迫切,智慧矿山作为一种创新的矿山管理方式应运而生。智慧矿山借助先进的信息技术,实现对矿山生产、管理、安全等各方面的智能化、高效化、协同化,是矿山行业转型升级的必然趋势。 欢迎关…...

Ubuntu使用Docker部署Nginx容器并结合内网穿透实现公网访问本地服务

目录 ⛳️推荐 1. 安装Docker 2. 使用Docker拉取Nginx镜像 3. 创建并启动Nginx容器 4. 本地连接测试 5. 公网远程访问本地Nginx 5.1 内网穿透工具安装 5.2 创建远程连接公网地址 5.3 使用固定公网地址远程访问 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#…...

面试笔记——Redis(使用场景、面临问题、缓存穿透)

Redis的使用场景 Redis(Remote Dictionary Server)是一个内存数据结构存储系统,它以快速、高效的特性闻名,并且它支持多种数据结构,包括字符串、哈希表、列表、集合、有序集合等。它主要用于以下场景: 缓…...

电机学(笔记一)

磁极对数p: 直流电机的磁极对数是指电机定子的磁极对数,也等于电机电刷的对数。它与电机的转速和扭矩有直接关系。一般来说,极对数越多,电机转速越低,扭矩越大,适用于低速、高扭矩的场合;相反&…...

数值分析复习:Newton插值

文章目录 牛顿(Newton)插值引入背景插值条件基函数插值多项式差商差商的基本性质差商估计差商的Leibniz公式 余项估计 本篇文章适合个人复习翻阅,不建议新手入门使用 牛顿(Newton)插值 引入背景 Lagrange插值每引入一…...

金融知识分享系列之:出场信号RSI指标

金融知识分享系列之:出场信号RSI指标 一、出场信号RSI指标二、RSI指标原理三、 指标用法四、RSI指标总结 一、出场信号RSI指标 名称:相对强弱指标参数:(默认14)组成:RSI线以及30轴、50轴、70轴构成 0-30是极弱:0-30的…...

基于Spring Boot的宿舍管理系统

摘 要 随着信息时代的来临,过去的传统管理方式缺点逐渐暴露,对过去的传统管理方式的缺点进行分析,采取计算机方式构建宿舍管理系统。本文通过课题背景、课题目的及意义相关技术,提出了一种楼宇信息、宿舍信息、宿舍安排、缺勤信息…...

全量知识系统“全基因序列”程序构想及SmartChat的回复

感觉上,全量知识系统的程序起点基本确定。下一步就是程序了。程序的整个设计过程都准备同时使用两个AI工具。以下是和“百度AI”同步进行的Q&A。 Q1. 基本假设:“全基因序列”中“基因”的本质是联结collection。 做法是: 对给出的一个…...

315晚会曝光主板机产业链,如何应对工作室技术更迭

近日,央视315晚会开播,曝光了一批最新案例,聚焦消防、食品、金融、数据等多个领域。其中 “网络黑灰产”硬件设备「手机主板机」及其产业链暴露在大众视野。 手机主板机实物丨图源:央视财经 据报道,主板机的构造是将数…...

Copilot with GPT-4与文心一言4.0:AI技术的未来

Copilot with GPT-4的深度分析 Copilot with GPT-4是基于OpenAI的GPT-4模型,它是一个多功能的AI助手,能够在多种语言中进行交流和创作。GPT-4模型的强大之处在于其庞大的数据训练基础,这使得它在理解语境、生成文本以及执行复杂任务方面表现…...

注册-前端部分

前提:后端jar环境、Vue3环境、Redis环境 搭建页面(html标签、css样式) → 绑定数据与事件(表单校验) → 调用后台接口(接口文档、src/api/xx.js封装、页面函数中调用) Login.vue文件&#xff…...

SpringBoot ApplicationListener实现发布订阅模式

文章目录 前言一、Spring对JDK的扩展二、快速实现发布订阅模式 前言 发布订阅模式(Publish-Subscribe Pattern)通常又称观察者模式,它被广泛应用于事件驱动架构中。即一个事件的发布,该行为会通过同步或者异步的方式告知给订阅该事件的订阅者。JDK中提供…...

嵌入式学习40-数据结构

数据结构 1.定义 一组用来保存一种或者多种特定关系的 数据的集合(组织和存储数据) 程序的设计: …...

k8s集群部署elk

一、前言 本次部署elk所有的服务都部署在k8s集群中,服务包含filebeat、logstash、elasticsearch、kibana,其中elasticsearch使用集群的方式部署,所有服务都是用7.17.10版本 二、部署 部署elasticsearch集群 部署elasticsearch集群需要先优化…...

【Python】清理conda缓存的常用命令

最近发现磁盘空间不足,很大一部分都被anaconda占据了,下面是一些清除conda缓存的命令 清理所有环境的Anaconda包缓存 删除所有未使用的包以及缓存的索引和临时文件 conda clean --all清理某一特定环境的Anaconda包缓存 conda clean --all -n 环境名清…...

代码随想录算法训练营第46天 | 完全背包,139.单词拆分

动态规划章节理论基础: https://programmercarl.com/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 完全背包理论基础: https://programmercarl.com/%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%98%E7%90%86%E8%AE%BA%E5%9…...

rust - 将windows剪贴板的截图保存为png

本文提供了将windows系统的截图另存为png格式图片的方法。 添加依赖 cargo add clipboard-win cargo add image cargo add windows配置修改windows依赖特性 [dependencies] image "0.25.0"[target.cfg(windows).dependencies] windows "0.51.1" clipb…...

pyflink1.18.0 报错 TypeError: cannot pickle ‘_thread.lock‘ object

完整报错 Traceback (most recent call last):File "/Users//1.py", line 851, in <module>ds1 = my_datastream.key_by(lambda x: x[0]).process(MyProcessFunction()) # 返回元组即: f0 f1 f2 三列File "/Users/thomas990p/bigdataSoft/minicondaarm/…...

算法学习系列(四十一):Flood Fill算法

目录 引言一、池塘计数二、城堡问题三、山峰和山谷 引言 关于这个 F l o o d F i l l Flood\ Fill Flood Fill 算法&#xff0c;其实我觉得就是一个 B F S BFS BFS 算法&#xff0c;模板其实都是非常相似的&#xff0c;只不过有些变形而已&#xff0c;然后又叫这个名字。关于…...

Re62:读论文 GPT-2 Language Models are Unsupervised Multitask Learners

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名&#xff1a;Language Models are Unsupervised Multitask Learners 论文下载地址&#xff1a;https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learner…...

stm32-编码器测速

一、编码器简介 编码电机 旋转编码器 A,B相分别接通道一和二的引脚&#xff0c;VCC&#xff0c;GND接单片机VCC&#xff0c;GND 二、正交编码器工作原理 以前的代码是通过触发外部中断&#xff0c;然后在中断函数里手动进行计次。使用编码器接口的好处就是节约软件资源。对于频…...

全国各省市县统计年鉴/中国环境统计年鉴/中国工业企业数据库/中国专利数据库/污染排放数据库

统计年鉴是指以统计图表和分析说明为主&#xff0c;通过高度密集的统计数据来全面、系统、连续地记录年度经济、社会等各方面发展情况的大型工具书来获取统计数据资料。 统计年鉴是进行各项经济、社会研究的必要前提。而借助于统计年鉴&#xff0c;则是研究者常用的途径。目前国…...

【LAMMPS学习】二、LAMMPS安装(2)MacOS和Win安装

2. LAMMPS安装 您可以将LAMMPS下载为可执行文件或源代码。 在下载LAMMPS源代码时&#xff0c;还必须构建LAMMPS。但是对于在构建中包含或排除哪些特性&#xff0c;您有更大的灵活性。当您下载并安装预编译的LAMMPS可执行文件时&#xff0c;您只能安装可用的LAMMPS版本以及这些…...

如何解决网络中IP地址发生冲突故障?

0、前言 本专栏为个人备考软考嵌入式系统设计师的复习笔记&#xff0c;未经本人许可&#xff0c;请勿转载&#xff0c;如发现本笔记内容的错误还望各位不吝赐教&#xff08;笔记内容可能有误怕产生错误引导&#xff09;。 1、个人IP地址冲突解决方案 首先winR&#xff0c;调出…...

机器学习常用框架

机器学习是人工智能的一个重要分支&#xff0c;它通过让计算机系统利用数据自我学习来改进任务执行的能力。在机器学习领域&#xff0c;有许多成熟的框架被广泛使用&#xff0c;这些框架提供了构建和训练机器学习模型的工具。以下是一些常用的机器学习框架&#xff1a; Tensor…...

网站建设自己在家接单/sem是什么专业

《企业级 VMware vSphere 6.7虚拟化技术配置与管理》课程共分为“上集”和“下集”两部分&#xff0c;本套视频为“上集”部分&#xff0c;从零基础讲起&#xff0c;由浅入深&#xff0c;是虚拟化入门与提高学习推荐课程。通过本课程学习&#xff0c;可以全面、深入、系统掌握v…...

网页游戏排行版/陕西网络营销优化公司

前台JSON对象传给springmvc&#xff0c;解析为map对象 javascript: $.ajax({url : url,method : post,contentType : application/json, // 这句不加出现415错误:Unsupported Media Typedata : JSON.stringify(obj), // 以json字符串方式传递success : function(data) {console…...

响应式网站建设的未来发展6/网络推广员具体做什么的

Netty In Action中文版 - 第十五章&#xff1a;选择正确的线程模型 本章介绍 线程模型(thread-model)事件循环(EventLoop)并发(Concurrency)任务执行(task execution)任务调度(task scheduling)线程模型定义了应用程序或框架如何执行你的代码&#xff0c;选择应用程序/框架的正…...

网站建设整个流程图/福清seo

我的应用程序以PEM格式存储私钥,现有代码适用于RSA密钥但我试图切换到EC密钥并且存在问题.密钥恢复似乎有效,并且恢复密钥上的equals方法对原始密钥返回true,但原始密钥上的getAlgorithm()返回“EC”并返回恢复密钥“ECDSA”.算法中的差异后来导致问题,因为它与相应公钥的算法不…...

网站建设刂金手指下拉十五/百度首页优化

767. 重构字符串(贪心&#xff0c;计数&#xff09; 题目描述&#xff1a; 给定一个字符串S&#xff0c;检查是否能重新排布其中的字母&#xff0c;使得两相邻的字符不同。 若可行&#xff0c;输出任意可行的结果。若不可行&#xff0c;返回空字符串。示例一&#xff1a; 输入…...

河南省住房和城乡建设厅网站主页/靠谱的影视后期培训班

超声波切割机是一种专门用于切割的超声波设备&#xff0c;是超声波应用的重要门类之一。超声波设备_百度百科​baike.baidu.com原理与传统的切割完全不同。超声波切割机利用超声波的能量&#xff0c;将被切割材料的局部加热熔化&#xff0c;从而达到切割材料的目的。超声波切割…...