在计算机视觉中,相机标定是非常重要的一步,主要目的是从图像中恢复出物体的三维信息。为了做到这一点,我们需要了解和使用一系列的数学工具,这些工具描述了相机的成像过程,包括相机的内参、外参、畸变系数、投影矩阵和矫正矩阵。
本文主要讲解相机参数的格式与作用,相机标定可参考这篇博文相机标定


一、相机内参(Camera Intrinsics)

1.1 内参的定义

相机内参指的是描述相机光学成像系统内部几何关系的参数。它主要涉及如何将三维空间中的点投影到二维图像平面。具体来说,相机内参矩阵包含了相机的焦距、主点以及畸变系数等信息。

1.2 内参矩阵的固定格式

在进行开发时相机内参一般用如下格式表示cameraMatrix
cv::Mat_<double>(3, 3)
内参矩阵通常采用3x3的矩阵表示,格式如下:

K=[fxscx0fycy001]K = \begin{bmatrix} f_x & s & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} K=fx00sfy0cxcy1

其中:

  • fxf_xfxfyf_yfy 分别是相机在x和y方向的焦距,单位为像素,这两个参数反映了图像传感器上每毫米对应的像素数量。通常情况下,焦距在水平方向和垂直方向可能不相等。
  • cxc_xcxcyc_ycy 是图像的主点坐标,通常是图像的中心点。如果图像的分辨率为 W×HW \times HW×H,那么 cx=W/2c_x = W/2cx=W/2cy=H/2c_y = H/2cy=H/2
  • sss 是切向畸变系数,通常在大部分相机中是零,除非相机镜头存在较严重的切向畸变。

该矩阵通过将三维世界坐标系中的点转换为图像坐标系中的点。

1.3 内参矩阵的作用
  1. 将三维坐标转化为二维坐标:内参矩阵的作用就是将世界坐标系中的三维点 X,Y,ZX, Y, ZX,Y,Z 投影到相机的二维图像坐标系中。

  2. 校正畸变:内参矩阵中的一些参数,如焦距和主点,可以用来去畸变或者校正图像中的几何误差。

  3. 计算图像尺寸和焦距:内参矩阵的 fxf_xfxfyf_yfy 值可用于计算图像中物体的实际物理尺寸或距离。


二、相机畸变系数(Distortion Coefficients)

2.1 畸变的定义

相机的畸变主要由光学镜头的特性引起。最常见的畸变有两种:

  1. 径向畸变:主要发生在图像的四周,造成图像的拉伸或压缩,通常表现为桶形畸变或枕形畸变。
  2. 切向畸变:通常是由相机镜头和图像平面之间的非理想对准引起的,表现为图像的倾斜或弯曲。
    在这里插入图片描述
    在这里插入图片描述
2.2 畸变系数的固定格式

开发中一般用如下代码表示distCoeffs
cv::Mat_<double>(1, 5)
在标准的针孔相机模型中,畸变系数由以下五个参数表示:

D=[k1,k2,p1,p2,k3]D = [k_1, k_2, p_1, p_2, k_3] D=[k1,k2,p1,p2,k3]

  • k1,k2,k3k_1, k_2, k_3k1,k2,k3 是径向畸变系数,描述图像的径向畸变。
  • p1,p2p_1, p_2p1,p2 是切向畸变系数,描述图像的切向畸变。
2.3 畸变系数的作用
  1. 去畸变:畸变系数用于矫正图像中的畸变,特别是在使用广角镜头时,畸变非常明显。
  2. 提高计算机视觉算法的精度:去除畸变后,图像会更加接近真实的物理结构,进而提高目标识别、三维重建等算法的精度。

三、相机外参(Camera Extrinsics)

3.1 外参的定义

相机外参是描述相机与世界坐标系之间关系的参数。它通过旋转矩阵(RRR)和位移向量(TTT)来表示。旋转矩阵描述了相机坐标系与世界坐标系之间的旋转关系,而位移向量描述了两者之间的平移关系。

3.2 外参矩阵的格式

