相机参数的意义

相机标定的意义:

  • 相机标定:使用带有pattern的标定板来求解相机参数的过程;
  • 用一个简化的数学模型来代表复杂的三维到二维的成像过程;
  • 相机参数包括:相机内参(焦距等),外参(旋转矩阵等),镜头畸变参数
  • 用途:畸变矫正,双目视觉,结构光,三维重建,SLAM等

  •  世界坐标系(World Coords):点在真实世界中的位置,描述相机的位置,单位为m;
  • 相机坐标系(Camera Coords):以相机sensor中心为原点,建立相机坐标系,单位m;
  • 图像物理坐标系:经过小孔成像后得到的二维坐标系,单位是mm,坐标原点是图中的点c;
  • 像素坐标系(Pixcel Coords):成像点在相机sensor上像素的行数和列数,不带有任何的物理单位
  • 主点:光轴与图像平面的交点为主点,图中的点p。

1、世界坐标系到相机坐标系的转换

点p在不同坐标系的表示:

  • 世界坐标系:P(x_{w},y_{w},z_{w});
  • 相机坐标系:P(x_{c},y_{c},z_{c})

坐标系之间的转换:

  • R:相机坐标系对于世界坐标系的旋转矩阵;
  • T:相机坐标系对于世界坐标系的平邑矩阵。

转换关系:

\begin{bmatrix} x_{c}\\ y_{c}\\ z_{c}\\ 1 \end{bmatrix}=\begin{bmatrix} R_{3\times 3} & T_{3\times 1} \\ 0& 1 \end{bmatrix}\cdot \begin{bmatrix} x_{w}\\ y_{w}\\ z_{w}\\ 1 \end{bmatrix}

2、相机坐标系到图像坐标系的转换

  • 假设点p(x_{c},y_{c},z_{c})在图像坐标系的成像点是p{}'(x,y);
  • 基于小孔成像的原理;
  • 空间中一点成像在平面中,与XOY平面平行,距离原点f的平面;
  • 取一个截面ZOY,可以得到上图,根据相似三角形关系可以计算得到:

\frac{x}{x_{c}}=\frac{y}{y_{c}}=\frac{f}{z_{c}}

  • 化简后可以得到:

x=\frac{f}{z_{c}}\cdot x_{c}

y=\frac{f}{z_{c}}\cdot y_{c}

  • 写为矩阵可得:

z_{c}\cdot \begin{bmatrix} x\\ y\\ 1 \end{bmatrix}=\begin{bmatrix} f & 0 & 0&0 \\ 0 & f & 0 & 0\\ 0 & 0& 1 & 0 \end{bmatrix}\cdot \begin{bmatrix} x_{c}\\ y_{c}\\ z_{c}\\ 1 \end{bmatrix}

3、图像坐标系到像素坐标系的转换

坐标系的转换:

  • 图像坐标系的点p{}'(x,y)到像素坐标系的(u,v)的转换;
  • 图像坐标系的原点在sensor的中央,单位是mm;
  • 像素坐标系的原点在sensor的左上角,单位是Pixel,也就是像素的行数和列数;
  • 转换关系:

u=\frac{x}{dx}+ u_{0}

v=\frac{y}{dy}+ v_{0}

  • 矩阵表示:

z_{c}\begin{bmatrix} x\\ y\\ 1 \end{bmatrix}=\begin{bmatrix} f & 0 & 0&0 \\ 0 & f & 0 & 0\\ 0 & 0& 1 & 0 \end{bmatrix}\cdot \begin{bmatrix} x_{c}\\ y_{c}\\ z_{c}\\ 1 \end{bmatrix}

  • dx,dy:sensor的固有参数,代表每个像素的毫米数;
  • u_{0},v_{0}:代表图像坐标系原点(光心)相对像素坐标系原点的偏移量

综上:相机坐标系到像素坐标系的转换公式:

  • 相机坐标系和世界坐标系重合,不考虑世界坐标系的旋转平移:

u=f_{x} \ast \frac{x_{c}}{z_{c}}+ u_{0}

v=f_{y} \ast \frac{y_{c}}{z_{c}}+ v_{0}

  • 上式中:f_{x}=\frac{f}{dx}f_{y}=\frac{f}{dy}焦距除以单个像素的大小
  • 相机的标定过程中,f,dx,dy不能标定得到,f{_{x}},f_{y}可以通过标定得到

4、完整坐标系转换

​​​​​​​ 世界坐标系到像素坐标系转换:

