计算机视觉之三维重建(2)---摄像机标定

文章目录

  • 一、回顾线代
    • 1.1 线性方程组的解
    • 1.2 齐次线性方程组的解
  • 二、透镜摄像机的标定
    • 2.1 标定过程
    • 2.2 提取摄像机参数
    • 2.3 参数总结
  • 三、径向畸变的摄像机标定
    • 3.1 建模
    • 3.2 求解
  • 四、变换
    • 4.1 2D平面上的欧式变换
    • 4.2 2D平面上的相似变换和仿射变换
    • 4.3 2D平面上的透射变换
    • 4.4 3D平面上的欧式变换
    • 4.5 3D平面上的仿射变换
    • 4.5 3D平面上的透射变换


一、回顾线代

1.1 线性方程组的解

 对于线性方程组 A x = y Ax=y Ax=y,当矩阵 A A A 列满秩情况时:(1) 行数(方程数)小于未知数个数,欠定方程组,多解。(2) 行数(方程数)等于未知数个数,唯一解。(3) 行数(方程数)大于未知数个数,超定方程组,无解。

在这里插入图片描述

1.2 齐次线性方程组的解

  对于线性方程组 A x = 0 Ax=0 Ax=0,当矩阵 A A A 列满秩情况时:(1) 行数(方程数)小于未知数个数,欠定方程组,多解。(2) 行数(方程数)等于未知数个数,只有零解。(3) 行数(方程数)大于未知数个数,超定方程组,除零解外无解。

在这里插入图片描述

二、透镜摄像机的标定