相机外参矩阵通常由一个 3×33 \times 33×3 的旋转矩阵 RRR 和一个 3×13 \times 13×1 的平移向量 TTT 组成。外参矩阵通常是一个 3×43 \times 43×4 的矩阵:

[R∣T]=[R11R12R13TxR21R22R23TyR31R32R33Tz][R | T] = \begin{bmatrix} R_{11} & R_{12} & R_{13} & T_x \\ R_{21} & R_{22} & R_{23} & T_y \\ R_{31} & R_{32} & R_{33} & T_z \end{bmatrix} [RT]=R11R21R31R12R22R32R13R23R33TxTyTz

其中:

  • RRR 是一个 3×33 \times 33×3 的旋转矩阵,表示相机坐标系相对于世界坐标系的旋转。
  • TTT 是一个 3×13 \times 13×1 的平移向量,表示相机坐标系原点相对于世界坐标系原点的平移。
3.3 外参矩阵的作用
  1. 将世界坐标系的三维点转化为相机坐标系的三维点:外参矩阵用于表示相机的位置和姿态,帮助我们将三维物体的坐标从世界坐标系转换到相机坐标系。

  2. 多视角对齐:在多视角计算中,相机的外参矩阵非常重要,尤其是在立体视觉和三维重建中,外参矩阵帮助我们理解相机之间的相对位置和角度。


四、投影矩阵(Projection Matrix)

4.1 投影矩阵的定义

投影矩阵是将三维世界坐标系中的点转换为二维图像坐标系中的点的矩阵。它综合了相机的内参和外参信息,通过对三维点进行线性变换,将其投影到图像平面。

4.2 投影矩阵的格式

投影矩阵通常由内参矩阵 KKK 和外参矩阵 [R∣T][R | T][RT] 组成,形式如下:

P=K[R∣T]P = K [R | T] P=K[RT]

其中:

  • KKK 是内参矩阵,描述了相机的内部几何参数。
  • [R∣T][R | T][RT] 是外参矩阵,描述了相机在世界坐标系中的旋转和平移。

通过这个矩阵,我们可以将三维世界坐标系中的点 X,Y,ZX, Y, ZX,Y,Z 投影到二维图像坐标系 x,yx, yx,y

4.3 投影矩阵的作用
  1. 三维点到二维图像点的映射:投影矩阵能够将相机坐标系下的三维点 X,Y,ZX, Y, ZX,Y,Z 映射为图像平面上的二维点 x,yx, yx,y,并将这些点用于后续的图像处理、目标检测等任务。

  2. 计算视差和三维重建:在立体视觉和三维重建中,投影矩阵帮助我们从不同视角的图像中恢复物体的三维结构。


五、矫正矩阵(Rectification Matrix)

5.1 矫正矩阵的定义

矫正矩阵用于去除立体视觉系统中由于相机不同视角引起的几何误差。通常在立体匹配和深度估计中,矫正矩阵将左右图像对齐到相同的图像平面,消除由视角差异造成的几何失真。

5.2 矫正矩阵的格式

在立体相机系统中,左右相机的矫正矩阵由旋转矩阵 R1,R2R_1, R_2R1,R2 和投影矩阵 P1,P2P_1, P_2P1,P2 组成,用来调整图像,使得图像上的同名点在同一扫描线中。矫正矩阵的格式通常为:

[R1∣T1]=Rectification Matrix for the left camera[R_1 | T_1] = \text{Rectification Matrix for the left camera} [R1T1]=Rectification Matrix for the left camera

[R2∣T2]=Rectification Matrix for the right camera[R_2 | T_2] = \text{Rectification Matrix for the right camera} [R2T2]=Rectification Matrix for the right camera

5.3 矫正矩阵的作用

  1. 去除视差误差:矫正矩阵消除了由于相机视角差异引起的几何畸变,使得图像对齐,从而进行精确的视差计算。

  2. 提高深度估计精度:在深度估计过程中,矫正矩阵使得左右图像的对应点对齐,有助于提高深度图的精度。


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

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

相关文章

【jvm|基本原理】第四天

