【转】OAK-D双目相机进行标定及标定结果说明
编辑:OAK中国
首发:A. hyh@CSDN
喜欢的话,请多多👍⭐️✍
内容来自用户的分享,如有疑问请与原作者交流!
▌前言
Hello,大家好,这里是OAK中国,我是助手君。
近期在CSDN刷到一篇教程,感觉不错的呦,分享给大家!
更多资源和教程,可在我的主页搜索哦。

▌一、启动相机
roslaunch depthai_examples stereo_inertial_node.launch enableRviz:=false depth_aligned:=false stereo_fps:=4
enableRviz:=false:这个参数可以打开或关闭 Rviz 可视化工具,在这里是关闭 Rviz。
depth_aligned:=false:此参数控制是否输出深度映射图像,这里是不输出。
stereo_fps:=4:设置实时立体摄像机帧率为 4 帧/秒。
▌二、录制视频
rosbag record /stereo_inertial_publisher/left/image_rect /stereo_inertial_publisher/right/image_rect -O stereo.bag
这个命令使用了 rosbag record 指令来记录两个 topics:
/stereo_inertial_publisher/left/image_rect和/stereo_inertial_publisher/right/image_rect。
这两个 topics 分别对应相机的左侧和右侧图像。
-O stereo.bag 是一个可选参数,在此处用于指定保存记录数据的文件名为“stereo.bag”。因此,执行这个命令后,ROS系统会在后台记录左摄像头和右摄像头的图像,并将它们保存到名为“stereo.bag”的ROS bag文件中。
CTRL+C停止录制
▌三、标定
rosrun kalibr kalibr_calibrate_cameras --bag ../stereo.bag --topics /stereo_inertial_publisher/left/image_rect /stereo_inertial_publisher/right/image_rect --models pinhole-radtan pinhole-radtan --target ../OAK_D/april_6x6.yaml
这是一个ROS命令行命令,用于使用Kalibr包中的kalibr_calibrate_cameras节点对相机进行标定。下面是参数的简要解释:
- rosrun:一个ROS命令,用于在终端中运行ROS节点或包。 kalibr_calibrate_cameras:相机标定节点名。
- kalibr_calibrate_cameras:相机标定节点名。
- –bag …/stereo.bag:这是一个ROS bag文件的路径,其中包含用于标定的图像和传感器数据。
- –topics /stereo_inertial_publisher/left/image_rect /stereo_inertial_publisher/right/image_rect:用于标定的图像主题名称。
- –models pinhole-radtan pinhole-radtan:指定相机模型类型。
- –target/home/gagaga/catkin_ws/src/OKA_D/april_6x6.yaml:指定标定板的参数文件路径和名称。
▌四、生成的结果
图一:述了两个相机之间共同观察一个场景的次数。这个概念也被称为“共视图”或“互测图”。在这个图中,每个节点表示一个空间点,每条边表示两个相机之间的观测次数,权重则表示两个相机观察同一点的互测次数,权重越高说明观测的次数越多,表明对点的准确测量更可靠。

图二:“camera system”通常是指通过相机的内参和外参,描述整个相机系统的参数矩阵。它定义了相机系统从世界坐标系到图像平面中每一个像素的转换关系,从而将双目视觉中的两个独立的视觉通道进行了合并。

图三: “cam0:estimated poses”指代的是相机1(左相机)在世界坐标系下的相对位姿。

图四:由于标定的误差和测量的噪声,相机参数可能不是完全准确的,需要进行误差分析。一个常用的评估标准是极线误差(Polar Error)。“cam0:polar error”描述了左相机与右相机之间重投影误差的分布情况。具体地说,polar error是每个点的实际位置与其在另一个相机的影像平面上估计位置之间的距离,并且以极线为单位描述,即该误差是沿着极线方向的距离。在标定后,相机参数被用于立体校正,即将左右相机图像对齐以便于进行立体匹配。在立体匹配过程中,对于每个左图像上的像素点,需要在右相机上寻找其对应的点,这可以通过以下方法之一实现:极线搜索,立体匹配,深度估计等。无论使用哪种方法,都需要估算出点在右相机上的位置。Polar Error反映了这个位置估计的准确性。

