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

2024-03-20 21:44

本文主要是介绍计算机视觉之三维重建(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平面上的透射变换

在这里插入图片描述

在这里插入图片描述

这篇关于计算机视觉之三维重建(2)---摄像机标定的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/830817

相关文章

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

计算机视觉工程师所需的基本技能

一、编程技能 熟练掌握编程语言 Python:在计算机视觉领域广泛应用,有丰富的库如 OpenCV、TensorFlow、PyTorch 等,方便进行算法实现和模型开发。 C++:运行效率高,适用于对性能要求严格的计算机视觉应用。 数据结构与算法 掌握常见的数据结构(如数组、链表、栈、队列、树、图等)和算法(如排序、搜索、动态规划等),能够优化代码性能,提高算法效率。 二、数学基础

java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频)

这是什么系统? 资源获取方式在最下方 java计算机毕设课设—停车管理信息系统(附源码、文章、相关截图、部署视频) 停车管理信息系统是为了提升停车场的运营效率和管理水平而设计的综合性平台。系统涵盖用户信息管理、车位管理、收费管理、违规车辆处理等多个功能模块,旨在实现对停车场资源的高效配置和实时监控。此外,系统还提供了资讯管理和统计查询功能,帮助管理者及时发布信息并进行数据分析,为停车场的科学

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通

【python计算机视觉编程——7.图像搜索】

python计算机视觉编程——7.图像搜索 7.图像搜索7.1 基于内容的图像检索(CBIR)从文本挖掘中获取灵感——矢量空间模型(BOW表示模型)7.2 视觉单词**思想****特征提取**: 创建词汇7.3 图像索引7.3.1 建立数据库7.3.2 添加图像 7.4 在数据库中搜索图像7.4.1 利用索引获取获选图像7.4.2 用一幅图像进行查询7.4.3 确定对比基准并绘制结果 7.

参会邀请 | 第二届机器视觉、图像处理与影像技术国际会议(MVIPIT 2024)

第二届机器视觉、图像处理与影像技术国际会议(MVIPIT 2024)将于2024年9月13日-15日在中国张家口召开。 MVIPIT 2024聚焦机器视觉、图像处理与影像技术,旨在为专家、学者和研究人员提供一个国际平台,分享研究成果,讨论问题和挑战,探索前沿技术。诚邀高校、科研院所、企业等有关方面的专家学者参加会议。 9月13日(周五):签到日 9月14日(周六):会议日 9月15日(周日

【python计算机视觉编程——8.图像内容分类】

python计算机视觉编程——8.图像内容分类 8.图像内容分类8.1 K邻近分类法(KNN)8.1.1 一个简单的二维示例8.1.2 用稠密SIFT作为图像特征8.1.3 图像分类:手势识别 8.2贝叶斯分类器用PCA降维 8.3 支持向量机8.3.2 再论手势识别 8.4 光学字符识别8.4.2 选取特征8.4.3 多类支持向量机8.4.4 提取单元格并识别字符8.4.5 图像校正

解析apollo纵向控制标定表程序

百度apollo采用标定表描述车辆速度、加速度与油门/刹车之间的关系。该表可使无人车根据当前车速与期望加速度得到合适的油门/刹车开合度。除了文献《Baidu Apollo Auto-Calibration System - An Industry-Level Data-Driven and Learning based Vehicle Longitude Dynamic Calibrating

Python计算机视觉编程 第十章

目录 一、OpenCv基础知识 1.读取和写入图像 2.颜色空间 3.显示图像和结果 二、处理视频 1.输入视频 2.将视频读取到NumPy数组中 三、跟踪 1.光流 2.Lucas-Kanade算法 一、OpenCv基础知识 OpenCV 自带读取、写入图像函数以及矩阵操作和数学库。 1.读取和写入图像 import cv2# 读取图像im = c

2025届计算机毕业设计:如何构建Java SpringBoot+Vue个人健康档案管理系统?

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 | SpringBoot/SSM Python实战项目 | Django 微信小程序/安卓实战项目 大数据实战项目 ⚡⚡文末获取源码 文章目录