摘要&#xff1a;本文简单分析了Java虚拟机的核心运行机制。首先介绍了基本数据类型在32位和64位虚拟机中的存储差异&#xff0c;说明slot槽设计以空间换时间的优化思路。其次详细解析了对象在堆内存中的存储结构&#xff0c;包括对象头、对象数据和对齐填充机制。然后探讨了方…

Git高级操作与最佳实践详解

前言 熟练掌握Git的高级操作可以显著提高开发效率&#xff0c;优化工作流程&#xff0c;解决复杂问题。本文将详细介绍Git的高级操作技巧与最佳实践&#xff0c;帮助开发者更加高效地管理代码和协作开发。 1. 提交历史管理 1.1 修改最近的提交 # 修改最近的提交信息 git co…

ElasticSearch:商品SKU+SPU实现join查询,设计及优化

文章目录一、SPUSKU1、商品SPU和SKU2、SPU和SKU的关系3、实现SPUSKU父子嵌套查询1. **嵌套对象&#xff08;Nested Objects&#xff09;**2. **父子关系&#xff08;Parent-Child&#xff09;**3. **应用层关联&#xff08;Application-Side Join&#xff09;**&#xff08;推荐…

Objective-c 初阶 —— Runtime(方法交换 消息传递)

一、消息传递1、什么是消息[a func1];我们会把这种用方括号来调函数的方式称为发消息。对于这个例子&#xff0c;就相当于我们给 a 这个对象发了个 func1 的消息&#xff08;个人认为指令更好理解&#xff09;。2、什么是 selectorselector 就是一个函数区分器。它只会给这个方…

【计算机网络架构】树型架构简介

引言在当今数字化时代&#xff0c;网络架构如同复杂的神经系统&#xff0c;支撑着各种信息的流通与交互。从个人日常的网络浏览、在线购物&#xff0c;到企业的远程办公、数据存储&#xff0c;再到国家层面的政务信息化、智慧城市建设&#xff0c;网络架构都扮演着不可或缺的角…

llama-factory快速开始

llama-factory快速开始 文章目录llama-factory快速开始前言一、环境配置1.1 训练顺利运行需要包含4个必备条件1.2 llama-factory下载1.3 环境下载1.4 硬件环境校验二、启动前言 https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md这是GitHub中文介绍文档&#…

408数据结构强化(自用)

常用代码片段&#xff08;持续更新&#xff09;折半查找void SearchBinary(int A[];int x){int low 0, high n-1, mid;while(low<high){mid (lowhigh)/2;if(A[mid]x) break;else if(A[mid] < x) low mid 1;else high mid - 1;}顺序表逆置void Reverse(SqList &…

linux cpu频率和AVS调压等级

1&#xff0c;linux常见的cpu频率对应的电压等级对应参数表如下:频率&#xff08;GHz&#xff09;电压&#xff08;V&#xff09;1.61.41.41.21.21.01.00.82&#xff0c;avs调压的几种方式linux内核宏解释Linux内核中&#xff0c;AVS调压的实现依赖于一些宏定义和配置选项&…

Input输入和Screen相关

