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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nginx模块开发之http过滤器filter

文章目录 什么是过滤模块Nginx相关数据结构介绍ngx_module_t的数据结构ngx_http_module_t数据结构ngx_command_s数据结构 相关宏定义filter(过滤器)实现Nginx模块开发流程Nginx 模块执行具体实现流程create_loc_confmerge_loc_confpostconfiguration修改…

Linux进程理解(冯诺依曼体系结构,操作系统,进程概念和基本操作)

Linux进程理解[冯诺依曼体系结构,操作系统,进程概念和基本操作] 一.冯诺依曼体系结构1.冯诺依曼体系结构的说明2.冯诺依曼体系结构的价值1.冯诺依曼之前的计算机的局限2.为什么在计算机体系结构当中要存在内存? 二.操作系统1.什么是操作系统2.操作系统如何进行管理3.为什么要有…

Android修行手册-溢出父布局的按钮实现点击

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…

随机微分方程的MATLAB数值求解

dt0.01; tout200; %总时间为2 xzeros(1,tout); x(1)0.5; %初始位置 mu0.2; sigma1; Wtsqrt(dt)*randn(1,tout); %产生随机序列Wt for t1:tout-1x(t1)x(t)mu*x(t)*dtsigma*x(t)*Wt(t); end t11:10:tout; %对原时间序列进行抽样 xtzeros(1,length(t1)); i1; for tt1xt(i)0.5*exp(…

2023年11月25日(星期六)骑行三家村

2023年11月25日 (星期六) 骑行三家村(赏红杉林),早8:30到9:00, 大观公园门囗集合,9:30准时出发 【因迟到者,骑行速度快者,可自行追赶偶遇。】 偶遇地点:大观公园门口集合 ,家住东,南…

【算法萌新闯力扣】:两句话中的不常见单词

力扣热题:两句话中的不常见单词 开篇 今天是备战蓝桥杯的第19天,今天到目前刷了4道力扣算法题。其中,这道题是对我来说收获最大的一道,让我更熟练地掌握了一些算法题中方法,于是来与大家分享一下。 题目链接: 884.两…

web自动化测试-Selenium语法入门到精通

前言 说到自动化测试,就不得不提大名鼎鼎的Selenium。Selenium 是如今最常用的自动化测试工具之一,支持快速开发自动化测试框架,且支持在多种浏览器上执行测试。 Selenium学习难度小,开发周期短。对测试人员来说,如果…

vue中列表渲染

列表渲染 实际开发中,使用每条数据的唯一标识作为key,也就是对于数组列表,对象中的属性如:id、手机号、身份证号、学号等唯一值,对象列表同理 只要不对列表的逆序添加,逆序删除等破坏顺序的操作,仅用于渲染…

微信小程序:This Mini Program cannot be opened as your Weixin version is out-of-date.

项目场景: 问题描述 升级基础库3.2.0,然后PC端整个小程序都打不开了,点击小程序提示”This Mini Program cannot be opened as your Weixin version is out-of-date. Update Weixin to the latest version.“,并且点击Update Wei…

新手怎样快速上手接口测试?掌握这几个知识点直接起飞!

接口测试是测试系统组件间接口的一种方式,接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是检查数据的增删改查操作,以及系统之间的逻辑关系等。 接口的几种类型 接口的类型包括:post ,get&…

最新AIGC创作系统ChatGPT网站源码,Midjourney绘画系统,支持最新GPT-4-Turbo模型,支持DALL-E3文生图

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

自动化发展趋势以及自动化测试常见问题解析

前言 ⾃动化接⼝测试会越来越受到重视 在移动互联⽹时代,对于质量的要求⽐PC时代⾼的多,⽽投⼊产出⽐最⾼的⾃动化接⼝测试,将会是⼤部分公司的⾸选⽅向,但需要严格掌握⼀门语⾔ 持续集成是⽬前⾮常流⾏的开发⽅式,…

《向量数据库指南》——向量数据库Milvus Cloud搭建Excel公式编辑器助手

引言 在日常工作中,Excel是我们经常使用的办公工具,而熟练应用Excel公式对于提高工作效率非常重要。然而,有时候我们会遇到一些复杂的需求,需要用到较为专业的Excel公式,而这正是Excel公式编辑器助手的用武之地。本文将介绍如何利用向量数据库Milvus Cloud搭建GPT大模型和…

铸就匠心,打造西部最具权威的行业商会组织

中国商报陕西报道(记者 朱清平)西安市五金机电商会(以下简称商会)第二届一次会员代表大会暨新任理事、监事就职典礼于11月17日在西安经开洲际酒店召开。 商会于2018年10月成立,在5年的发展中,依托“一带一路”发展的“快车道”,通过新丝路国际工业品数字…

Threejs_12 物体阴影的实现

所以在Threejs的画布世界之中,一个物体有自己的影子呢? 阴影效果的实现 你需要先知道在threejs世界中,有哪些灯光或者材质是可以产生阴影效果的 环境光没有阴影 平行光有阴影(太阳) 点光源有阴影(灯泡) 聚光灯有阴影(手电筒) 平面光源没有…

自主创新操作系统KeyarchOS的崛起

自主创新操作系统KeyarchOS的崛起 写在前面 在计算机中,操作系统是其最基本也是最为重要的基础性系统软件。从计算机用户的角度来说,计算机操作系统体现为其提供的各项服务;从程序员的角度来说,其主要是指用户登录的界面或者接口…

qlik为app添加定时调度

1,进入qmc/Apps 2,搜索需要添加调度的APP 3,搜索到后双击点开Tasks 4,新增Tasks---点击Create New 5,添加调度器 6,设置调度,双击新增的调度,注意选择时区

从mysql源码编译出相应的库和可执行文件及搭建mysql服务端

目录 1. 问题的提出 2. 源码下载 3. 升级或安装某些前置软件 3.1. 升级CMake 3.2. 升级gcc、g 4. 安装依赖库 4.1. 安装OpenSSL 4.2. 安装Curses 4.3. 安装pkg-config 5. 编译、安装 6. 编译结果、配置 7. 编译错误处理 7.1. 错误1 7.2. 错误2 8. 搭建mysql数…

解决vue中引入天地图显示不全问题,设置setTimeout即可解决!

index.html中引入天地图api <script type"text/javascript" src"https://api.tianditu.gov.cn/api?v4.0&tk你的key"></script>map.vue中初始化天地图 //初始化天地图 initTMap() {const T window.T;// 3.初始化地图对象this.tMap new…

【Linux】历史发展及安装

目录 1. 前言2. Linux历史背景2.1 发展史2.1.1 UNIX发展的历史2.1.2 Linux发展历史 3. 开源4.Linux系统安装4.1 Linux系统选择4.2 登陆 1. 前言 从今天开始学习一门新课程Linux&#xff0c;会以博客的形式分享自己的学习笔记。如有问题请指出&#xff0c;大家共同进步。 2. L…