图五:cam0:azimuthal error”是指对于每个点的实际值和估计值之间的方位角误差,其中方位角是指相对于相机水平轴(ox 轴)的角度。该指标反映了计算出的深度值与实际深度之间的误差,并以弧度或角度形式成单个度量值。评估Polar Error和Azimuthal Error是双目相机标定后检查和优化立体视觉重建算法的重要过程。

图六:“cam0: reprojection errors”是双目相机标定的一个指标,用于评估每个图像特征点的重新投影误差大小。具体地说,它是将标定后的相机内外参数应用于特征点的2D像素坐标,计算其与实际特征点的图像位置之间的距离(通常以像素为单位),以此度量标定的准确度。 Reprojection Error为检测标定结果的精度提供了一个简单而有效的方法。通常,如果平均重投影误差非常小(一般小于1个像素),那么标定结果被认为是非常优良的。反之,如果平均重投影误差很大,则需要对标定结果进行调整或重新标定。

图七:在标定中,需要识别和清除这些异常值,以提高标定结果的准确性。“location of removed outlier corners”是双目相机标定结果图中的一个指标,用于表示在标定过程中检测到的异常点所在的图像位置。这通常是一个交互式图表,显示所有检测到的异常点的位置,以及根据算法获取的异常临界值。异常点可以通过各种合适的算法和技术进行检测和去除。在标定过程中,可能会将其与其他异常值分离,并记录其坐标信息。因此,“location of removed outlier corners”显示了这些异常值的位置,以便研究人员评估标定准确性并了解哪些数据点对标定的影响最大。

stereo-results-cam.txt 是双目相机标定的结果文件,其中记录了标定结果中双目相机各自的内外参数和它们之间的相对变换关系等重要信息。这些参数可以被用于计算相机的外部位姿和三维点云坐标。由于标定的精度和准确性直接影响后续任务的质量,因此该文件是双目相机标定的一个重要输出。
D矩阵畸变参数k1、k2、p1、p2
distortion: [-0.01351866 0.00282827 -0.00084567 0.00188117] ± [0.00055869 0.00046119 0.00011658 0.00016122]:这个参数描述了相机的畸变模型,其中 [-0.01351866 0.00282827 -0.00084567 0.00188117] 是相机的畸变系数向量,该向量表示相机畸变的类型和程度;而 [+0.00055869 0.00046119 0.00011658 0.00016122] 表示每个畸变系数的估计误差,类似于标准差。
projection: [570.19685483 572.9469566 633.05769608 348.96007466] ± [0.54881124 0.55288321 0.29987289 0.28100582]:这个参数表示相机的内部参数,包括焦距和光心的坐标等信息。具体描述了相机像素坐标系到相机坐标系的投影关系,[570.19685483 572.9469566 633.05769608 348.96007466] 表示相机的 4 个主要内部参数,也就是相对应的相机的焦距和光心坐标等特征;而 [+0.54881124 0.55288321 0.29987289 0.28100582] 表示每个主要内部参数的估计误差,类似于标准差。
reprojection error: [-0.000031, -0.000001] ± [1.270309, 1.373586]:该参数表示重投影误差,是反映相机标定质量的一个指标。[-0.000031, -0.000001] 是相机平均的重投影误差,表示相机将 3D 点投影到图像空间中的重投影误差;而 [+1.270309, 1.373586] 则是对这个误差的估计误差,类似于标准差。