2.1 标定过程

 1. 摄像机标定,即求解摄像机的内、外参数矩阵。摄像机的内、外参数矩阵描述了三维世界到二维像素的映射关系。

 2. 首先对于摄像机标定问题,约定像素坐标平面的点用 p p p 表示(不再用 P ′ P' P 表示),世界坐标系的点用 P P P 表示(不再用 P w P_w Pw 表示)。

在这里插入图片描述

 3. 当我们已知多个位置的对应关系时,那我们的目标就是根据这些点对应关系求出摄像机的内、外参数。

在这里插入图片描述

 4. 投影矩阵 M M M 3 × 4 3×4 3×4 的矩阵,我们写成如下的形式,则 m 1 , m 2 , m 3 m_1,m_2,m_3 m1,m2,m3 都是 1 × 4 1×4 1×4 的矩阵。
在这里插入图片描述

 那么像素坐标系的一个点 p i p_i pi 就可以定义为:

在这里插入图片描述

 4. 下面公式是将任意一个像素坐标系上的点,通过等式变换得到一个齐次线性方程,而多个点对又可以构成齐次线性方程组。
 摄像机投影矩阵有11个自由度(未知量)。由于每一个二维点在像素坐标系下为两个值,那么对于11个未知量来说最少需要12个方程来进行求解(由于像素坐标系下点的两个横纵坐标成对出现),那么就需要六对点来对应,但实际应用中一定是使用多于六对点来对应,通过最小二乘法消掉一部分错误的噪声点对,可以获得更好的鲁棒性效果。
 大多数情况下,生成的齐次线性方程数是远大于11的,方程数大于未知参数,齐次线性方程组为一个超定方程组,所以可以用齐次线性方程组的最小二乘法求解方法来求解同样的问题。

在这里插入图片描述

在这里插入图片描述

2.2 提取摄像机参数

 1. 将下面的投影矩阵展开,左一列为 3 × 3 3×3 3×3 的矩阵,右一列为 3 × 1 3×1 3×1 的向量,合起来投影矩阵为一个 3 × 4 3×4 3×4 的矩阵,由于通过齐次线性方程组的最小二乘法求解内外参数,从而导致真正的投影矩阵和求的投影矩阵之间存在一个比例系数 ρ ρ ρ 的关系,所以,括号里的为真实的投影矩阵(未知), M M M 为求解得到的投影矩阵。

在这里插入图片描述

 2. 我们把求解得到的投影矩阵 M M M 写成 [ A , b ] [A,b] [A,b] A A A 就是前三列, b b b 是最后一列,所以 ρ A = K R ρA=KR ρA=KR
A A A b b b 都是已知的。

在这里插入图片描述

 3. 旋转矩阵中每一行的模都是1,所以可以得到以下的结论。利用 ρ a 1 T ⋅ ρ a 3 T ρ{a_1}^T · ρ{a_3}^T ρa1Tρa3T ρ a 2 T ⋅ ρ a 3 T ρ{a_2}^T · ρ{a_3}^T ρa2Tρa3T 可以求出 u 0 u_0 u0 v 0 v_0 v0:点乘。

在这里插入图片描述

 4. 利用 ρ a 1 T × ρ a 3 T ρ{a_1}^T × ρ{a_3}^T ρa1T×ρa3T ρ a 2 T × ρ a 3 T ρ{a_2}^T × ρ{a_3}^T ρa2T×ρa3T 可以求出下面图中的式子。:叉乘。

在这里插入图片描述

 5. 由上面的式子可以得到 α α α β β β 的表达式。再将 ρ 2 ( a 1 × a 3 ) ρ^2(a_1 × a_3) ρ2(a1×a3) ρ 2 ( a 2 × a 3 ) ρ^2(a_2 × a_3) ρ2(a2×a3) 进行点乘,然后带入 α α α β β β 的表达式可以得到关于 θ θ θ 的表达式。

在这里插入图片描述

在这里插入图片描述

 (1) 此时我们也可以令 θ = 90 ° θ=90° θ=90° c o s θ cosθ cosθ 为0,满足零倾斜透视情况,那么分子 ( a 1 × a 3 ) ⋅ ( a 2 × a 3 ) (a_1 × a_3) · (a_2 × a_3) (a1×a3)(a2×a3) 为0,满足Faugeras定理中的第二条零倾斜透视矩阵性质。

 (2) 我们令 α = β α=β α=β 那么一定满足 α α α 的平方等于 β β β 的平方,即 ( a 1 × a 3 ) ⋅ ( a 1 × a 3 ) = ( a 2 × a 3 ) ⋅ ( a 2 × a 3 ) (a_1 × a_3) · (a_1 × a_3)= (a_2 × a_3) · (a_2 × a_3) (a1×a3)(a1×a3)=(a2×a3)(a2×a3),且令 θ = 90 ° θ=90° θ=90° 满足零倾斜透视情况,此时满足Faugeras定理中的第三条零倾斜且宽高比为1的透视矩阵性质。

 6. r i r_i ri 是个方向向量,不用管前面的系数。所以利用 ρ a 2 T × ρ a 3 T ρ{a_2}^T × ρ{a_3}^T ρa2T×ρa3T 可以求出 r 1 r_1 r1 r 3 r_3 r3 可以直接得出,最后 r 2 = r 1 × r 3 r_2=r_1 × r_3 r2=r1×r3

在这里插入图片描述

 7. 利用公式 ρ b = K T ρb=KT ρb=KT 可以求出 T T T

在这里插入图片描述

上面求解推导过程中有几个注意点:
(1) 列向量模的求法:
在这里插入图片描述
(2) 向量的点乘(内积)
在这里插入图片描述
(3) 向量的叉乘(外积)
两个向量叉乘的运算结果是一个向量而不是一个标量。并且两个向量叉乘得到的向量与这两个向量组成的坐标平面垂直。
在这里插入图片描述

2.3 参数总结

 1. 各个参数的最终公式如下所示:

在这里插入图片描述

 2. 我们要注意取点时不要取同一平面的点。

在这里插入图片描述

三、径向畸变的摄像机标定

3.1 建模

 1. 径向畸变会导致图像的放大率随着距离光轴距离的增加而减小,换句话说,距离摄像机中心近的影响小,距离摄像机中心远的畸变影响大。

 2. 定义一个 λ λ λ,满足和摄像机中心 d d d 之间的多项式关系,对原来像素坐标系和世界坐标系的映射关系间添加一个 S λ S_λ Sλ 矩阵。下图中 d 2 d^2 d2 表示点距离摄像机坐标系中心的距离。

在这里插入图片描述

 3. 对于径向畸变问题不再是一个齐次线性方程组的问题,而是一个非线性的问题,由于 λ λ λ u u u v v v 之间存在了映射关系,导致 λ λ λ 不再是一个简单的参数,也无法再转换为齐次方程组的 A x = 0 Ax=0 Ax=0 的关系,只能建立成 f ( x ) = 0 f(x)=0 f(x)=0 的非线性关系。

在这里插入图片描述

3.2 求解

在这里插入图片描述

四、变换

4.1 2D平面上的欧式变换

 1. 欧式变换,也称为欧几里得变换或刚性变换,是一种较为基本的变换方式。在欧式变换中,同一个向量在各个坐标系下的长度和角度都不会发生变化,它只涉及物体的旋转和平移运动,不改变物体的形状和大小。这种变换方式在视觉SLAM(同步定位与地图构建)中具有重要的应用,用于描述相机等刚体的运动定位和构图过程。

 2. 欧式变换具有长度、夹角和体积不变性,即在变换过程中,物体的长度、各部分的夹角以及体积都会保持不变。

 3. 等距变换包括欧式变换( σ = 1 σ=1 σ=1)和镜像变换( σ = − 1 σ=-1 σ=1)。

在这里插入图片描述

4.2 2D平面上的相似变换和仿射变换

 1. 相似变换就在欧式变换基础上添加了一个比例因子 s s s,使得大小会有所变化,但形状不变,保持相似性。

在这里插入图片描述

 2. 仿射变换中形状和大小已经完全变化,但是不同形状之间平行性,面积比值,平行线段长度比值仍然不变。

在这里插入图片描述

4.3 2D平面上的透射变换

 透射变换不保持平行性,只能保持原来是个点现在还是个点,原来是个线现在还是个线,原来在一个平面现在还在一个平面。
在这里插入图片描述

在这里插入图片描述

4.4 3D平面上的欧式变换

:下图中的 s s s 为缩放因子,欧式变换 s = 1 s=1 s=1,相似变换 s s s 就不定了。

在这里插入图片描述

在这里插入图片描述

4.5 3D平面上的仿射变换

在这里插入图片描述

在这里插入图片描述

4.5 3D平面上的透射变换

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

音视频开发_SDL跨平台多媒体开发库实战

SDL(Simple DirectMedia Layer)是一个非常流行和强大的跨平台开发库,它主要被用来开发视频游戏和实时多媒体应用程序。它提供了一系列的功能来处理视频、音频、键盘、鼠标、操纵杆、图形硬件加速以及聚焦3D硬件的各种功能。SDL的API通过C编程…

串行通信协议 SPI

SPI(Serial Peripheral Interface)是一种串行通信协议,常用于连接微控制器、存储器、传感器和其他外围设备。SPI通常由一个主设备(通常是微控制器)和一个或多个从设备组成。 1、SPI通信一般由四根线组成: SCLK&#x…

Java学习笔记20——枚举类型的创建与使用

在实际编程中,存在着这样的“数据集”,它们的数值在程序中是稳定的并且个数是有限的。例如春、夏、秋、冬四个数据元素组成了四季的“数据集”,一月到十二月组成了十二个月份的“数据集”,周一到周五及周六周日组成了每周七天的“…

无论是自学还是培训,找工作都要有舍我其谁的信心

不要说自己不行,要说自己可以,做的很不错。 我在投简历的时候,没有包装,然后在与hr沟通的时候,就会遇到 hr问技术能力如何这样的相关问题,其实我觉得我自己不够自信,想要获得一个offer。必须先…

25 OpenCV模板匹配算法

文章目录 介绍匹配算法介绍matchTemplate 模板匹配算子minMaxLoc 找出图像中的最大值最小值代码示例 介绍 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。 所以模板匹配首先需要一个模板图像T(给定的子图像) 另外需要一个待检测的图像-源图…

必看!想入行嵌入式该准备些什么?

近日,很多人问华妹:想入行嵌入式该怎么准备。很能理解大家对于嵌入式的关注,嵌入式系统是当今科技领域中的重要组成部分,它存在于我们生活的方方面面,各行各业。智能化时代的到来也让嵌入式技术炙手可热! …

高通平台初步

网上找的图,大体差不多,但是有些细节有点奇怪。 上面的图有点小怪,主要是Libraies,Framework,App,这部分感觉应该是Google的。其他的没啥问题。 大概整理一下编译流程吧。 首先是安装环境,一些…

如何对静态IP进行测试?静态IP有什么优点?

随着互联网的普及,越来越多的人开始使用动态IP进行上网。但是在某些情况下,我们可能需要使用静态IP进行测试或特定的网络设置。本文将介绍如何获取静态IP进行测试以及静态IP的优点。 一、如何获取静态IP进行测试? 1.联系ISP(Int…

Controller中接收数组参数

1、场景 需要根据用户id集合批量删除用户数据,前端使用post请求,controller中参数接收数组参数并根据用户id删除用户基本信息 2、分析处理: 2.1、前端请求类型contentType:application/json 请求体中为json字符串,后端新建一个U…

力扣23. 合并 K 个升序链表(最小堆)

Problem: 23. 合并 K 个升序链表 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.创建虚拟头节点dummy并创建辅助指针p指向dummy; 2.创建最小堆minHeap将每个链表的头节点存入; 3.当minHeap不为空时每次让p指向从最小堆堆顶取出的节点node&#xff0…

【小沐学AI】Google AI大模型的一点点学习(Python)

文章目录 1、Google AI简介1.1 Google AI Studio1.2 Bard1.3 PaLM1.4 Gemini1.5 Gemini API1.6 Vertex AI1.7 Gemma 2、Google AI开发2.1 快速入门2.1.1 配置开发环境2.1.2 列出所有模型2.1.3 从文本输入生成文本2.1.4 从图像和文本输入生成文本2.1.5 聊天对话 结语 1、Google …

Covalent Network(CQT)与 Celo 集成,推动 Web3 下一代现实资产解决方案的发展

Covalent Network(CQT)是一个统一的区块链 API 提供商,其已正式与 Celo 集成,Celo 是一个以移动优先的 EVM 兼容链。这一重要的里程碑旨在提升 Celo 生态系统中开发者的能力,通过授予他们访问关键链上数据的权限&#…

踏“时间”与“空间”前来探寻复杂度的奥妙(Java篇)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人…

基于WTR096-28SS芯片方案的宠物喂食器实现智能化喂食功能

一、简介 本方案宠物喂食器采用了WTR096-28SS芯片方案来实现智能化的喂食功能。该方案结合了先进的技术和设计理念,提供了便捷、智能和个性化的宠物喂食解决方案。 该宠物喂食器具备定时、定量喂食功能,可以根据主人设定的时间和食物量,自动…

xercesc库保存XML功能实现

目录 一 参考链接 二 运行结果 三 代码 一 参考链接 DOM Programming Guide (apache.org) Xerces-c DOM XML文件的构造_xerces-c domimplementation-CSDN博客 Xerces-c库的使用-CSDN博客 二 运行结果 三 代码 #if 1//参考链接: https://blog.csdn.net/RGBMa…

HarmonyOS NEXT应用开发之SideBarContainer侧边栏淡入淡出动效实现案例

介绍 在2in1或平板上,群聊侧边栏是一种较为常用的功能,虽然HarmonyOS已经具备了基本的动效,但是部分情况下开发者可能有定制侧边栏动效的需求,本例主要介绍了如何基于显式动画实现侧边栏的淡入淡出动效。 效果图预览 使用说明&a…

【区间、栈】算法例题

目录 六、区间 48. 汇总区间 ① 49. 合并区间 ② 50. 插入区间 ② 51. 用最少数量的箭引爆气球 ② 七、栈 52. 有效的括号 ① 53. 简化路径 ② 54. 最小栈 ② 55. 逆波兰表达式求值 ② √- 56. 基本计算器 ③ 六、区间 48. 汇总区间 ① 给定一个 无重复元素 的 …

静态代理IP如何测试?

随着互联网的普及,越来越多的人开始使用动态IP进行上网。但是在某些情况下,我们可能需要使用静态IP进行测试或特定的网络设置。本文将介绍如何获取静态IP进行测试以及静态IP的优点。 一、如何获取静态IP进行测试? 1.联系ISP(Int…

DM-达梦数据库实时主备搭建

dm实时主备说明 将主库产生的 Redo日志传输到备库,备库接收并重演Redo日志,从而实现备库与主库的数据同步。 一、环境准备 1.1、配置环境准备 首先搭建实时主备,要规划好机器的,我准备两台机器服务器 主服务器 mast…

7-5 表格输出

题目链接&#xff1a;7-5 表格输出 一. 题目 1. 题目 2. 输入输出格式 3. 限制 二、代码 实现一 1. 代码实现 #include <stdio.h>int main(void){printf("------------------------------------\n\ Province Area(km2) Pop.(10K)\n\ ------------------…