计算机视觉——相机标定

计算机视觉——相机标定

  • 一、像素坐标系、图像坐标系、相机坐标系、世界坐标系
  • 二、坐标系变换
  • 三、相机标定

一、像素坐标系、图像坐标系、相机坐标系、世界坐标系

  1. 像素坐标系:数字图像在计算机内为 M × N M\times N M×N 的数组,其中每个元素(称为像素)的数值即是图像点的亮度(或称为灰度,彩色图像对应的为RGB)。在图像上定义直角坐标系 u , v u,v u,v,每一个像素的坐标 ( u , v ) (u,v) (u,v) 分别是该像素在数组中的列数与行数。
  2. 图像坐标系:以图像内某一点 O 1 O_1 O1 为原点, x x x 轴与 y y y 轴分别与 u , v u,v u,v轴平行,该坐标系中,原点 O 1 O_1 O1 定义在相机光轴与图像平面的交点,该点一般位于图像中心处。

图1 像素坐标系与图像坐标系
  1. 相机坐标系:如图所示,其中 O O O 点称为相机光心, X c X_c Xc 轴和 Y c Y_c Yc 轴与图像的 x x x 轴与 y y y 轴平行, Z c Z_c Zc 轴为相机的光轴,它与图像平面垂直。光轴与图像平面的交点,即为图像物理坐标系的原点,由点 O O O X c , Y c , Z c X_c,Y_c,Z_c Xc,Yc,Zc 轴组成的直角坐标系称为相机坐标系。 O O 1 OO_1 OO1 为相机焦距。
  2. 世界坐标系:由于相机可安放在环境中的任意位置,我们在环境中还需选择一个基准坐标系来描述相机的位置,并用它描述环境中任意物体的位置,该坐标系称为世界坐标系。它由 X w , Y w , Z w X_w,Y_w,Z_w Xw,Yw,Zw 轴组成。

图2 相机坐标系与世界坐标系

二、坐标系变换

图像坐标系 → 像素坐标系

如图1所示,若 O 1 O_1 O1 u , v u,v u,v 坐标系中的坐标为 ( u 0 , v 0 ) (u_0,v_0) (u0,v0),每个像素在 x x x 轴与 y y y 轴方向上的物理尺寸为 d x , d y dx,dy dx,dy,单位:毫米(mm),则图像中任意一个像素在两个坐标系下的坐标有如下关系:
u = x d x + u 0 v = y d y + v 0 (1) \begin{aligned} u&=\frac{x}{dx}+u_0\\[2ex] v&=\frac{y}{dy}+v_0 \end{aligned}\tag{1} uv=dxx+u0=dyy+v0(1)

写成矩阵的形式:

[ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ x y 1 ] ⟺ [ x y 1 ] = [ d x 0 − u 0 d x 0 d y − v 0 d y 0 0 1 ] [ u v 1 ] (2) \left[ \begin{matrix} u \\[2ex] v \\[2ex] 1 \end{matrix} \right]= \left[ \begin{matrix} \dfrac{1}{dx} & 0 & u_0\\[2ex] 0 & \dfrac{1}{dy} & v_0\\[2ex] 0 & 0 & 1\\ \end{matrix} \right]\left[ \begin{matrix} x \\[2ex] y \\[2ex] 1 \end{matrix} \right] \quad\Longleftrightarrow\quad \left[ \begin{matrix} x \\[2ex] y \\[2ex] 1 \end{matrix} \right]= \left[ \begin{matrix} dx & 0 & -u_0dx\\[2ex] 0 & dy & -v_0dy\\[2ex] 0 & 0 & 1\\ \end{matrix} \right]\left[ \begin{matrix} u \\[2ex] v \\[2ex] 1 \end{matrix} \right]\tag{2} uv1 = dx1000dy10u0v01 xy1 xy1 = dx000dy0u0dxv0dy1 uv1 (2)

相机坐标系 → 图像坐标系

如图2所示,相机坐标系中的点 ( X c , Y c , Z c ) (X_c,Y_c,Z_c) (Xc,Yc,Zc)投影到图像坐标系中的点为 ( x , y ) (x,y) (x,y)。根据相似三角形原理可以得到如下关系式:
x = f X c Z c , y = f Y c Z c (3) \begin{aligned} x=\dfrac{fX_c}{Z_c},\quad y=\dfrac{fY_c}{Z_c} \end{aligned}\tag{3} x=ZcfXcy=ZcfYc(3)

