【2024】OAK智能深度相机校准教程

编辑:OAK中国
首发:oakchina.cn
喜欢的话,请多多👍⭐️✍
内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。

▌前言

Hello,大家好,这里是OAK中国,我是Ashely。

近期我们更新了校准程序和方式,让OAK相机的精度有所提升。大家如果手里用的是旧设备,可以根据本教程来重新校准设备,精度可能会好点。

目前支持的校准程序:

  • 深度校准
  • ToF校准

如果你用的是非ToF款相机,请只看“深度校准”这一部分即可。

▌深度校准

相机校准是确定相机的固有、外在和畸变参数的过程。相机需要这些才能将 3D 世界中的点映射到图像中的 2D 点,反之亦然,以消除图像失真,并从立体图像中确定深度。

根据这些参数,相机还计算出用于校正(对齐)立体相机的图像的校正矩阵,因此 StereoDepth 节点可以执行立体视差计算和深度估计。

注意!所有带外壳的OAK相机在出厂前就完成了校准,除非你对校准的精度不满意,否则不用再自己重新校准一次。
分体式OAK-FFC系列的产品,在完成安装后,必须做校准。

以下是一个校准步骤的演示视频,有关校准的更多信息查看以下步骤以及 ./calibrate.py --help 将打印出所有校准选项的步骤。

【2023】用新程序校准OAK双目相机教程

须知

你的电脑需要安装depthai,可通过以下方式安装:

git clone https://github.com/luxonis/depthai.git
cd depthai
git submodule update --init --recursive
python3 install_requirements.py

准备charuco标定板

我们通过将 charuco 板显示在电视或大型(平面,非曲面)显示器上找到了最佳效果。屏幕越大越好,因为它们允许在图像中显示更多的字符标记,这通常会提高校准精度。根据屏幕尺寸(对角线,以英寸为单位),我们建议全屏显示以下charuco板:

  • 24寸屏幕:charuco_24inch_13x7
  • 28寸屏幕:charuco_28inch_15x8
  • 32寸屏幕:charuco_24inch_17x9
  • 36寸屏幕:charuco_36inch_19x11
  • 42寸屏幕:charuco_42inch_22x12
  • 50寸屏幕:charuco_24inch_27x15
  • 55寸屏幕:charuco_55inch_30x17
  • 65寸屏幕:charuco_65inch_35x20
  • 75寸屏幕:charuco_75inch_41x23

如果你用的是其他尺寸的屏幕,建议选比屏幕稍小的charuco板。

如果无法在显示器上显示charuco板,你可以将板打印到平坦的表面上(如PVC板货KT板),没有褶皱或凹凸。你也可以将其打印到一张纸上并将其粘在坚固、平坦的表面上。材质不要太反光!

我们更推荐的方式是打印在KT板上,就像我们视频中用的那种。

屏显charuco板

全屏显示charuco板时,标记和方块应清晰可见。注意以下几点:

  • 屏幕不应太亮(或太暗),因为它会导致图像过度饱和,这将使相机更难检测到标记。
  • 不要让明亮的灯光/阳光直接照射在屏幕上。
  • 全屏显示charuco板,使标记尽可能大。

接下来测量 charuco 板的正方形尺寸,因为我们稍后会用到它。

配置json文件

如果你用的是带外壳的OAK相机,则可以直接用现成的配置。(查看)

如果你用的是一个分体式OAK-FFC相机,则可以用这个模板去配置json文件,修改一些参数数值。参数解释看下图。

运行校准脚本

将占位符参数值替换为有效条目:

python3 calibrate.py -s [SQUARE_SIZE_IN_CM] --board [BOARD] -nx [squaresX] -ny [squaresY]

例如,在32‘’屏幕上校准OAK-D-S2,正方形尺寸为3.76cm,应该运行如下命令:

python3 calibrate.py -s 3.76 --board OAK-D-S2 -nx 17 -ny 9

如果没有RGB镜头,可以加-drgb,如下:

