相机参数的意义

相机标定的意义:

  • 相机标定:使用带有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​​​​​​​

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

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

相关文章

为什么需要SOCKS代理?

在数字化时代🌐,随着网络安全威胁的不断演进和增加,保护个人隐私和数据安全成为了互联网用户的一大挑战🛡️。在寻求增强在线安全和隐私的解决方案时,SOCKS代理成为了一个关键的技术工具🔑。本文旨在详细探…

代码随想录:栈与队列4-6

20.有效的括号 题目 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一…

什么是容器安全,该怎么进行容器安全的检测防护

随着容器技术的迅速发展和普及,越来越多的企业开始采用容器化解决方案来优化应用部署、提高资源利用率和降低成本。然而,在对大规模部署和使用容器应用来提升业务系统开发速度的时候,大量的数据对象、多种安全风险都需要检测,容器…

Spark_SparkSql写入Oracle_Undefined function.....将长字符串写入Oracle中方法..

在使用Spark编写代码将读库处理然后写入Oracle中遇到了诸多小bug,很磨人。shit!! 实测1:TO_CLOB(a3) 代码样例 --这是一个sparksql写入hive的一个小逻辑,我脱敏了噻 SELECT a1, a2, TO_CLOB(a3) AS clob_data, TO_DATE(a4) AS time FROM table1 WHERE…

外包干了15天,技术倒退明显

先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能…

海外软文通稿代发 - 大舍传媒

引言 在当今高度信息化的时代,企业和个人品牌形象的塑造与传播变得越来越重要。为了在国际舞台上获得更大的竞争优势,许多企业和品牌纷纷将视线投向了国外市场。而在这个过程中,专业的软文通稿代发服务成为了他们的得力助手。本文将向您介绍…

恒创科技:香港服务器CPU核心数如何选?越多越好吗?

​  谈到 CPU“核心”是完成所有处理的组件,程序能否顺利运行的第一因素是你有多少个核心。但由于不同的计算任务占用不同的资源,所以如果您打算简单地创建小型网站或者其他请求处理数据也不高的业务,那么您的基本型号应该包含 1、2 核已经…

云计算重要概念之:虚拟机、网卡、交换机、路由器、防火墙

一、虚拟机 (Virtual Machine, VM) 1.主流的虚拟化软件: 虚拟化软件通过在单个物理硬件上创建和管理多个虚拟环境(虚拟机),实现资源的高效利用、灵活部署、隔离安全以及便捷管理,是构建云计算和现代化数据中心的核心…

【电控笔记4】拉普拉斯-传递函数-pid

数据标幺化 拉普拉斯变换 欧拉公式 常见s变换 s变换性质 pid分析 p控制,存在稳态误差 可以求出p的取值范围p>-1,否则发散 pi消除稳态误差 把kp换成Gs 只用pi控制,不加微分的原因: 微分之后,噪声增大高频噪声频率…

【力扣】104. 二叉树的最大深度、111. 二叉树的最小深度

104. 二叉树的最大深度 题目描述 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3 示例 2: 输…

机器学习与自主系统

Darpa人工智能中有两个重要方向,一是机器学习,另一个就是自主系统。但真实博弈环境下,更重要的是人机融合体系… 机器学习是一种人工智能的分支,通过使用统计学和数学模型来让计算机系统学习和改进其性能。它可以让计算机从数据中…

FreeRTOS创建第一个程序

使用freeRTOS创建任务时使用如下函数 函数的参数 创建一个FreeRTOS任务点亮led灯实现led灯500毫秒翻转一次 具体的代码实现 #include "stm32f10x.h" // Device header #include "Delay.h" #include "freeRTOS.h" #include &quo…

【bash】linux使用环境变量拼接字符串错误

有如下脚本init-env.sh #!/bin/bash export HADOOP_HOME/opt/hadoop export HADOOP_CONF$HADOOP_HOME/conf执行结果: source init-env.sh echo $HADOOP_CONF_DIR # 得到结果:conf/hadoop,预期因该是/opt/hadoop/conf原因就是linux下使用了w…

零售EDI:Princess Auto EDI对接

Princess Auto 是一家加拿大零售连锁店,专门从事农场、工业、车库、液压和剩余物品的销售。 Princess Auto 总部位于马尼托巴省温尼伯,截至 2024 年 1 月在 10 个省份拥有并经营 55 家商店以及三个配送中心。各种商品均以其“Powerfist”和“Pro.Point”…

Qt 多窗体

前言 在 Qt编程中经常会遇到要在多个界面之间切换的情况,如从登录界面跳转到主界面,从主界面跳转到设置界面,再返回到主界面。我们将会用一个简单的示例来实现多窗体功能。 登录窗口 创建基类为QMainWindow,类名为LoginWin。再使用…

苹果开发者后台添加udid后,xcode中 Devices 数量没有更新问题

删除 文件夹 /Users/…/Library/MobileDevice/Provisioning Profiles 如何打开:https://zhuanlan.zhihu.com/p/563928113 回到Xcode刷新包名下面的警告验证(可能需要翻墙) 完毕!

网站SEO关键词规划时如何筛选出合适的关键词?

在网站SEO优化过程中,关键词布局是一个至关重要的环节。首先,我们需要确定核心关键词,然后通过各种策略和方法对关键词进行扩展。完成关键词扩展后,接下来的任务就是对这些扩展后的关键词进行筛选。那么,如何进行有效的…

WordPress LayerSlider插件SQL注入漏洞复现(CVE-2024-2879)

0x01 产品简介 WordPress插件LayerSlider是一款可视化网页内容编辑器、图形设计软件和数字视觉效果应用程序,全球活跃安装量超过 1,000,000 次。 0x02 漏洞概述 WordPress LayerSlider插件版本7.9.11 – 7.10.0中,由于对用户提供的参数转义不充分以及缺少wpdb::prepare(),…

AI大模型之ChatGPT科普(深度好文)

目录 训练ChatGPT分几步? 如何炼成ChatGPT? 如何微调ChatGPT? 如何强化ChatGPT? 如何调教ChatGPT? AI思维链是什么? GPT背后的黑科技Transformer是什么? Transformer在计算机视觉上CV最佳作品? ChatGPT是人…

[leetcode]remove-duplicates-from-sorted-list

. - 力扣(LeetCode) 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 输入:head [1,1,2] 输出:[1,2]示例 2: 输入&…