相机参数的意义

相机标定的意义:

  • 相机标定:使用带有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.rhkb.cn/news/308136.html

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

相关文章

Leetcode刷题之合并两个有序数组

Leetcode刷题之合并两个有序数组 一、题目描述二、题目解析 一、题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数…

Kylin-Server-V10-SP3-General-Release-2303-X86_64

Kylin-Server-V10-SP3-General-Release-2303-X86_64 银河麒麟V10 银河蓝色麒麟比红麒麟养眼多了 Kylin-CSDN博客

基于YOLOv8的河道漂浮物实时检测系统【训练和系统源码+Pyside6+数据集+包运行】

✨目录 一、系统概述和展示🎄1.1 摘要 🎈 二、一站式使用教程🎄三、YOLOv8原理剖析🎄3.1 YOLOv8背景和技术原理🎈 四、模型训练、评估和推理🎄4.1 数据集介绍🎈4.2 模型训练🎈4.3 结…

springboot-admin使用及原理剖析

服务端 依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>de.codecentric</groupId><art…

SQL语言自用(持续更新)+实验记录

课本:《数据库原理及其应用教程》&#xff08;第四版&#xff09; (主编)黄德才&(副主编)陆亿红 实验&#xff1a;学校实验课材料 其他&#xff1a; [ ]表示可以被删除&#xff0c;也表示可以被替换&#xff0c;请自行判断。如果有一些截图或照片&#xff0c;是暂时懒得整…

ThignsBoard通过服务端订阅共享属性

MQTT基础 客户端 MQTT连接 通过服务端订阅属性 案例 1、首先需要创建整个设备的信息&#xff0c;并复制访问令牌 ​​2、通过工具MQTTX连接上对应的Topic 3、测试链接是否成功 4、在MQTT上订阅对应的Topic 5、在客户端添加共享属性信息 6、查看整个设备的遥测数据 M…

yolov8安全帽检测项目开发(python开发,带有训练模型,可以重新训练,并有Pyqt5界面可视化)

不需要程序&#xff0c;只需要数据集的&#xff0c;想自己搭建模型训练的&#xff0c;可以免费下载&#xff08;积分已经设置为0&#xff09;&#xff1a;https://download.csdn.net/download/qq_40840797/89100918 1.项目介绍&#xff1a;&#xff08;视频运行链接&#xff1…

scala---基础核心知识

一、什么是scala Scala 是一种多范式的编程语言&#xff0c;其设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台&#xff08;Java虚拟机&#xff09;&#xff0c;并兼容现有的Java程序。 二、为什么要学习scala 1、优雅 2、速度快 3、能融合到hado…

【数据结构】习题之消失的数字和轮转数组

&#x1f451;个人主页&#xff1a;啊Q闻 &#x1f387;收录专栏&#xff1a;《数据结构》 &#x1f389;前路漫漫亦灿灿 前言 消失的数字这道题目我会和大家分享三种思路。 还有一道题目是轮转数组&#xff0c;&#xff0c;也会分享三种思路&#xff0c;大…

12 Php学习:魔术常量

PHP魔术常量 PHP 向它运行的任何脚本提供了大量的预定义常量。 不过很多常量都是由不同的扩展库定义的&#xff0c;只有在加载了这些扩展库时才会出现&#xff0c;或者动态加载后&#xff0c;或者在编译时已经包括进去了。 有八个魔术常量它们的值随着它们在代码中的位置改…

vscode配置c\c++及美化

文章目录 vscode配置c\c及美化1.安装vscode2.汉化3.安装c\c插件4.安装mingw5.配置mingw6. 运行c代码6.1 创建代码目录6.2 设置文件配置6.3 创建可执行任务&#xff1a;task.json6.4 编译执行6.5 再写其他代码6.6 运行多个c文件 7. 运行c文件8.调式代码8.1 创建launch.json8.2 修…

在 Elasticsearch 中扩展 ML 推理管道:如何避免问题并解决瓶颈

作者&#xff1a;来自 Elastic Iulia Feroli 是时候考虑语义搜索运营了吗&#xff1f; 无论你是一位经验丰富的搜索工程师&#xff0c;希望探索新的人工智能功能&#xff0c;还是一位机器学习专家&#xff0c;希望更多地利用搜索基础设施来增强语义相似性模型 —— 充分利用这…

【大语言模型】轻松本地部署Stable Diffusion

硬件要求&#xff1a; 配备至少8GB VRAM的GPU&#xff0c;如果你的电脑只有CPU&#xff0c;请看到最后。根据部署规模&#xff0c;需要足够的CPU和RAM。 软件要求&#xff1a; Python 3.7或更高版本。支持NVIDIA GPU的PyTorch。Hugging Face的Diffusers库。Hugging Face的Tr…

前端实现自动获取农历日期:探索JavaScript的跨文化编程

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

Spring Boot 学习(5)——开发流程:快速入门

花了几天的时间&#xff0c;整出个 “hello spring boot”&#xff0c;并且把它从 2 搞到了 3。 纸上得来终觉浅&#xff01;自己实践出真知&#xff01;现在再回头来囫囵一遍&#xff0c;加深下印象。回想下从前自觉某一编程语言大都如此&#xff0c;先找到简单示例照着画一遍…

Walmart.com DSV XML对接需求

此前的文章Walmart.com DSV EDI对接需求中&#xff0c;为大家介绍了如果选择传输EDI文件需要做的准备与需求。本文将为大家介绍Walmart.com 与DSV&#xff08;Drop Ship Vender&#xff09;之间传输XML文件的需求。与EDI相比&#xff0c;XML文件的处理难度相对低一些。无论企业…

第1章 计算机网络体系结构

王道学习 【考纲内容】 &#xff08;一&#xff09;计算机网络概述 计算机网络的概念、组成与功能&#xff1b;计算机网络的分类&#xff1b; 计算机网络的性能指标 &#xff08;二&#xff09;计算机网络体系结构与参考模型 计算机网络分层结…

Oracle获取对象的DDL创建语句

1.命令行方式&#xff08;如&#xff1a;sqlplus&#xff09; ## 用户 select dbms_metadata.get_ddl(USER,TEST) from dual;## 表 select dbms_metadata.get_ddl(TABLE,TEST,T1) from dual;## 表空间 select dbms_metadata.get_ddl(TABLESPACE,TBS_NAME) from dual;## 索引 s…

内存函数memcpy、mommove、memset、memcmp

目录 1、memcpy函数 memcpy函数的模拟实现 2、memmove函数 memmove函数的模拟实现 3、memset函数 4、memcmp函数 1、memcpy函数 描述&#xff1a; C 库函数 void *memcpy(void *str1, const void *str2, size_t n) 从存储区 str2 复制 n 个字节到存储区 str1。 声明&…

C/C++基础----判断和循环

判断 if-elseif-else判断 语句&#xff1a; 条件使用之前的逻辑运算符或者关系运算符 if(条件1){条件1成立时内容 }else if(条件2){条件2成立时内容 }else{所有条件不成立时内容 }#include <iostream>using namespace std;int main() {int age 10;if (age > 18) {c…