写成矩阵的形式:
Z c [ x y 1 ] = [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ X c Y c Z c 1 ] (4) Z_c\left[ \begin{matrix} x \\[2ex] y \\[2ex] 1 \end{matrix} \right]=\left[ \begin{matrix} f & 0 & 0 & 0\\[2ex] 0 & f & 0 & 0\\[2ex] 0 & 0 & 1 & 0\\ \end{matrix} \right]\left[ \begin{matrix} X_c \\[2ex] Y_c \\[2ex] Z_c \\[2ex] 1 \end{matrix} \right]\tag{4} Zc xy1 = f000f0001000 XcYcZc1 (4)

世界坐标系 → 相机坐标系

相机坐标系与世界坐标系之间的关系可以用旋转矩阵 R \pmb R R 与平移向量 t \pmb t t 来描述。因此,若空间中某一点 P \pmb P P 在世界坐标系与相机坐标系下的坐标分别为 ( X w , Y w , Z w , 1 ) T (X_w,Y_w,Z_w,1)^T (Xw,Yw,Zw,1)T ( X c , Y c , Z c , 1 ) T (X_c,Y_c,Z_c,1)^T (Xc,Yc,Zc,1)T,于是存在如下关系:
[ X c Y c Z c 1 ] = [ R t 0 T 1 ] [ X w Y w Z w 1 ] = M 1 [ X w Y w Z w 1 ] (5) \left[ \begin{matrix} X_c \\[2ex] Y_c \\[2ex] Z_c \\[2ex] 1 \end{matrix} \right]= \left[ \begin{matrix} \pmb R & \pmb t\\[2ex] \ {\pmb 0}^T & 1 \end{matrix} \right]\left[ \begin{matrix} X_w \\[2ex] Y_w \\[2ex] Z_w \\[2ex] 1 \end{matrix} \right]=\pmb M_1\left[ \begin{matrix} X_w \\[2ex] Y_w \\[2ex] Z_w \\[2ex] 1 \end{matrix} \right]\tag{5} XcYcZc1 =[R 0Tt1] XwYwZw1 =M1 XwYwZw1 (5)

其中, R \pmb R R 3 × 3 3\times 3 3×3 单位正交矩阵, t \pmb t t 为三维平移向量, 0 = ( 0 , 0 , 0 ) T \pmb 0=(0,0,0)^T 0=(0,0,0)T M 1 \pmb M_1 M1 4 × 4 4\times 4 4×4 矩阵。

⋆ \star 世界坐标系 → 像素坐标系

联立式 ( 2 ) , ( 4 ) , ( 5 ) (2),(4),(5) (2),(4),(5),消去 ( x , y , 1 ) T , ( X c , Y c , Z c , 1 ) T (x,y,1)^T,(X_c,Y_c,Z_c,1)^T (x,y,1)T,(Xc,Yc,Zc,1)T,有,
Z c [ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ R t 0 T 1 ] [ X w Y w Z w 1 ] = [ a x 0 u 0 0 0 a y v 0 0 0 0 1 0 ] [ R t 0 T 1 ] [ X w Y w Z w 1 ] = M 1 M 2 [ X w Y w Z w 1 ] = M [ X w Y w Z w 1 ] (6) \begin{aligned} Z_c\left[ \begin{matrix} u \\[2ex] v \\[2ex] 1 \end{matrix} \right]&=\left[ \begin{matrix} \dfrac{1}{dx} & 0 & u_0\\[2ex] 0 & \dfrac{1}{dy} & v_0\\[2ex] 0 & 0 & 1\\ \end{matrix} \right]\left[ \begin{matrix} f & 0 & 0 & 0\\[2ex] 0 & f & 0 & 0\\[2ex] 0 & 0 & 1 & 0\\ \end{matrix} \right]\left[ \begin{matrix} \pmb R & \pmb t\\[2ex] \ {\pmb 0}^T & 1 \end{matrix} \right]\left[ \begin{matrix} X_w \\[2ex] Y_w \\[2ex] Z_w \\[2ex] 1 \end{matrix} \right]\\ &=\left[ \begin{matrix} a_x & 0 & u_0 & 0\\[2ex] 0 & a_y & v_0 & 0\\[2ex] 0 & 0 & 1 & 0\\ \end{matrix} \right]\left[ \begin{matrix} \pmb R & \pmb t\\[2ex] \ {\pmb 0}^T & 1 \end{matrix} \right]\left[ \begin{matrix} X_w \\[2ex] Y_w \\[2ex] Z_w \\[2ex] 1 \end{matrix} \right]\\ &=\pmb M_1\pmb M_2 \left[ \begin{matrix} X_w \\[2ex] Y_w \\[2ex] Z_w \\[2ex] 1 \end{matrix} \right]\\ &=\pmb M \left[ \begin{matrix} X_w \\[2ex] Y_w \\[2ex] Z_w \\[2ex] 1 \end{matrix} \right] \end{aligned}\tag{6} Zc uv1 = dx1000dy10u0v01 f000f0001000 [R 0Tt1] XwYwZw1 = ax000ay0u0v01000 [R 0Tt1] XwYwZw1 =M1M2 XwYwZw1 =M XwYwZw1 (6)