python3 calibrate.py -s 3.76 --board OAK-FFC-4P -nx 17 -ny 9 -drgb

运行python3 calibrate.py --help可以查看更多参数解释。

校准期间的相机定位

我们建议从不同的角度和距离捕获校准,因为这将有助于校准算法找到最佳校准。

1.靠近屏幕:校准板几乎覆盖了整个视场。拍摄 5 张照片以覆盖相机的整个 FOV。

1)前视图,FOV中间的校准板(参考下图)。

2)在不移动(平移)相机的情况下,只需旋转即可将相机 FOV 与校准板边缘对齐(例如:右下角、左上角、右上角、左下角)

2.靠近屏幕从侧面。校准板倾斜的 4 张或更多图像,但仍覆盖大部分FOV。将相机移动到屏幕的顶部、底部、左侧和右侧。你也可以使用不同的距离。

3.中距离:校准板覆盖 40% 的 FOV。拍摄 5 张图像以覆盖相机的整个 FOV。

1)前视图,FOV中间的校准板。

2)与 2.靠近屏幕 一样,无需移动,仅通过旋转将相机 FOV 与校准板边缘对齐。

4.远离屏幕:校准板仅覆盖 FOV 的一小部分。总共拍摄 9 张图像以覆盖相机的整个 FOV。

1)正面视图,FOV中间的校准板。

2)与 2.靠近屏幕 类似,拍摄 4 张图像,将相机 FOV 对齐到所有 4 个边缘。

3)除了与所有 4 个边缘对齐外,还要拍摄 4 张与角对齐的图像(例如:顶部、底部、左侧、右侧)。

校准期间不同的相机旋转/位置,鸟瞰图

例如,28寸屏幕,近距离50CM,远距离1M。

正常视角的OAK相机参考位置图:

广角的OAK相机参考位置图:

运行校准

捕获图像后,我们可以运行校准。这是通过按 s 键完成的。该脚本将显示每个图像的 epiplolar 线条,您应该检查它们是否正确对齐。检查完所有图像后,校准结果(如果成功)将闪烁到器件EEPROM上。每个捕获的图像都保存在 dataset 文件夹中,因此您可以自行重新运行校准过程,而无需再次捕获图像。

python3 calibrate.py -s 3.76 --board OAK-D-S2 -nx 17 -ny 9 -m process

校准结果存储在 resources 文件夹中,以后可用于测试/调试目的。你还可以将此本地校准文件加载/刷新到设备(详情请参阅此处)。

问题排查

如果校准失败并出现错误: High reprojection error! ,通常的原因是电路板配置错误。很多时候,这是由于使用过的相机模块的指定 HFOV 不正确。

如果你发现尽管成功校准了相机并确认了外极线正确左右对齐,但深度仍然不正确,则可能是你的左右相机互换了。在这种情况下,你可以使用更改的电路板配置重试校准,或者直接更换相机插入的电路板插座。

▌ToF校准

飞行时间(ToF)校准对于将ToF传感器与系统中的其他相机对齐至关重要。此过程侧重于获取外部参数,这对于确保不同相机之间的协调操作至关重要。请注意,此校准不会提高深度精度,因为该方面由设备的固件管理。

校准程序

如果你已经安装了 DepthAI 库,则可以使用以下命令更新它以进行 TOF 校准:

git checkout new_tof_calib
git submodule update --init --recursive

安装更新的 DepthAI Python 库:

python3 .\install_requirements.py

要开始校准过程,请使用你正在使用的 Charuco 板的适当参数运行 calibrate.py。例如:

python3 calibrate.py -db -nx 12 -ny 9 -c 1 -cd 0 -s 6 -ms 4.7 -brd OAK-D-SR-POE

