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

news2024/11/18 3:47:34

编辑: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.coloradmin.cn/o/1376169.html

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

相关文章

ArchVizPRO Interior Vol.8 URP

ArchVizPRO Interior Vol.8 URP是一个在URP中制作的建筑可视化项目。这是一个完全可导航的现代公寓,包括一个带开放式厨房的客厅、休息区、两间卧室和两间浴室。从头开始构建每一个细节,这个室内有130多件家具和道具、自定义着色器和4K纹理。所有家具和道具都非常详细,可以在…

vue的mvvm模式

1.mvvm优点: 低耦合:视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的View上,当View变化的时候Model可以不变,当Model变化的时候,View也可以不变。 可复用&…

2024.1.12每日一题

LeetCode 2085.统计出现过一次的公共字符串 2085. 统计出现过一次的公共字符串 - 力扣(LeetCode) 题目描述 给你两个字符串数组 words1 和 words2 ,请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。 示例 1: 输…

oracle 19c容器数据库data dump数据泵传输数据(2)---11g导19c

目录 1.在11gnon-cdb数据库中创建测试用户 2.在19cCDB容器数据库中新建pdb2 3.执行命令导出 4.执行命令导入 Exporting from a Non-CDB and Importing into a PDB 我們要記住一点:如果是全库导出导入的话,目标数据库没有的表空间我们要事先创建&#…

86.乐理基础-记号篇-速度记号

内容来源于:三分钟音乐社 上一个内容:85.乐理基础-记号篇-力度记号-CSDN博客 速度记号在下方两个里面已经写过一部分了,这些标记总体上是属于 不变速度 的标记,比如一首乐谱就记了 每分钟60拍,那整首速度就都是不变的…

GEE数据集——2000 年至 2022 年与传感器无关的 MODIS 和 VIIRS LAI/FPAR CDR

2000 年至 2022 年与传感器无关的 MODIS 和 VIIRS LAI/FPAR CDR 该地理空间数据集包含关键的生物物理参数,即叶面积指数(LAI)和光合有效辐射分量(FPAR),是描述陆地生态系统特征不可或缺的参数。该数据集解…

Pinpoint 报告:2023年网安产业投资总额减少40%

根据网络招聘公司 Pinpoint Search Group 所作的报告,2023 年度网络安全行业共进行了 346 轮融资和 91 笔并购 (M&A) 交易。其中投资总额为 87 亿美元,比2022年的 145 亿美元减少了 40%。 这些数字也反映在 2023 年第四季度,网络安全公司…

【Java 干货教程】Java实现分页的几种方式详解

一、前言 无论是自我学习中,还是在工作中,固然会遇到与前端搭配实现分页的功能,发现有几种方式,特此记录一下。 二、实现方式 2.1、分页功能直接交给前端实现 这种情况也是有的,(根据业务场景且仅仅只能用于数据量…

【深度学习目标检测】十三、基于深度学习的血细胞识别(python,目标检测,yolov8)

血细胞计数是医学上一种重要的检测手段,用于评估患者的健康状况,诊断疾病,以及监测治疗效果。而目标检测是一种计算机视觉技术,用于在图像中识别和定位特定的目标。在血细胞计数中,目标检测技术可以发挥重要作用。 首先…

数据在内存中的存储(C语言)

​ ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ ​ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 ​ 所属专栏:C语言学习 ​ 贝蒂的主页:Betty‘s blog 引言 ​ 我们早就学完基本的数据类型,那这些数据类型…

Linux系统的由来、特点、以及发行版本

Linux系统 Linux 系统主要被应用于服务器端、嵌入式开发和 PC 桌面 3 大领域,其中服务器端领域是重中之重。例如,我们熟知的大型、超大型互联网企业(百度、腾讯、Sina、阿里等)都在使用Linux 系统作为其服务器端的程序运行平台&a…

记录一次华为云服务器扩容系统磁盘

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 1. 扩容步骤 1.1 在华为云控制台操作磁盘扩容 1.2 服务器上操作扩容步骤 1)fdisk -l 查看扩容情况,确认…

深入探讨:开发连锁餐饮APP的关键技术要点

时下,开发一款功能强大、用户友好的连锁餐饮APP成为许多餐饮企业的当务之急。在本文中,我们将深入探讨开发连锁餐饮APP的关键技术要点,涵盖了前端、后端以及数据库等方面。 一、前端开发 前端是用户与APP交互的入口,因此设计良好…

锂电池的电压和容量怎么计算?

锂电池组是由电池单体(电芯)通过串并联来组成 1、串联(S)增加电压,容量不变。 例如:1个磷酸铁锂电池的额定电压为3.2V,容量为4000mAH,将10个磷酸铁锂电芯串联,电池组电压:3.2v*10&a…

pytorch11:模型加载与保存、finetune迁移训练

目录 一、模型加载与保存1.1 序列化与反序列化概念1.2 pytorch中的序列化与反序列化1.3 模型保存的两种方法1.4 模型加载两种方法 二、断点训练2.1 断点保存代码2.2 断点恢复代码 三、finetune3.1 迁移学习3.2 模型的迁移学习3.2 模型微调步骤3.2.1 模型微调步骤3.2.2 模型微调…

编码器与解码器LLM全解析:掌握NLP核心技术的关键!

让我们深入了解:基于编码器和基于解码器的模型有什么区别? 编码器与解码器风格的Transformer 从根本上说,编码器和解码器风格的架构都使用相同的自注意力层来编码词汇标记。然而,主要区别在于编码器旨在学习可以用于各种预测建模…

BP神经网络(公式推导+举例应用)

文章目录 引言M-P神经元模型激活函数多层前馈神经网络误差逆传播算法缓解过拟合化结论实验分析 引言 人工神经网络(Artificial Neural Networks,ANNs)作为一种模拟生物神经系统的计算模型,在模式识别、数据挖掘、图像处理等领域取…

TYPE-C接口取电芯片介绍和应用场景

随着科技的发展,USB PDTYPE-C已经成为越来越多设备的充电接口。而在这一领域中,LDR6328Q PD取电芯片作为设备端协议IC芯片,扮演着至关重要的角色。本文将详细介绍LDR6328Q PD取电芯片的工作原理、应用场景以及选型要点。 一、工作原理 LDR63…

MySQL——性能优化与关系型数据库

文章目录 什么是性能?什么是关系型数据库?数据库设计范式 常见的数据库SQL语言结构化查询语言的六个部分版本 MySQL数据库故事历史版本5.6/5.7差异5.7/8.0差异 什么是性能? 吞吐与延迟:有些结论是反直觉的,指导我们关…

芯课堂 | 如何配置SWM系列系统时钟?

如何配置SWM系列 系统时钟? 华芯微特科技有限公司SWM系列芯片可通过软件配置改变时钟的速度,可以让我们的设计更加灵活,频率可选空间也更加广泛,用户可以根据自己的实际需求配置需要的系统时钟。为了让用户能够更简单的使用这一功能&#xf…