【双目视觉标定】——3面结构光相机标定实践(获取相机内参)~未完待续
相机标定基本原理及双目相机内参解析
相机标定是计算机视觉中的一个重要步骤,旨在确定相机的内部和外部参数,以便在图像处理中进行准确的三维重建、物体识别等任务。本文将重点讲解双目相机的内参和外参原理,并结合实际参数进行分析。
一、相机标定的基本原理
相机标定主要通过捕捉已知尺寸的标定物体(如棋盘格)进行。通过比较图像中标定物体的特征点与实际坐标之间的关系,可以计算出相机的内参和外参。相机的内参描述相机成像特性,包括焦距、主点位置和畸变系数,而外参描述相机在世界坐标系中的位置和姿态。
1. 内部参数
相机内部参数通常表示为一个 3 × 3
的内参矩阵 K
,其形式如下:
K = ( f x 0 c x 0 f y c y 0 0 1 ) K = \begin{pmatrix} fx & 0 & cx \\ 0 & fy & cy \\ 0 & 0 & 1 \end{pmatrix} K= fx000fy0cxcy1
-
焦距 (
fx
和fy
):相机的焦距是影响成像缩放的关键参数。fx
和fy
分别代表在水平方向和垂直方向的焦距,通常情况下二者相近,但在某些情况下(如相机具有不同的光学特性)可能会有所不同。 -
主点 (
cx
和cy
):主点是图像的几何中心,通常位于传感器的中心位置,表示了图像坐标系的原点。在许多相机中,由于制造误差或安装不当,主点可能并不完全位于图像的几何中心。
2. 外部参数
外部参数描述相机在三维世界坐标系中的位置和方向,通常通过一个 4 × 4
的变换矩阵表示,包含旋转矩阵和平移向量:
T = ( R t 0 1 ) T = \begin{pmatrix} R & t \\ 0 & 1 \end{pmatrix} T=(R0t1)
- 旋转矩阵
R
:描述相机的旋转状态,可以表示为一个3 × 3
的矩阵。 - 平移向量
t
:描述相机在世界坐标系中的位置,通常表示为一个3 × 1
的向量。
通过这些外部参数,我们可以将三维世界坐标点转换为相机坐标系,从而实现三维重建。
3. 畸变参数
相机镜头的畸变会影响图像的真实度,通常分为径向畸变和切向畸变。畸变参数通常表示为一个向量 D
:
D = ( K 1 K 2 K 3 P 1 P 2 ) D = \begin{pmatrix} K1 \\ K2 \\ K3 \\ P1 \\ P2 \end{pmatrix} D= K1K2K3P1P2
-
径向畸变:由镜头的形状引起,通常用
K1
、K2
和K3
表示。这种畸变会导致图像中心附近的点更为准确,而离中心越远的点畸变程度越大。K1
、K2
通常用于描述轻微的桶形畸变(K1
和K2
的符号)或枕形畸变(K1
为正,K2
为负)。
-
切向畸变:由相机安装不正引起,通常用
P1
和P2
表示。这种畸变会导致图像中的点偏离其应有的位置,尤其在图像边缘更加明显。
二、双目相机的内参
双目相机系统由两台相机组成,通过获取两幅图像来实现三维信息的获取。在标定双目相机时,我们需要分别获取左右相机的内参。下面我们将通过实例分析相机内参和畸变参数。
1. 左右相机内部参数
对于一组双目相机的内部参数,左相机和右相机的内参矩阵 K_L
和 K_R
分别为:
左相机内参矩阵 K_L
:
K L = ( 1319.17 0 661.12 0 1318.48 527.71 0 0 1 ) K_L = \begin{pmatrix} 1319.17 & 0 & 661.12 \\ 0 & 1318.48 & 527.71 \\ 0 & 0 & 1 \end{pmatrix} KL= 1319.170001318.480661.12527.711
右相机内参矩阵 K_R
:
K R = ( 1323.32 0 667.98 0 1322.63 460.53 0 0 1 ) K_R = \begin{pmatrix} 1323.32 & 0 & 667.98 \\ 0 & 1322.63 & 460.53 \\ 0 & 0 & 1 \end{pmatrix} KR= 1323.320001322.630667.98460.531
2. 畸变系数分析
左相机的畸变系数和右相机的畸变系数分别为:
左相机畸变系数 D_L
:
D L = ( − 0.069003 0.111153 − 0.052112 0.000348 − 0.000480 ) D_L = \begin{pmatrix} -0.069003 \\ 0.111153 \\ -0.052112 \\ 0.000348 \\ -0.000480 \end{pmatrix} DL= −0.0690030.111153−0.0521120.000348−0.000480
右相机畸变系数 D_R
:
D R = ( − 0.068844 0.091295 0.013761 0.000065 − 0.000798 ) D_R = \begin{pmatrix} -0.068844 \\ 0.091295 \\ 0.013761 \\ 0.000065 \\ -0.000798 \end{pmatrix} DR= −0.0688440.0912950.0137610.000065−0.000798
从畸变系数可以看出,左相机和右相机都表现出轻微的桶形畸变(K1
和K2
为负值),这在实际应用中需要进行畸变校正,以提高图像的准确性。
三、标定过程及应用
1. 标定过程
在进行相机标定时,一般会执行以下步骤:
- 准备标定板:准备一个已知尺寸的标定板(如棋盘格)。
- 采集图像:将标定板放置在多个不同位置和角度,使用相机采集多幅图像。
- 特征提取:从每幅图像中提取出标定点的位置。
- 参数计算:使用提取到的特征点与已知的真实位置计算相机的内参和外参。
2. 应用实例
通过准确的相机标定,双目相机可以实现更高精度的深度图像生成。典型应用包括:
- 3D重建:将双目相机捕获的图像结合,生成高质量的三维模型。
- 物体识别:在三维空间中更准确地定位和识别物体。
- 机器人视觉:为机器人提供环境的深度信息,从而帮助其进行导航和路径规划。
四、总结
相机标定是获取准确三维信息的基础,尤其在双目相机系统中,精确的内参和畸变参数对于立体视觉应用至关重要。通过对相机内参和畸变参数的分析,我们可以更好地理解相机成像的特性,并为后续的图像处理和三维重建提供准确的基础。
希望这篇博客能够帮助你深入理解相机标定的基本原理及双目相机的内部参数。欢迎提出问题或分享你的看法!
相关文章:
【双目视觉标定】——3面结构光相机标定实践(获取相机内参)~未完待续
相机标定基本原理及双目相机内参解析 相机标定是计算机视觉中的一个重要步骤,旨在确定相机的内部和外部参数,以便在图像处理中进行准确的三维重建、物体识别等任务。本文将重点讲解双目相机的内参和外参原理,并结合实际参数进行分析。 一、…...
Python常用脚本集锦
收集了一些常用Python脚本,作为平时练手使用,也可以作为自己的笔记,用到哪个功能可以自己查询一下即可。 文件和目录管理 复制文件 import shutil# 复制源文件到目标文件 shutil.copy(source.txt, destination.txt)移动文件 import shuti…...