知识点using System.Collections; using System.Collections.Generic; using UnityEngine;public class Lesson11 : MonoBehaviour {// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){#region 注意&#xff0c…

如何在CSDN变现?如何赚钱?如何涨粉?如何找到优质大V博主合作伙伴?

&#x1f525; 2025最新 如何在CSDN变现&#xff1f;如何赚钱&#xff1f;如何跟对人&#xff1f;如何找到优质博主合作伙伴&#xff1f; 大家好&#xff0c;我是猫头虎&#xff0c;今天✍️想和大家聊聊在CSDN平台变现的问题。这也是绝大多数伙伴非常关心的一个话题——其实&…

OpenCV特征点提取算法orb、surf、sift对比

下面是 OpenCV 中三种常用特征点提取算法&#xff1a;ORB、SURF 和 SIFT 的详细对比&#xff0c;从 算法原理、性能、使用限制 和 适用场景 多维度进行总结&#xff0c;帮助大家在实际项目中合理选择。一览表&#xff1a;ORB vs. SURF vs. SIFT属性/算法ORBSURFSIFT全称Oriente…

LeafletJS 与 React:构建现代地图应用

引言 LeafletJS 是一个轻量、灵活的 JavaScript 地图库&#xff0c;广泛用于创建交互式 Web 地图&#xff0c;而 React 作为现代前端框架&#xff0c;以其组件化、状态管理和虚拟 DOM 特性&#xff0c;成为构建动态用户界面的首选工具。将 LeafletJS 与 React 结合&#xff0c…

前后端数据交互,关于表单数据传输问题

表单提交var formData new FormData(); // 添加每个事故ID作为单独的参数 accidentIds.forEach(id > formData.append(accidentIds, id)); formData.append(status, statusText); $.messager.confirm(确认, 确定要将事故记录标记为 statusText 吗&#xff1f;, function …

新书推介 | 吉林大学出版教材《汽车智能辅助驾驶系统技术》,国产仿真工具链GCKontrol-GCAir教学应用

近日&#xff0c;吉林大学出版了由高镇海教授、孙天骏副教授主编的新教材《汽车智能辅助驾驶系统技术》&#xff0c;本书系统地介绍了汽车智能辅助驾驶系统的发展需求、物理架构、功能算法、技术原理以及应用场景。在教材第17章《仿真测试》&#xff0c;应用国产化GCKontrol-GC…

从 0 到 1 玩转 XSS - haozi 靶场:环境搭建 + 全关卡漏洞解析

文章目录前言靶场地址0X00 直接注入0X01 闭合标签10X02 闭合标签20X03 绕过特殊符号10X04 绕过特殊符号20X05 绕过注释符0X06 绕过更多符号0X07 绕过更多符号20X08 绕过闭合符号0X09 绕过URL匹配0X0A 绕过URL过滤0X0B 绕过大写转换10X0C 绕过大写转换20X0D 绕过注释0X0E 古英语…

TF卡格式化

cmd 输入diskpart,在新打开的窗口输入list disk&#xff0c;然后select disk [磁盘号]&#xff0c;clean&#xff0c;回车变成未分区的。再选中磁盘&#xff0c;选中之后create partition [分区名] 回车&#xff0c;list partition&#xff0c;查看分区&#xff0c;输入active&…

Python爬虫实战:研究sqlparse库相关技术

1. 引言 1.1 研究背景与意义 在当今数据驱动的时代,SQL 作为关系型数据库的标准查询语言,被广泛应用于各种数据处理和分析场景。随着数据库应用的不断发展,SQL 代码的规模和复杂度也在不断增加,这给 SQL 代码的编写、维护和优化带来了挑战。 研究表明,低效的 SQL 查询是…

全球天气预报5天(经纬度版)免费API接口教程

本文全面介绍由接口盒子免费API提供的全球天气预报API&#xff0c;支持通过经纬度坐标获取任意地区未来5天的详细天气预报数据。 一、接口核心功能 ​全球覆盖​&#xff1a;支持全球任意经纬度坐标点的天气预报​高精度预报​&#xff1a;提供每3小时为间隔的精细化预报&…

5 基于STM32单片机的绝缘检测系统设计(STM32代码编写+手机APP设计+PCB设计+Proteus仿真)

系列文章目录 文章目录 系列文章目录前言1 1 资料获取与演示视频1.1 资料介绍1.2 资料获取1.3 演示视频 2 系统框架3 硬件3.1 主控制器3.2 显示屏3.3 WIFI模块3.4 DHT11温湿度传感器3.5 可调电位器 4 设计PCB4.1 安装下载立创EDA专业版4.2 画原理图4.3 摆放元器件&#xff0c;设…

CPP学习之list使用及模拟实现

一、list简介及用法 1. list简介 list是可以在常数范围内任意位置进行插入、删除、修改操作的有顺序性的容器&#xff0c;而且支持双向迭代&#xff0c;其底层是双链表结构&#xff0c;逻辑上连续但物理空间上不连续&#xff0c;只能通过指针来进行元素访问&#xff0c;无法使用…