其中, a x = f d x , a y = f d y a_x=\dfrac{f}{dx},a_y=\dfrac{f}{dy} ax=dxf,ay=dyf, 由于 a x , a y , u 0 , v 0 a_x,a_y,u_0,v_0 ax,ay,u0,v0 只与相机内部结构有关,因此称 M 1 \pmb M_1 M1 为相机的内参矩阵;而 M 2 \pmb M_2 M2 完全由相机相对于世界坐标系的方位决定,因此称为相机的外参矩阵;称 M \pmb M M投影矩阵

三、相机标定

确定某一相机的内外参矩阵,称为相机标定。

将式 ( 6 ) (6) (6) 写成
Z c i [ u i v i 1 ] = [ m 11 m 12 m 13 m 14 m 21 m 22 m 23 m 24 m 31 m 32 m 33 m 34 ] [ X w i Y w i Z w i 1 ] (7) Z_{ci}\left[ \begin{matrix} u_i \\[2ex] v_i \\[2ex] 1 \end{matrix} \right]=\left[ \begin{matrix} m_{11} & m_{12} & m_{13} & m_{14} \\[2ex] m_{21} & m_{22} & m_{23} & m_{24} \\[2ex] m_{31} & m_{32} & m_{33} & m_{34} \end{matrix} \right]\left[ \begin{matrix} X_{wi} \\[2ex] Y_{wi} \\[2ex] Z_{wi} \\[2ex] 1 \end{matrix} \right]\tag{7} Zci uivi1 = m11m21m31m12m22m32m13m23m33m14m24m34 XwiYwiZwi1 (7)

其中, ( X w i , Y w i , Z w i , 1 ) (X_{wi},Y_{wi},Z_{wi},1) (Xwi,Ywi,Zwi,1) 为空间中第 i i i 个点的世界坐标; ( u i , v i , 1 ) (u_i,v_i,1) (ui,vi,1) 为对应的像素坐标。式 ( 7 ) (7) (7) 包含三个方程:
Z c i u i = m 11 X w i + m 12 Y w i + m 13 Z w i + m 14 Z c i v i = m 21 X w i + m 22 Y w i + m 23 Z w i + m 24 Z c i = m 31 X w i + m 32 Y w i + m 33 Z w i + m 34 (8) \begin{aligned} Z_{ci}u_i&=m_{11}X_{wi}+m_{12}Y_{wi}+m_{13}Z_{wi}+m_{14}\\[2ex] Z_{ci}v_i&=m_{21}X_{wi}+m_{22}Y_{wi}+m_{23}Z_{wi}+m_{24}\\[2ex] Z_{ci}&=m_{31}X_{wi}+m_{32}Y_{wi}+m_{33}Z_{wi}+m_{34} \end{aligned}\tag{8} ZciuiZciviZci=m11Xwi+m12Ywi+m13Zwi+m14=m21Xwi+m22Ywi+m23Zwi+m24=m31Xwi+m32Ywi+m33Zwi+m34(8)