参数解释如下:

  • -db:表示默认板,表示你正在使用 Charuco 标记。
  • -nx:x 方向上的 Charuco 标记数。
  • -c:每次显示多边形时拍摄的照片数量(可选,建议在你的情况下省略)。
  • -cd:拍摄照片前的倒计时时间(以秒为单位)(可选,建议用于更快的图像校准)。
  • -s:Charuco 标记周围的正方形大小(以厘米为单位)。
  • -ms:标记的大小(以厘米为单位)。
  • -brd:设备的板(在本例中为 OAK-D-SR-POE)。

请注意,TOF校准可能具有挑战性,因为电路板必须靠近相机才能检测Charuco电路板。如果遇到 division by zero 或 Failed to detect markers in the image dataset/rgb/rgb_p3_10.png 等错误,则应转到数据集文件夹并删除 Charuco 板检测不佳的图片(在所有相机文件夹中)。然后,使用添加的参数 -m process 再次运行相同的代码。这将仅启动处理阶段,因此你不必重新拍摄电路板的照片。

python3 calibrate.py -db -nx 12 -ny 9 -c 1 -cd 0 -s 6 -ms 4.7 -brd OAK-D-SR-POE -m process

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

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

相关文章

求幸存数之和 - 华为OD统一考试

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C++ 题目描述 给一个正整数列nums,一个跳数jump,及幸存数量left。运算过程为:从索引为0的位置开始向后跳,中间跳过 J 个数字,命中索引为 J+1 的数字,该数被敲出,并从该点起跳,以此类推,直到幸存left个数为止。…

212. 单词搜索 II(字典树的另一种类型)

大致思路是: 根据words列表建立字典树,其中注意在单词末尾,将原来的isEnd变量换成存储这个单词的变量,方便存储到ans中,另外,字典树的字节点由原来的Trie数组变为hashmap,方便检索字母。 建立…

《DAMA数据管理知识体系指南》05—第5章 数据建模和设计 知识点记录

第5章 数据建模和设计 5.1 引言 1.数据建模概要: 1)本章将描述数据模型的用途、数据建模中的基本概念和常用词汇以及数据建模的目标和原则。本章将使用一组与教育相关的数据作为案例来说明用各种数据建模的方法,并介绍它们之间的差异。 2&a…

flutter 文件下载及存储路径

flutter 文件下载及存储路径 前言一、下载进度条二、文件路径二、文件上传总结 前言 日常开发中,经常会遇到下载文件的功能,往往我们在需要保存文件的路径上去调试,比如Android中的路径,有些会报错在SD卡中,但是有些手…

【REST2SQL】05 GO 操作 达梦 数据库

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 信创要求用国产数据库,刚好有项目用的达梦,研究一下go如何操作达梦数据库 1 准备工作 1.1 安…

第三次面试总结 - 吉云集团 - 全栈开发

🧸欢迎来到dream_ready的博客,📜相信您对专栏 “本人真实面经” 很感兴趣o (ˉ▽ˉ;) 专栏 —— 本人真实面经,更多真实面试经验,中大厂面试总结等您挖掘 目录 总结(非详细) 面试内…

常见TCP和UDP端口号

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! 厦门微思网络​​​​​​ https://www.xmws.cn 华为认证\华为HCIA-Datacom\华为HCIP-Datacom\华为HCIE-Datacom Linux\RHCE\RHCE 9.0\RHCA\ Oracle O…

SV-7041T 30W网络有源音箱校园教室广播音箱,商场广播音箱,会议广播音箱,酒店广播音箱,工厂办公室广播音箱

SV-7041T 30W网络有源音箱 校园教室广播音箱,商场广播音箱,会议广播音箱,酒店广播音箱,工厂办公室广播音箱 SV-7041T是深圳锐科达电子有限公司的一款2.0声道壁挂式网络有源音箱,具有10/100M以太网接口,可将…

如何使用GaussDB创建脱敏策略(MASKING POLICY)

目录 一、前言 二、GaussDB中的脱敏策略 1、数据脱敏的定义 2、创建脱敏策略的语法说明 三、在GaussDB中如何创建数据脱敏策略(示例) 1、创建脱敏策略的一般步骤 2、GaussDB数据库中创建脱敏策略的完整示例 1)开启安全策略开关,以初识用户omm登录…