MacBook 如何设置打开json格式文件的默认程序是vs code
首先右键选中文件,然后选中显示简介 然后选中打开方式 设置成vs code...
如何在 Spring Boot 中实现多数据源的事务管理?
在 Spring Boot 中实现多数据源的事务管理可以通过以下几种方式: 一、使用编程式事务管理 配置多个数据源 如同前面提到的,在 application.properties 或 application.yml 文件中配置多个数据源的连接信息,并创建对应的数据源 bean。 手动开启…...
SQL 常用更新操作
目录 1. 从一个查询结果中获取数据批量更新一张表 1. 从一个查询结果中获取数据批量更新一张表 更新table_a中所有id在tmp查询结果中的name值 UPDATE table_a a SET a.name tmp.name FROM (SELECT id, name FROM table_b) tmp WHERE a.id tmp.id;UPDATE table_a a JOIN (SE…...

Android camera2
一、序言 为了对阶段性的知识积累、方便以后调查问题,特做此文档! 将以camera app 使用camera2 api进行分析。 (1)、打开相机 openCamera (2)、创建会话 createCaptureSession (3)、开始预览 setRepeatingRequest (4)、停止预览 stopRepeating (5)、关闭…...
nginx监控指标有哪些
Nginx 的监控指标可以帮助你了解服务器的性能、资源使用以及运行状态。下面是一些常见的 Nginx 监控指标,涵盖了访问、性能、资源使用等多个方面: 1. 访问量与请求处理 Active Connections(活跃连接数):当前 Nginx 处…...

我谈正态分布——正态偏态
目录 pdf和cdf参数 标准正态分布期望和方差分布形态 3 σ 3\sigma 3σ原则 正态和偏态正态偏态瑞利分布偏度 (Skewness)峰度 (Kurtosis) 比较 正态分布的英文是Normal Distribution,normal是“正常”或“标准”的意思,中文翻译是正态,多完美的…...
如何使用uniswap v2 获取两个代币的交易对池子
在 Uniswap V2 中,获取两个代币的交易对池子(即 pair)可以通过以下步骤实现: 连接到 Uniswap V2 的合约:你需要与 Uniswap V2 的 Factory 合约进行交互,通过该合约来查找代币交易对。 获取交易对地址:Uniswap V2 Factory 合约提供了一个 getPair 函数,可以通过该函数查…...

CSS中常见的两列布局、三列布局、百分比和多行多列布局!
目录 一、两列布局 1、前言: 2. 两列布局的常见用法 两列布局的元素示例: 代码运行后如下: 二、三列布局 1.前言 2. 三列布局的常见用法 三列布局的元素示例: 代码运行后如下: 三、多行多列 1.前言 2&…...

GaussDB Ustore存储引擎解读
目录 一、数据库存储引擎 二、GaussDB Ustore存储引擎 总结 本文将介绍GaussDB中的Ustore存储引擎,包括Ustore的设计背景、特点介绍和适用业务场景等。 一、数据库存储引擎 数据库的存储引擎负责在内存和磁盘上存储、检索和管理数据,确保每个节点的…...

JAVA基础:数组 (习题笔记)
一,编码题 1,数组查找操作:定义一个长度为10 的一维字符串数组,在每一个元素存放一个单词;然后运行时从命令行输入一个单词,程序判断数组是否包含有这个单词,包含这个单词就打印出“Yes”&…...

VMWARE ESXI VMFS阵列故障 服务器数据恢复
1:河南用户一台DELL R740 3块2.4T硬盘组的RAID5,早期坏了一个盘没有及时更换,这次又坏了一个,导致整组RAID5处于数据丢失的状态, 2:该服务器装的是VMware ESXI 6.7,用户把3块硬盘寄过来进行数据…...
实时金融股票数据API接口websocket接入方法
一、使用websocket的协议提升传输速度 实时金融股票数据对于投资者和交易员来说至关重要。通过使用WebSocket接入方法,可以轻松获取实时金融股票类数据并及时做出决策。WebSocket是一种高效的双向通信协议,它允许数据的实时推送,避免了不断的…...
机器学习与成像技术
机器学习与成像技术 在科技日新月异的今天,机器学习与成像技术的结合正引领着智能视觉领域进入一个全新的发展阶段。这一结合不仅推动了图像识别、目标检测、视频分析等领域的快速发展,还深刻影响着医疗、安防、自动驾驶等多个行业。本文将从机器学习与…...

【系统架构设计师】预测试卷一:综合知识(75道选择题)
更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 【第1题】【第2题】【第3题】【第4题】【第5~6题】【第7题】【第8~10题】【第11题】【第12题】【第13题】【第14题】【第15题】【第16题】【第17~18题】【第19~20题】【第21~22题】【第23~24题】【第25~26题】【第2…...
【addRepository 在tomcat 8和tomcat 9的支持情况】
项目中涉及将远程下载的 jar包进行解密后加载到 tomcat 容器中。 File jarFile new File(fileUrl); String jarFileUrl jarFile.toURI().toURL().toString(); WebappClassLoader webLoader (WebappClassLoader) classLoader; webLoader.addRepository(jarFileUrl);在升级到 …...

2024网鼎杯web1+re2 wp
这两道题属于比较简单的,顺道说一下,今年的题有点抽象,web不是misc,re不是web的,也有可能时代在进步,现在要求全栈✌了吧 web1 最开始被强网的小浣熊带偏思路了,进来疯狂找sql注入,…...
Python 自动化运维:安全与合规最佳实践
Python 自动化运维:安全与合规最佳实践 目录 🔒 Python安全编程实践与最佳实践🔑 使用Hashlib与Cryptography进行数据加密📊 安全审计与合规检查的重要性🔍 处理敏感数据与隐私保护的方法 1. 🔒 Python安…...
I2S、PDM、PCM、TDM、DSM、DCODEC、VAD、SPDIF
I2S (Inter-IC Sound) 用途: 一种用于芯片之间传输音频数据的串行总线标准。特点: 常用于高质量音频设备,如DAC、ADC和音频编解码器。I2S主要传输PCM格式的音频数据。PDM (Pulse Density Modulation) 用途: 主要用于数字麦克风等设备,以简化硬件接口。特点: 使用脉冲密度来编…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...