【转】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技术和产品新动态

戳「+关注」获取最新资讯↗↗

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

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

相关文章

目标检测算法 - YOLOv3

文章目录 1. Backbone Darknet-532. 整体架构3. 损失函数4. 训练过程5. 预测过程 YOLOv1、YOLOv2都是在CVPR这种正规的计算机视觉学术会议上发表的正式学术论文。 YOLOv3不算一篇严谨的学术论文,是作者随笔写的技术报告。 YOLOv3性能: 1. Backbone Dark…

SSM客户管理系统CRM开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 客户管理系统CRM是一套完善的信息系统,结合springMVC框架完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模…

day62

Cookie与Session的发展史详解 1.Cookie的发展史 1994年,网景通信公司推出了第一个浏览器Cookie技术。Cookie是存储在用户计算机上的小型文本文件,用于跟踪用户在网站上的活动。初始版本的Cookie只能存储很少的数据,并且没有强制加密机制&am…

CVE-2021-42287CVE-2021-42278 域内提权

倘见玉皇先跪奏:他生永不落红尘 本文首发于先知社区,原创作者即是本人 前言 网络安全技术学习,承认⾃⼰的弱点不是丑事。只有对原理了然于⼼,才能突破更多的限制。拥有快速学习能力的白帽子,是不能有短板的&#xf…

Spring Framework IoC依赖注入-按Bean类型注入

Spring Framework 作为一个领先的企业级开发框架,以其强大的依赖注入(Dependency Injection,DI)机制而闻名。DI使得开发者可以更加灵活地管理对象之间的关系,而不必过多关注对象的创建和组装。在Spring Framework中&am…

Go语言读取文件内容

简介 读取文件内容在每个语言里面都有,go语言中主要注意文件读完后会返回一个异常 io.EOF,根据这个异常去判断就可以了 代码实现 package mainimport ("bufio""fmt""io""os" )func main() {lines : Read(&qu…

【20年扬大真题】编写程序,功能是从键盘输入若干4位数字学号,然后输出学号中百位数字是3的学号 (输入0时结束循环)

【20年扬大真题】 编写程序&#xff0c;功能是从键盘输入若干4位数字学号&#xff0c;然后输出学号中百位数字是3的学号 &#xff08;输入0时结束循环&#xff09; #include<stdio.h> #define MaxSize 20 int BaiWei3(int x) {x x / 100;if (x % 10 3) {return 1;}els…

Windows安装Hadoop运行环境

1、下载Hadoop 2、解压Hadoop tar zxvf hadoop-3.1.1.tar.gz3、设置Hadoop环境变量 3.1.1、系统环境变量 # HADOOP_HOME D:\software\hadoop-3.1.13.1.2、Path 环境变量 %HADOOP_HOME%\bin %HADOOP_HOME%\sbin3.1.3、修改Hadoop文件JAVA_HOME 注 : 路径中不要出现空格 ,…

TMUX设置鼠标滚轮滑动来浏览之前的前面内容

在Ubuntu上使用Tmux有时使用鼠标滚轮时&#xff0c;和平时使用终端的习惯不怎么一致&#xff0c;因此可以设置启用鼠标滚轮。 通过鼠标滚轮滑动来浏览之前的前面内容 具体方式&#xff1a; 1 按完前缀ctrlB后 2 再按冒号&#xff1a;(记得shift) 3 进入命令行模式(下方绿色栏变…

关于web端调用iOS系统的图库异常的问题

前端调用iOS系统图库时异常 好久没更新了&#xff0c;忙于生计。 近日开发中需要iOS客户端需要加载一个webview用于承载一些IM的聊天功能&#xff0c;对于iOS来说很简单&#xff0c;加载一个url即可&#xff0c;但是本人习惯于写成view添加到window上[UIApplication sharedApp…

蓝桥等考C++组别七级008

第一部分:选择题 1、C++ L7 (15分) 在判断是否满足循环条件之前,至少执行循环体语句一次的是哪种循环结构?( ) for循环while循环do-while循环以上都不是正确答案:C 2、C++ L7 (15分) 执行以下程序,会输出几个“*”?( ) for(int i = 0; i <= 10; i++){…

webpack之resolve模块解析

resolve官网配置地址 resolve官网概念地址 解析文件路径 绝对路径&#xff1a;由于已经获得文件的绝对路径&#xff0c;因此不需要再做进一步解析。 相对路径&#xff1a;在 import/require 中给定的相对路径&#xff0c;会拼接此上下文路径&#xff0c;来生成模块的绝对路径&…

前端面试算法之“时间复杂度

✨求关注~ &#x1f600;博客&#xff1a;www.protaos.com 欢迎添加我的微信 介绍 时间复杂度是算法效率的一个关键概念&#xff0c;用于衡量算法运行时间随输入规模增长的速度。在计算机科学中&#xff0c;我们经常面临着不同的算法选择&#xff0c;而了解它们的时间复杂度有助…

首选C++,彻底麻了!

“作为初学者&#xff0c;我应该选择什么语言?” 网上冲浪时&#xff0c;我经常看到上面这样的疑问。作为一个同样在这个选择上挣扎许久的人&#xff0c;我最终选择了C。我想&#xff0c;我可以就这个特定的选择以及它如何影响我之后的学习谈一下个人看法。 本文将围绕以下四…

Spring条件注解@Conditoinal+ Profile环境切换应用@Profile

Spring条件注解 一、创建一个maven项目 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.1.5.RELEASE</version></dependency> </dependenc…

局域网内Ubuntu上搭建Git服务器

1.在局域网内选定一台Ubuntu电脑作为Git服务端&#xff1a; (1).新建用户如为fbc&#xff0c;执行如下命令&#xff1a;需设置密码&#xff0c;此为fbc sudo adduser fbc (2).切换到fbc用户&#xff1a;需密码&#xff0c;此前设置为fbc su fbc (3).建一个空目录作为仓…

Linux 内核提权漏洞

提权方式 存在漏洞版本 exp/poc 参考 CVE-2021-33200 Linux kernel through 5.12.7 暂无 NVD - CVE-2021-33200 CVE-2021-31440 Linux kernel 5.11 through 5.12.2 【kernel exploit】CVE-2021-31440 eBPF边界计算错误漏洞&#xff08;Pwn2Own 2021&#xff09; — b…

UI自动化之Playwright简介

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

C++初阶--类型模板

文章目录 泛型编程函数模板使用通用加法函数多模板参数必须用实例化 函数模板的原理类模板使用 注意事项 泛型编程 先看一个例子&#xff1a; 这是一些对于Swap重载的函数&#xff0c;区别是类型不同&#xff1b; 虽然能够重载使用&#xff0c;但代码复用率比较低&#xff0c…

CSS元素的显示模式

一.什么是元素显示模式 元素显示模式就是元素&#xff08;标签&#xff09;以什么方式进行显示&#xff1b;比如&#xff1a;<div>独占一行&#xff0c;一行可以显示多个<span> HTML元素一般分为块元素和行内元素两种类型。 二.元素分类 1.块元素 常见的块元素有…