工业异常检测AnomalyGPT-训练试跑及问题解决

写在前面,AnomalyGPT训练试跑遇到的坑大部分好解决,只有在保存模型失败的地方卡了一天才解决,本来是个小问题,昨天没解决的时候尝试放弃在单卡的4090上训练,但换一台机器又遇到了新的问题,最后决定还是回来…

GZ075 云计算应用赛题第8套

2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷8 某企业根据自身业务需求,实施数字化转型,规划和建设数字化平台,平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”,拟采用开源OpenSt…

Python轴承故障诊断 (11)基于VMD+CNN-BiGRU-Attenion的故障分类

目录 往期精彩内容: 前言 模型整体结构 1 变分模态分解VMD的Python示例 2 轴承故障数据的预处理 2.1 导入数据 2.2 故障VMD分解可视化 2.3 故障数据的VMD分解预处理 3 基于VMD-CNN-BiGRU-Attenion的轴承故障诊断分类 3.1 定义VMD-CNN-BiGRU-Attenion分类网…

基于51单片机的模拟量输入输出通道实验

实验一 模拟量输入输出通道实验(C51) 一、实验目的: 1、了解A/D、D/A转换的基本原理。 2、了解A/D转换芯片ADC0809、D/A转换芯片DAC0832的性能及编程方法。 3、掌握过程通道中A/D转换与D/A转换与计算机的接口方法。 4、了解计算机如何进…

Baumer工业相机堡盟工业相机如何联合NEOAPI SDK和OpenCV实现Mono12和Mono16位深度的图像保存(C#)

Baumer工业相机堡盟工业相机如何联合BGAPI SDK和OpenCVSharp实现Mono12和Mono16位深度的图像保存(C#) Baumer工业相机Baumer工业相机保存位深度12/16位图像的技术背景代码案例分享1:引用合适的类文件2:NEOAPI SDK联合OpenCV进行图…

Mysql-redoLog

Redo Log redo log进行刷盘的效率要远高于数据页刷盘,具体表现如下 redo log体积小,只记录了哪一页修改的内容,因此体积小,刷盘快 redo log是一直往末尾进行追加,属于顺序IO。效率显然比随机IO来的快Redo log 格式 在MySQL的InnoDB存储引擎中,redo log(重做日志)被用…

Python字符串

目录 Python字符串字符串字面量用字符串向变量赋值多行字符串字符串是数组字符串负的索引字符串长度 字符串方法strip()lower()upper()replace()split() 检查字符串字符串级联(串联)字符串格式字符串方法 Python字符串 Python的字符串是字符的序列&#…

【Spring 篇】深入解析SpringMVC的组件魅力

SpringMVC,这个名字在Java Web开发者的耳边仿佛是一首动听的旋律,携着轻盈的氛围,带给我们一种愉悦的编程体验。但是,当我们深入探寻这个框架时,它的魅力远不止表面的简单,它由许多组件构成,每个…

解决方案类常用网址

1.操作系统类(原版操作系统下载网址) https://next.itellyou.cn/ 之前的版本 https://msdn.itellyou.cn/ 2.ppt免费网站(不用注册) https://www.1ppt.com/

pandas查看数据常用方法(以excel为例)

目录 1.查看指定行数的数据head() 2. 查看数据表头columns 3.查看索引index 4.指定索引列index_col 5.按照索引排序 6.按照数据列排序sort_values() 7.查看每列数据类型dtypes 8.查看指定行列数据loc 9.查看数据是否为空isnull() 1.查看指定行数的数据head() &#xff…

CAN总线记录仪在车企服务站的应用

CAN总线记录仪在车企服务站的应用 CAN总线记录仪在车企服务站中有着广泛的应用。这种设备可以记录车上的CAN总线数据,方便工程师进行分析,以找出可能存在的问题。CAN记录仪一般采用TF卡来存储数据,实现离线脱机实时存储。数据存储完毕后&…