▌参考资料
https://docs.oakchina.cn/en/latest/pages/HighLevel/ros/ros_oak_d_kalibr.html
OAK中国
| OpenCV AI Kit在中国区的官方代理商和技术服务商
| 追踪AI技术和产品新动态
戳「+关注」获取最新资讯↗↗
相关文章:
【转】OAK-D双目相机进行标定及标定结果说明
编辑:OAK中国 首发:A. hyhCSDN 喜欢的话,请多多👍⭐️✍ 内容来自用户的分享,如有疑问请与原作者交流! ▌前言 Hello,大家好,这里是OAK中国,我是助手君。 近期在CSDN刷…...
whip和whep
原文为runner365.git大佬的文章 原文链接:https://blog.csdn.net/sweibd/article/details/124552793 WHIP接口 什么是whip 全称: WebRTC-HTTP ingestion protocol (WHIP). rfc地址: rfc-draft-murillo-whip-00 简单说,就是通过HTTP接口能导入webrtc媒…...
SpringBoot集成jjwt和使用
1.引入jwt依赖(这里以jjwt为例,具体其他jwt产品可以参见jwt官网) <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version> </dependency>…...
RedisConnectionFactory is required已解决!!!!
1.起因🤶🤶🤶🤶 redis搭建完成后,准备启动主程序,异常兴奋,结果报错了!!!! 2.究竟是何原因 😭😭😭…...
redis的高可用之持久化
1、redis的高可用考虑指标 (1)正常服务 (2)数据容量的扩展 (3)数据的安全性 2、redis实现高可用的四种方式 (1)持久化 (2)主从复制 (3&…...
onnx模型转换opset版本和固定动态输入尺寸
背景:之前我想把onnx模型从opset12变成opset12,太慌乱就没找着,最近找到了官网上有示例的,大爱onnx官网,分享给有需求没找着的小伙伴们。 1. onnx模型转换opset版本 官网示例: import onnx from onnx im…...
远程运维如何更高效的远程管理?向日葵的这几项功能会帮到你
远程运维如何更高效的远程管理?向日葵的这几项功能会帮到你 具备一定规模的企业,其IT运维需求普遍会面临设备数量众多、难以统一高效管理、始终存在安全敞口等问题,尤其是针对分部广泛的无人值守设备时,更是如此。 举一个简单的例…...
python BDD 的相关概念
在Python 语言中进行BDD的规格和测试文件的编写的时候,常常会遇到下面的概念: Fixture : 测试设施。设定测试环境的预设状态或值的机制。Background: 背景。所有场景的公共部分。Scenario: 场景。Given : 前置条件Whe…...
【Exception】Error: Dynamic require of “path“ is not supported
Talk is cheap, show me the code. 环境 | Environment kversionOSwindows 11Node.jsv18.14.2npm9.5.0vite5.0.0vue3.3.8 报错日志 | Error log >npm run dev> app10.0.0 dev > viteERROR failed to load config from C:\code\frontend\app1\vite.config.js …...
【蓝桥杯选拔赛真题25】C++两个数比大小 第十三届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析
目录 C/C++两个数比大小 一、题目要求 1、编程实现 2、输入输出 二、算法分析...
C++学习——C++运算符重载(含义、格式、示例、遵循的规则)
以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 一、运算符重载的含义 所谓重载,就是赋予新的含义。函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同…...
【unity实战】unity3D中的PRG库存系统和换装系统(附项目源码)
文章目录 先来看看最终效果前言素材简单绘制库存UI前往mixamo获取人物模型动画获取一些自己喜欢的装备物品模型库存系统换装系统装备偏移问题添加消耗品最终效果源码完结 先来看看最终效果 前言 之前2d的换装和库存系统我们都做过不少了,这次就来学习一个3d版本的&…...
编程语言发展史:C语言的诞生及其影响
预计更新 第一部分:早期编程语言 1.1布尔代数和机器语言 1.2汇编语言的出现和发展 1.3高级语言的兴起 第二部分:主流编程语言 1.1 C语言的诞生及其影响 1.2 C语言的发展和应用 1.3 Java语言的出现和发展 1.4 Python语言的兴起和特点 1.5 JavaScript语言…...
(二)pytest自动化测试框架之添加测试用例步骤(@allure.step())
前言 在编写自动化测试用例的时候经常会遇到需要编写流程性测试用例的场景,一般流程性的测试用例的测试步骤比较多,我们在测试用例中添加详细的步骤会提高测试用例的可阅读性。 allure提供的装饰器allure.step()是allure测试报告框架非常有用的功能&am…...
【用unity实现100个游戏之16】Unity程序化生成随机2D地牢游戏2(附项目源码)
文章目录 先看看最终效果前言生成走廊生成房间修复死胡同增加走廊宽度获取走廊位置信息集合方法一方法二 源码完结 先看看最终效果 前言 上期已经实现了房间的生成,本期紧跟着上期内容,生成走廊并结合上期内容生成连通的房间。 生成走廊 修改Procedur…...
潮玩宇宙大逃杀游戏开发源码说明
潮玩宇宙大逃杀游戏是一款简单而刺激的游戏。玩家在倒计时结束前从8个房间中选择一个房间并投入宝石。倒计时结束后,系统会自动生成一个敌人,然后随机挑选一个房间并清除这个房间内的人。其余7个房间内的玩家就可以按照投入比例获得被清除掉玩家的宝石。…...
UE5 操作WebSocket
插件:https://www.unrealengine.com/marketplace/zh-CN/product/websocket-client 参考:http://dascad.net/html/websocket/bp_index.html 1. 安装Plugings 2.测试websocket服务器 http://www.websocket-test.com/ 3.连接服务器 如果在Level BP里使用&a…...
Linux文件
目录 一、基本概念 二、研究进程和被打开文件的关系 (一)w方式 (二)a方式 三、认识系统接口,操作文件 (一)认识文件描述符 (二)举例 (三)…...
素短语的定义
素短语,是指至少含有一个终结符的短语,并且除自身外,不包含更小的素短语。 最左素短语是句型中最左边的素短语。...
【华为OD题库-033】经典屏保-java
题目 DVD机在视频输出时,为了保护电视显像管,在待机状态会显示"屏保动画”,如下图所示,DVD Logo在屏幕内来回运动,碰到边缘会反弹:请根据如下要求,实现屏保Logo坐标的计算算法 1、屏幕是一个800 * 600像素的矩形&…...
RAGFlow 系列教程 第十一课:文本分块策略详解
系列: RAGFlow v0.25.0 源码深度解析 作者: 耿雨飞 前置知识: 已完成第十课"LLM 抽象层 – 统一模型接口"的学习 导读 在 RAG(检索增强生成)系统中,文本分块是连接"文档解析"与"向量检索"的关键桥梁。分块质量直接决定了检索精度和生成质量—…...
利用快马平台快速构建游戏推荐网站原型,验证核心算法与UI设计
最近在做一个游戏推荐平台的项目,需要快速验证核心算法和界面设计。作为一个独立开发者,时间和资源都很有限,所以选择了InsCode(快马)平台来快速构建原型。整个过程比想象中顺利很多,分享下我的经验。 项目构思阶段 首先明确核心需…...
终极RPG Maker MV/MZ插件集合:500+免费插件打造专业级游戏开发体验
终极RPG Maker MV/MZ插件集合:500免费插件打造专业级游戏开发体验 【免费下载链接】RPGMakerMV RPGツクールMV、MZで動作するプラグインです。 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerMV 你是否曾为RPG Maker有限的游戏机制而苦恼?…...
如何通过curl命令快速测试Taotoken的OpenAI兼容接口
如何通过curl命令快速测试Taotoken的OpenAI兼容接口 1. 准备工作 在开始测试Taotoken的OpenAI兼容接口之前,您需要确保已经完成以下准备工作。首先,登录Taotoken控制台并创建一个API Key。这个Key将用于身份验证,确保只有授权的用户可以访问…...
保姆级教程:在RK3588-EVB1开发板上解锁HDMI 8K输出(Android 12 SDK)
保姆级教程:在RK3588-EVB1开发板上解锁HDMI 8K输出(Android 12 SDK) RK3588作为Rockchip旗舰级SoC,其8K视频处理能力一直备受开发者关注。但在Android 12 SDK的默认配置中,HDMI输出被限制在4K分辨率——这并非硬件瓶颈…...
Java任务编排框架的终极解决方案:如何用DAG引擎提升微服务架构效率?
Java任务编排框架的终极解决方案:如何用DAG引擎提升微服务架构效率? 【免费下载链接】taskflow taskflow是一款轻量、简单易用、可灵活扩展的通用任务编排框架,基于有向无环图(DAG)的方式实现,框架提供了组件复用、同步/异步编排、…...
D2DX:让经典《暗黑破坏神2》在现代PC上焕发新生的终极解决方案
D2DX:让经典《暗黑破坏神2》在现代PC上焕发新生的终极解决方案 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你…...
B站缓存视频转换终极指南:3分钟学会永久保存珍贵内容
B站缓存视频转换终极指南:3分钟学会永久保存珍贵内容 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾为B站视频突然下架而措…...
数据库GitOps实践:用dbhub实现Schema变更的版本控制与自动化部署
1. 项目概述:当数据库变更遇上GitHub 如果你和我一样,日常工作中有一大半时间在和数据库打交道,那你肯定对“数据库变更管理”这个老大难问题深有体会。开发新功能,要加个字段;修复线上Bug,要改个索引&…...
Windows 11系统优化深度解析:自动化精简工具的技术实现与架构设计
Windows 11系统优化深度解析:自动化精简工具的技术实现与架构设计 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder Windows 11系统优化一直是技术社区关…...