将式 ( 8 ) (8) (8) 中的第一式减去 u i u_i ui 乘第三式,第二式减去 v i v_i vi 乘第三式,分别消去 Z c i Z_{ci} Zci 后,可得如下线性方程:
X w i m 11 + Y w i m 12 + Z w i m 13 + m 14 − u i X w i m 31 − u i Y w i m 32 − u i Z w i m 33 − u i m 34 = 0 X w i m 21 + Y w i m 22 + Z w i m 23 + m 24 − v i X w i m 31 − v i Y w i m 32 − v i Z w i m 33 − v i m 34 = 0 (9) \begin{aligned} X_{wi}m_{11}+Y_{wi}m_{12}+Z_{wi}m_{13}+m_{14}-u_iX_{wi}m_{31}-u_iY_{wi}m_{32}-u_iZ_{wi}m_{33}-u_im_{34}&=0\\[2ex] X_{wi}m_{21}+Y_{wi}m_{22}+Z_{wi}m_{23}+m_{24}-v_iX_{wi}m_{31}-v_iY_{wi}m_{32}-v_iZ_{wi}m_{33}-v_im_{34}&=0\\[2ex] \end{aligned}\tag{9} Xwim11+Ywim12+Zwim13+m14uiXwim31uiYwim32uiZwim33uim34Xwim21+Ywim22+Zwim23+m24viXwim31viYwim32viZwim33vim34=0=0(9)

上式表示,若已知 n n n 个点的世界坐标 ( X w i , Y w i , Z w i ) (X_{wi},Y_{wi},Z_{wi}) (Xwi,Ywi,Zwi),与它们的像素坐标 ( u i , v i ) (u_i,v_i) (ui,vi),则我们有 2 n 2n 2n 个关于投影矩阵 M \pmb M M 元素的线性方程。

由此可见,由空间6个以上点的世界坐标与对应的像素坐标,我们可求出投影矩阵 M \pmb M M。在一般的标定中,我们都有数十个已知点,使方程的个数远超未知数的个数,从而用最小二乘法求解以降低误差造成的影响。

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

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

相关文章

好未来0520上机考试题1:括号的最大嵌入深度

题目 (LeetCode 1614.括号的最大嵌入深度) 给定 有效括号字符串 s,返回 s 的嵌套深度。嵌套深度是嵌套括号的最大数量。 示例 1: 输入:s "(1(2*3)((8)/4))1" 输出:3 解释:数字…

