计算机视觉基础(9)——相机标定与对极几何

前言

本节我们将学习相机标定对极几何两部分的内容。

在相机标定部分,我们将学习直接线性变换(Direct Linear Transform, DL,张正友标定法(Zhang’s Method)和 Perspective-n-Point (PnP) 这三种方法。

在对极几何部分,我们将了解极平面、基线、极点和极线等概念,以及相机相对位姿估计和对极约束。

一、相机标定

1.1  相机内外参

内参:描述相机本身的属性,同一相机,内参固定

外参:描述相机的姿态、位置,随时间变化

让我们来回顾一下相机的成像过程

1.2  相机标定概述

通过实验的方法计算和估计相机内外参数的过程称为相机标定(Camera Calibration)

相机标定的应用有:

• 矫正透镜畸变(内参标定)

• 建立相机成像几何模型,实现三维重构

相机标定的意义:

相机标定是非常关键的环节,标定结果的精度直接影响相机工作产生结果的准确性

做好相机标定是做好后续工作的前提

下面讲解三种相机标定的常见方法:

直接线性变换 (Direct Linear Transform, DLT)——同时估计内外参

张正友标定法 (Zhang’s Method)——估计内参

Perspective-n-Point (PnP)——估计外参

1.3  直接线性变换(DLT)

1.3.1  基本设定

已知:部分参考点在图像坐标系和世界坐标系下的坐标

• 求解:相机的内参矩阵𝑲、外参𝑹与𝒕

1.3.2  世界坐标系到图像坐标系的映射

1.3.3  关于矩阵M自由度的解释

1.3.4  DLT算法的基本思路和流程

1.3.5  小结

DLT方法通过计算未标定数据 (Uncalibrated Camera)的映射参数矩阵𝑀,来计算相机内外参

需要已知至少6个观测点的世界坐标和图像坐标

当已知观测点近似落在同一平面时,DLT求解不稳定

1.4  张正友标定法

【参考文献】

Zhang, A flexible new technique for camera calibration, IEEE TPAMI, 2000

1.4.1  标定工具:标定板

相机标定往往需要观测点在世界坐标系中的坐标,但是世界坐标不易测量

因此,引入二维标定板

由规则的黑白棋盘格构成,尺寸已知

网格点可以被角点检测算法自动、准确检测出

在标定板上建立世界坐标系,标定板位于Z=0平面,网格点作为观测点

二维标定板的优势如下:

  1. 观测点世界坐标易得
  2. Z=0降低了求解复杂度

1.4.2  从世界坐标系到图像坐标系的映射

• 用于描述两个平面之间的映射关系

• 共有3 × 3 = 9个元素,但由于齐次性,自由度为8

1.4.3  求解内参矩阵

1.4.4  张氏标定法基本思路和流程 

  1. 在标定板上建立世界坐标系,并以不同的位姿对其拍摄3张以上图像(可以晃动标定板或改变相机姿态)
  2. 利用角点检测算法对每张图中标定板上的网格点进行检测,每张图选取4个以上网格点作为标定点,并读取标定点的图像坐标和世界坐标
  3. 利用3张图像的观测点列出3个方程组,通过SVD分解计算3个单映矩阵 𝑯
  4. 利用三个单映矩阵 𝑯 列出6个关于矩阵 𝑩 的方程,并利用SVD分解求出 𝑩 
  5. 由于 𝑩 = 𝑲−⊺𝑲−𝟏 ,对求出的 𝑩 进行cholesky 矩阵分解:𝑩 = 𝑨𝑨⊺→𝑲 = 𝑨 −⊺

1.5  PnP

1.5.1  基本设定

已知:至少3个参考点在图像坐标系和世界坐标系下的坐标,相机的内参矩阵𝑲

求解:外参𝑹𝒕,即估计相机在世界坐标系下的位置

1.5.2  基本思路

二、对极几何

2.1  对极几何(Epipolar Geometry)简介

以上三种相机标定方法均需图像中观测点的世界坐标

相比于世界坐标,观测点的图像坐标更容易获取

给定同一场景的两张图像,能否仅根据对应点的图像坐标估计相机的相对姿态?

利用对极几何约束

2.2  对极几何的基本设定

𝑰𝟏, 𝑰𝟐是同一场景拍摄的两张图像,𝑶𝟏, 𝑶𝟐是拍摄时的相机中心

相机的相对运动/姿态为 𝑹, 𝒕

换言之,以相机𝑶𝟏的相机坐标系为世界坐标系,相机𝑶𝟐的外参是𝑹, 𝒕

空间中的点𝑷在两图中投影为𝒑𝟏, 𝒑𝟐

平面 𝑶𝟏𝑶𝟐𝑷 称为极平面 (Epipolar Plane),  𝑶𝟏𝑶𝟐 称为基线(Baseline),基线与 𝑰𝟏,𝑰𝟐 的交点 𝒆𝟏, 𝒆𝟐 称为极点 (Epipole),极平面与两张图像的交线 (𝒑𝟏𝒆𝟏, 𝒑𝟐𝒆𝟐称为极线 (Epipolar Line)

2.3  极线的物理意义

  1. 在仅已知投影点𝒑𝟏坐标的情况下,无法获得3D𝑷的具体未知,只能推断出点𝑷在投影射线𝑶𝟏𝒑𝟏
  2. 直线𝑶𝟏𝒑𝟏在图像𝑰𝟐上的投影就是极线𝒑𝟐𝒆𝟐
  3. 所以空间中投影在图像𝑰𝟏𝒑𝟏位置上的点在图像𝑰𝟐上对应点位于直线𝒑𝟐𝒆𝟐
  4. 换言之,图像𝑰𝟏上的一个点𝒑𝟏与图像𝑰𝟐上的一条直线𝒑𝟐𝒆𝟐对应

2.4  极线的解析式

【对极约束】

2.5  相机相对位姿估计与对极约束

  • 给定两张图8个以上对应点,可以通过8点法求解线性齐次系统求出基础矩阵,然后如果相机已经进行标定(即𝑲 已知)可以求出本质矩阵,并进一步求出两个相机的相对位姿𝑹𝒕
  • 由于本质矩阵的齐次性,无法只通过对应点估计出相对位姿𝑅𝑡的绝对尺度
  • 如果已知两个相机的相对位姿𝑹𝒕,可以求出基础矩阵𝑭,进而获得极线𝒑𝟐𝒆𝟐的位置。𝒑𝟏点在图像𝑰𝟐上的对应点搜索空间可以从整幅图像缩小到极线上

总结

本节我们学习了相机标定和对极几何的基本概念。重点需要掌握直接线性变换和张正友标定法的基本流程,知道这两种方法需要几个观测点和几张图像能完成标定。还需要知道对极几何中极平面、基线、极点和极线的基本概念并在图中对应。最后需要掌握极线解析式的推导过程,知道两个约束关系以及其代表的物理含义,知道相机的相对位姿估计。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动手学深度学习——循环神经网络的简洁实现(代码详解)

文章目录 循环神经网络的简洁实现1. 定义模型2. 训练与预测 循环神经网络的简洁实现 # 使用深度学习框架的高级API提供的函数更有效地实现相同的语言模型 import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2lbatch_size, …

C#开发的OpenRA游戏之属性BodyOrientation(6)

C#开发的OpenRA游戏之属性BodyOrientation(6) 在顶层定义里会发现这个属性: ^SpriteActor: BodyOrientation: QuantizeFacingsFromSequence: RenderSprites: SpriteActor是用来定义角色的基本属性,它的第一个属性就是BodyOrientation,这个属性主要用来描述角色的身体的…

SVG的viewBox、width和height释义, 示例及代码

svg的是没有边界的,svg画布只是用于展示svg世界中某一个范围的内容,而对于超过了svg画布范围的内容,则会被遮挡。默认svg画布默认显示世界坐标下原点坐标的width*height面积的矩形视野。 ​ 我们可以通过viewBox来修改默认的显示配置&#…

Linux shell编程学习笔记27:tputs

除了stty命令,我们还可以使用tput命令来更改终端的参数和功能。 1 tput 命令的功能 tput 命令的主要功能有:移动更改光标、更改文本显示属性(如颜色、下划线、粗体),清除屏幕特定区域等。 2 tput 命令格式 tput [选…

macOS下如何使用Flask进行开发

👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的编码爱好者 大家好,我是全栈工…

想要精通算法和SQL的成长之路 - 摩尔投票法的运用

想要精通算法和SQL的成长之路 - 摩尔投票法的运用 前言一. 多数元素1.1 摩尔投票法 二. 多数元素II2.1 分析 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 多数元素 原题链接 1.1 摩尔投票法 简单来说,假设数组 num 的众数是 x,数组长度为n。 有…

CAS源码工程搭建记录

CAS源码工程搭建 1.下载2.gradle下载源改为阿里云,解决下载慢的问题3.解决保存 1.下载 git clone -b 5.3.x https://gitee.com/mirrors/CAS.git如果下载的是压缩包,导入工程会保存,因为builder.gradle的第20行开始有取git信息,如…

JavaWeb Day10 案例-部门管理

目录 一、查询部门 (一)需求 (二)思路 (三)查询部门 (四)、前后端联调 二、删除 (一)需求 (二)思路 (三&#xf…

复杂数据统计与R语言程序设计实验二

1、创建一个对象,并进行数据类型的转换、判别等操作,步骤如下。 ①使用命令清空工作空间,创建一个对象x,内含元素为序列:1,3,5,6,8。 ②判断对象x是否为数值型数据。 ③…

本地开发环境和服务器传输数据的几种方法

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

Vulkan渲染引擎开发教程 一、开发环境搭建

一 安装 Vulkan SDK Vulkan SDK 就是我们要搞的图形接口 首先到官网下载SDK并安装 https://vulkan.lunarg.com/sdk/home 二 安装 GLFW 窗口库 GLFW是个跨平台的小型窗口库,也就是显示窗口,图形的载体 去主页下载并安装,https://www.glfw.…

C语言的由来与发展历程

C语言的起源可以追溯到上世纪70年代,由Dennis Ritchie在贝尔实验室开发出来。C语言的设计目标是提供一种简洁、高效、可移植的编程语言,以便于开发底层的系统软件。在那个时代,计算机技术正在迅速发展,出现了多种高级编程语言&…

html使用天地图写一个地图列表

一、效果图&#xff1a; 点击左侧地址列表&#xff0c;右侧地图跟着改变。 二、代码实现&#xff1a; 一进入页面时&#xff0c;通过body调用onLoad"onLoad()"函数&#xff0c;确保地图正常显示。 <body onLoad"onLoad()"><!--左侧代码-->…

QCheckBox样式表

1、QCheckBox选择器和指示器类型 选择器类型描述QCheckBoxQCheckBox 的默认选择器。QCheckBox::indicatorQCheckBox 的指示器,即复选框的标记部分。QCheckBox::indicator:checkedQCheckBox 选中状态下的指示器。QCheckBox::indicator:uncheckedQCheckBox 未选中状态下的指示器…

MyBatis逆向工程

新建Maven工程 <build><plugins><plugin><!--mybatis代码自动生成插件--><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.6</version><confi…

2023年中职“网络安全“—Web 渗透测试②

2023年中职“网络安全“—Web 渗透测试② Web 渗透测试任务环境说明&#xff1a;1.访问http://靶机IP/web1/,获取flag值&#xff0c;Flag格式为flag{xxx}&#xff1b;2.访问http://靶机IP/web2/,获取flag值&#xff0c;Flag格式为flag{xxx}&#xff1b;3.访问http://靶机IP/web…

ClickHouse建表优化

1. 数据类型 1.1 时间字段的类型 建表时能用数值型或日期时间型表示的字段就不要用字符串&#xff0c;全String类型在以Hive为中心的数仓建设中常见&#xff0c;但ClickHouse环境不应受此影响。 虽然ClickHouse底层将DateTime存储为时间戳Long类型&#xff0c;但不建议存储Long…

[开源]基于 AI 大语言模型 API 实现的 AI 助手全套开源解决方案

原文&#xff1a;[开源]基于 AI 大语言模型 API 实现的 AI 助手全套开源解决方案 一飞开源&#xff0c;介绍创意、新奇、有趣、实用的开源应用、系统、软件、硬件及技术&#xff0c;一个探索、发现、分享、使用与互动交流的开源技术社区平台。致力于打造活力开源社区&#xff0…

【数据结构初阶】链表OJ

链表OJ 题目一&#xff1a;移除链表元素题目二&#xff1a;反转链表题目三&#xff1a;链表的中间节点题目四&#xff1a;链表中倒数第k个结点题目五&#xff1a;合并两个有序链表题目六&#xff1a;链表分割题目七&#xff1a;链表的回文结构题目八&#xff1a;相交链表题目九…