z_{c}\cdot \begin{bmatrix} u\\ v\\ 1 \end{bmatrix}=\begin{bmatrix} \frac{1}{dx} & 0 & u_{0}\\ 0 & \frac{1}{dy} & v_{0} \\ 0 & 0& 1 \end{bmatrix}\cdot \begin{bmatrix} f & 0 & 0&0 \\ 0 & f & 0 & 0\\ 0 & 0& 1 & 0 \end{bmatrix}\cdot \begin{bmatrix} R_{3\times 3} & T_{3\times 1} \\ 0& 1 \end{bmatrix}\cdot \begin{bmatrix} x_{w}\\ y_{w}\\ z_{w}\\ 1 \end{bmatrix}=M_{1} M_{2} \begin{bmatrix} x_{w}\\ y_{w}\\ z_{w}\\ 1 \end{bmatrix}

相机内参:相机的焦距,像素坐标系的相对偏移量

M_{1}=\begin{bmatrix} f_{x} & 0 & u_{0}\\ 0 & f_{y} & v_{0} \\ 0 & 0& 1 \end{bmatrix}

相机外参:世界坐标系到相机坐标系的转换关系,相机再世界坐标系的位置矩阵

M_{2}=\begin{bmatrix} R_{3\times 3} & T_{3\times 1} \end{bmatrix}=\begin{bmatrix} r_{11} & r_{12} & r_{13} & t_{1}\\ r_{21} & r_{22} & r_{23} & t_{2}\\ r_{31}& r_{32} & r_{33} & t_{3} \end{bmatrix}

 5、镜头畸变

 镜头畸变:

经过透视后的实际成像和理想成像之间的误差即为镜头畸变

主要分为径向畸变和切向畸变

径向畸变

  • 增加的透镜形状造成,沿透镜的径向分布
  • 分为桶形畸变和枕形畸变
  • 远离透镜中心的地方比较靠近中心的地方更加弯曲
  • 光心处的畸变为0,距离光心越远畸变越大
  • 廉价相机,畸变更严重
  • 径向畸变的数学多项式描述:

\left\{\begin{matrix} x_{distorted}=x(1+k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6})\\ y_{distorted}=y(1+k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6}) \end{matrix}\right.

  •  (x,y)是没有畸变的像素点,(x_{distorted},y_{distorted})畸变后的位置
  • k_{1},k_{2},k_{3}:径向畸变系数,摄像头的内参,一般使用前两项,鱼眼相机会使用第三项。

切向畸变:

  • 相机sensor和镜头不平行导致
  • 切向畸变的数学表达式:

\left\{\begin{matrix} x_{distorted}=x+[2p_{1}xy+p_{2}(r^{2}+2x^{2})]\\ y_{distorted}=y+[2p_{2}xy+p_{1}(r^{2}+2y^{2})] \end{matrix}\right.

  • 两个畸变合并:

 \left\{\begin{matrix} x_{distorted}=x(1+k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6})+[2p_{1}xy+p_{2}(r^{2}+2x^{2})]\\ y_{distorted}=y(1+k_{1}r^{2}+k_{2}r^{4}+k_{3}r^{6})+[2p_{2}xy+p_{1}(r^{2}+2y^{2})] \end{matrix}\right.

6、平面的单应性关系:

  • 定义:从一个平面到另一个平面的投影映射
  • 世界坐标系的物体平面到成像平面之间的映射,即两个平面之间的单应性关系
  • 模型平面:标定使用的标定板平面
  • 模型平面上的一点:Q=[X,Y,Z,1]^{T}(向量增广为了方便计算)
  • 映射到成像平面上的点:q=[x,y,1]^T
  • 它们两者之间的单应性关系:q=x\cdot H\cdot Q
  • H:单应性矩阵,单应性矩阵有8个自由度,8个自由度参数求解
  • 四个点可以得到8个方程,所以至少四个点就可以求解单应性关系
  • Opencv接口:fingHomography
  • 求解方法:1.重投影误差最小化;2.RANSAC

 

基本变量:

  • 二维点:m=[u,v]^T,对应的三维空间中的点M=[X,Y,Z]^T
  • 增加1得到增广向量:\widehat{m}=[u,v,1]^T,\widehat{M}=[X,Y,Z,1]^T
  • 根据前面的模型,三位点到投影点的关系可以描述为:s\widehat{m}=A[R t]\widehat{M}
  • s:转换尺度因子,[Rt]:外参,旋转平移矩阵
  • A:外参,可以表示为:

A=\begin{bmatrix} \alpha & \gamma & u_{0}\\ 0 & \beta & v_{0}\\ 0& 0 & 1 \end{bmatrix}

  • (u_{0},v_{0}):代表图像坐标系元代你(光心)相对像素坐标系原点的偏移量
  • \alpha ,\beta:焦距除以单个像素的大小,在两个轴的比例因子
  • \gamma:两个坐标轴的倾斜角的参数
  • 前面没有提到,因为我们认为两个坐标轴是垂直的,世界可能不垂直
  • 相机标定
  • 我么可以假设,标定板平面在世界坐标系的z坐标是0,R的第i列矩阵为r_{i},那么可以得到:

s\begin{bmatrix} u\\ v\\ 1 \end{bmatrix}=A\begin{bmatrix} r_{1} & r_{2} & r_{3} &t \end{bmatrix}\begin{bmatrix} X\\ Y\\ 0\\ 1 \end{bmatrix}=A\begin{bmatrix} r_{1} & r_{2} & t \end{bmatrix}\begin{bmatrix} X\\ Y\\ 1 \end{bmatrix}

  • 标定平面和成像平面的单应性关系:s\widehat{m}=H\widehat{M} withH=A\begin{bmatrix} r_{1} & r_{2} & t \end{bmatrix}
  • 如前所述,可以通过两个平面上的多个点求解单应性矩阵H
  • 假设H=[h_1,h_2,h_3]=> \begin{bmatrix} h_1 & h_2 & h_3 \end{bmatrix}=\lambda A\begin{bmatrix} r_1 & r_2 & t \end{bmatrix}
  • 根据上式可以得到:

h_1=\lambda \cdot A\cdot r_1\cdot h_2=\lambda \cdot A\cdot r_2\cdot h_3=\lambda \cdot A\cdot t

r_1=\frac{1}{\lambda }\cdot A^{-1}\cdot h_1

r_2=\frac{1}{\lambda }\cdot A^{-1}\cdot h_2

t=\frac{1}{\lambda }\cdot A^{-1}\cdot h_3

  • 相机成像的两个约束条件:
  1. 旋转向量r_1,r_2分别代表绕x,y轴的旋转量,所以这两个向量是正交的,故:

h_{1}^{T}A^{-T}A^{-1}h_2=0

      2. 旋转向量是单位向量

 r_{1}^{T}\cdot r_{1}=r_{2}^{T}\cdot r_{2}^{\left \| r_{1} \right \|=\left \| r_{2} \right \|}

h_{1}^{T}A^{-T}A^{-1}h_1=h_{2}^{T}A^{-T}A^{-1}h_2​​​​​​​

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

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

相关文章

node 的全局对象有哪些

node 和浏览器是两个不同的运行 js 的平台,对于浏览器来说,我们知道全局对象有window,对应的 node 中就是 global 常见的全局对象有 真正的全局对象 globalconsole console是宿主环境【node、浏览器】中的对象,所以我们在生产环…

【分布式缓存】

1. 缓存雪崩、缓存击穿与缓存穿透 1.1 缓存雪崩 缓存雪崩是指在缓存中的大量数据同时失效或过期,导致大量的请求直接打到数据库或后端系统,造成系统压力骤增,甚至导致系统崩溃。 原因: 缓存服务器宕机: 如果缓存服…

完全平方数(蓝桥杯,acwing,数论)

题目描述: 一个整数 a 是一个完全平方数,是指它是某一个整数的平方,即存在一个整数 b,使得 ab^2。 给定一个正整数 n,请找到最小的正整数 x,使得它们的乘积是一个完全平方数。 输入格式: 输…

[CUDA 学习笔记] 矩阵转置算子优化

矩阵转置算子优化 矩阵转置是一种基础的矩阵操作, 即将二维矩阵的行列进行反转. 本文主要围绕行主序的二维单精度矩阵的转置考虑相关的优化. 以下 kernel 笔者均是在 NVIDIA V100 (7.0 算力) 上进行测试的, 且选择矩阵的行列维度大小为 M2300 N1500. Version 0. 朴素实现 _…

处理慢查询时使用explain一般看哪些字段

explain之后会出现这些,一般就只看下面这几个字段 select_type就是查询类型,在我司的业务里基本上用的都是简单查询,在内存中处理逻辑,复杂查询的话排查问题比较麻烦,引起慢查询还会拖累数据库,数据库里还…

jvm运行情况预估

相关系统 jvm优化原则-CSDN博客 执行下面指令 jstat gc -pid 能计算出一些关键数据,有了这些数据,先给JVM参数一些的初始的,比堆内存大小、年轻代大小 、Eden和Srivivor的比例,老年代的大小,大对象的阈值,…

前端学习<四>JavaScript基础——05-变量的数据类型:基本数据类型和引用数据类型

数据分类 数据分为:静态数据、动态数据。 静态数据 静态数据是指一些永久性的数据。一般是以文件的形式存储在硬盘上,比如文档、照片、视频等文件。 电脑关闭后,静态数据仍然还在。只要不主动删掉数据或者硬盘没损坏,这些数据…

蓝桥杯c语言

蓝桥杯大赛是中国的一项全国性的IT竞赛,旨在激发大学生和中学生对计算机科学和技术的兴趣,提高他们的编程能力和创新思维。C语言是蓝桥杯大赛中的一个重要竞赛类别,通常包括程序设计、算法解决和数据结构实现等方面的内容。 ### 蓝桥杯C语言…

three.js尝试渲染gbl模型成功!(三)

参照教程:https://cloud.tencent.com/developer/article/2276766?areaSource102001.5&traceId88k805RaN_gYngNdKvALJ (作者:九仞山) 通过最近两天查three.js入门教程了解到 这玩应支持包括 .obj、.gltf等类型的模型结构。 g…

微服务-网关

在微服务架构中,每个服务都是一个可以独立开发和运行的组件,而一个完整的微服务架构由一系列独立运行的微服务组成。其中每个服务都只会完成特定领域的功能,比如订单服务提供与订单业务场景有关的功能、商品服务提供商品展示功能等。各个微服…

2.SpringBoot利用Thymeleaf实现页面的展示

什么是Thymeleaf? Thymeleaf是一个现代服务器端Java模板引擎,适用于Web和独立环境,能够处理HTML,XML,JavaScript,CSS甚至纯文本。 Thymeleaf的主要目标是提供一种优雅且高度可维护的模板创建方式。为实现这…

斐讯E1拆机焊接TTL救砖

从老家的柜子里翻出来一台斐讯E1,老家在用的是斐讯K2P,300M宽带,房间和大部分位置wifi5足够跑满了,一直懒得升级,也足够用了。 不过发现部分位置信号比较弱,都不到50M,考虑插上E1做个AP中继&…

CASL Tutorial Chinese

Attribute-based access control (ABAC) Role-based access control (RBAC) Policy-based access control (PBAC) Claims-based access control (CBAC) 通过研究CASL,设计一款VUE的认证和权限的产品 do - name of the action (e.g., read, update). Has an alia…

106. 跑步锻炼(结果填空)

public class Main { public static void main(String[] args) { int startYear 2000; int startMonth 1; int startDay 1; // 周六 int endYear 2020; int endMonth 10; int endDay 1; // 周四 int totalDistance 0; // 计算开始日期到结束日期之间的每一天 …

【LocalAI】(3):LocalAI本地使用Model gallery,对qwen模型进行配置,使用modescope源下载,本地运行速度快。特别简单!

1,关于localai LocalAI 是一个用于本地推理的,与 OpenAI API 规范兼容的 REST API。 它允许您在本地使用消费级硬件运行 LLM(不仅如此),支持与 ggml 格式兼容的多个模型系列。支持CPU硬件/GPU硬件。 模型启动方法&am…

Spring与SpringBoot的区别

Spring是一个开源的Java应用程序框架,旨在简化企业级Java应用程序的开发。它提供了一个轻量级的容器,用于管理应用程序中的各个组件(如依赖注入、AOP等),并提供了丰富的功能和模块,用于处理数据库访问、事务…

Acwing.4009 收集卡牌(期望dp)

题目 小林在玩一个抽卡游戏,其中有 n种不同的卡牌,编号为 1到 n。 每一次抽卡,她获得第 i种卡牌的概率为 pi。 如果这张卡牌之前已经获得过了,就会转化为一枚硬币。 可以用 k枚硬币交换一张没有获得过的卡。 小林会一直抽卡&…

【ZZULIOJ】1055: 兔子繁殖问题(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 code 题目描述 这是一个有趣的古典数学问题,著名意大利数学家Fibonacci曾提出一个问题:有一对小兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又…

【2024】elasticsearch的安装及使用建议

为了方便本节将使用docker部署Elasticsearch,以下简称es。 Elasticsearch 1.基础理论部分1.1.简单介绍一下es1.2.es的基本概念和相关术语 2.elasticsearch安装部分3.elasticsearch配置及建议 1.基础理论部分 1.1.简单介绍一下es Elasticsearch是一个开源的、分布…

智能面试——录音及播放下载js-audio-recorder — post请求,formdata传参

录音插件 js-audio-recorder bug&#xff1a;本地调试调取不起来麦克风 浏览器配置安全域名 chrome://flags/Insecure origins treated as secure输入域名即可电脑需要连接上耳机 <template><div class"BaseRecorder"><div class"BaseRecorder-r…