MySQL复杂SQL(多表联查/子查询)详细讲解

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 MySQL复杂SQL(多表联查/子查询&a…

Spring中循环依赖问题的解决机制总结

一、解决机制 1. 什么是循环依赖 循环依赖是指两个或多个Bean之间相互依赖对方,形成一个闭环的依赖关系。最常见的情况是当Bean A依赖Bean B,而Bean B又依赖Bean A时,就形成了循环依赖。在Spring容器初始化过程中,如果不加以特殊…

集运维_安装linux,麒麟等系统_步骤

u盘工具选择Ventoy,Rufus 在选择Ventoy和Rufus这两款U盘启动盘制作工具时,需根据具体需求权衡其优缺点: ‌核心差异‌ ‌多系统支持‌: ‌Ventoy‌:支持将多个ISO、WIM、IMG等类型的镜像文件直接复制到U盘,实现‌一盘多用‌(例如同时存放Windows、Linux等镜像),无需…

第4章:Cypher查询语言基础

Cypher是Neo4j的声明式图查询语言,专为处理图数据而设计。它允许用户以直观、高效的方式查询和修改图数据库中的数据。本章将介绍Cypher的基本概念和语法,帮助读者掌握使用Cypher进行基础图数据操作的能力。 4.1 Cypher语言概述 Cypher是Neo4j的主要查…

上位机知识篇---Flask框架实现Web服务

本文将简单介绍Web 服务与前端显示部分,它们基于Flask 框架和HTML/CSS/JavaScript实现,主要负责将实时视频流和检测结果通过网页展示,并提供交互式状态监控。以下是详细技术解析: 一、Flask Web 服务架构 1. 核心路由设计 @app.route(/) def index():"""…

Neovim - 打造一款属于自己的编辑器(一)

文章目录 前言(劝退)neovim 安装neovim 配置配置文件位置第一个 hello world 代码拆分 neovim 配置正式配置 neovim基础配置自定义键位Lazy 插件管理器配置tokyonight 插件配置BufferLine 插件配置自动补全括号 / 引号 插件配置 前言(劝退&am…

按字典序排列最小的等效字符串

文章目录 题目思路解题过程Python代码C代码复杂度 题目 给出长度相同的两个字符串s1 和 s2 ,还有一个字符串 baseStr 。 其中 s1[i] 和 s2[i] 是一组等价字符。 举个例子,如果 s1 “abc” 且 s2 “cde”,那么就有 ‘a’ ‘c’, ‘b’ ‘…

Ubuntu2404 下搭建 Zephyr 开发环境

1. 系统要求 操作系统:Ubuntu2404(64位)磁盘空间:至少 8GB 可用空间(Zephyr 及其工具链较大) 2. 安装必要工具 Tool Min. Version CMake 3.20.5 Python 3.10 Devicetree compiler 1.4.6 2.1 安装系…

2025年06月07日Github流行趋势

项目名称:netbird 项目地址url:https://github.com/netbirdio/netbird项目语言:Go历史star数:14824今日star数:320项目维护者:mlsmaycon, braginini, pascal-fischer, lixmal, pappz项目简介:使…

fast-reid部署

配置设置: 官方库链接: https://github.com/JDAI-CV/fast-reid# git clone https://github.com/JDAI-CV/fast-reid.git 安装依赖: pip install -r docs/requirements.txt 编译:切换到fastreid/evaluation/rank_cylib目录下&a…

clickhouse 和 influxdb 选型

以下是 ClickHouse、InfluxDB 和 HBase 在体系架构、存储引擎、数据类型、性能及场景的详细对比分析: 🏗️ ‌一、体系架构对比‌ ‌维度‌‌ClickHouse‌‌InfluxDB‌‌HBase‌‌设计目标‌大规模OLAP分析,高吞吐复杂查询 时序数据采集与监控,优化时间线管理高吞吐随机…

ros创建工作空间配置运行状态机

ROS 一、创建工作空间目录 /home/wict/workspace/hudahua/ros/catkin_ws #初始化工作空间(仅需一次) catkin_init_workspace二:回到根目录编译 #创建正确的工作空间结构(如果尚未创建) mkdir -p ~/workspace/hudahua…

【看到哪里写到哪里】C的“数组指针”

C里面,数组指针,不是基本类型。顾名思义,数组指针,是指针,是指向数组的指针; 1.它的基本定义样子是 type (*ptr)[size]; 这个指针,指向的数组的;这里要注意,要定义数组…

深度相机的日常学习

文章目录 一、深度相机的概念二、深度相机的工作原理三、深度相机的应用领域 一、深度相机的概念 深度相机(Depth Camera)是一种能够捕捉场景中物体距离信息的设备,与传统的 RGB 相机不同,深度相机不仅可以获取场景的二维图像信息…

elasticsearch基本操作笔记

1.通过kibana查看elasticsearch版本信息 a.左上角三道横->Management->Dev Tools b.GET / 执行 c.执行结果 { “name” : “xxxx”, “cluster_name” : “xxxxxxx”, “cluster_uuid” : “vl1UudAoQp-aHWAzyPoMyw”, “version” : { “number” : “7.15.1”, “build…

两种Https正向代理的实现原理

正向代理 HTTPS 主要有两种方案,分别是基于证书的解密与再加密方案和基于 HTTP CONNECT 隧道的方案,以下是这两种方案的具体信息: 一、基于证书的解密与再加密方案 原理 工作原理:代理服务器拥有自己的证书,客户端需…

服务器健康摩尔斯电码:深度解读S0-S5状态指示灯

当服务器机柜中闪烁起神秘的琥珀色灯光,运维人员的神经瞬间绷紧——这些看似简单的Sx指示灯,实则是服务器用硬件语言发出的求救信号。掌握这套"摩尔斯电码",等于拥有了预判故障的透视眼。 一、状态指示灯:服务器的生命体…

Java高级 | 【实验七】Springboot 过滤器和拦截器

隶属文章:Java高级 | (二十二)Java常用类库-CSDN博客 系列文章:Java高级 | 【实验一】Springboot安装及测试 |最新-CSDN博客 Java高级 | 【实验二】Springboot 控制器类相关注解知识-CSDN博客 Java高级 | 【实验三】Springboot 静…

【图片识别改名】如何批量将图片按图片上文字重命名?自动批量识别图片文字并命名,基于图片文字内容改名,WPF和京东ocr识别的解决方案

应用场景 在日常工作和生活中,我们经常会遇到需要对大量图片进行重命名的情况。例如,设计师可能需要根据图片内容为设计素材命名,文档管理人员可能需要根据扫描文档中的文字对图片进行分类命名。传统的手动重命名方式效率低下且容易出错&…