0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何通过立体视觉构建小巧轻便的深度感知系统

jf_pJlTbmA9 来源:jf_pJlTbmA9 作者:jf_pJlTbmA9 2023-07-13 16:49 次阅读

有多种 3D 传感器方案来实现深度感知系统,包括立体视觉相机、激光雷达和TOF(飞行时间)相机。每个选择都有其优缺点,其中,嵌入式深度感知立体系统成本低,坚固耐用,适合户外使用,并且能够提供高分辨率的彩色点云。

目前市场上有各种现成的立体感知系统。有时系统工程师需求根据精度、基线(两个相机间距)、视野和分辨率等因素,构建定制系统来满足特定的应用需求。

在本文中,我们首先介绍了立体视觉系统的主要部分,并提供了有关使用硬件组成和开源软件制作定制立体相机的说明。由于此设置专注于嵌入式系统,因此它将实时计算任何场景的深度图,而无需电脑主机。在另一篇文章中,我们将讨论如何在空间较少的情况下构建定制立体视觉系统,以便与电脑主机一起使用。

立体视觉概述

立体视觉是通过从两个视角比较场景中的信息,从数字图像中提取 3D 信息。物体在两个图像平面中的相对位置可提供关于物体距离相机的深度的信息。

立体视觉系统概述如图 1 所示,包括以下关键步骤:

校准:相机校准包括内部校准和外部校准。内部校准确定图像中心、焦距和失真参数,而外部校准确定相机的 3D 位置。这在许多计算机视觉应用中是至关重要的一步,尤其是在需要有关场景的计量信息(例如深度)时。我们将在下文第 5 节详细讨论校准步骤。

纠正:立体纠正是指将图像平面重新投影到与相机中心之间的线平行的公共平面上的过程。纠正后,对应点位于同一行,大大降低了匹配的成本和模糊度。此步骤在提供的代码中完成,用于构建您自己的系统。

立体匹配:这是指在左右图像之间匹配像素的过程,从而产生视差图像。提供的代码中将使用半全局匹配 (SGM) 算法来构建您自己的系统。

三角测量:三角测量是指在给定 3D 空间中的点投影到两个图像上的情况下确定该点的过程。视差图像将转换为 3D 点云。

1659575879153662.jpg

图 1:立体视觉系统概述

设计示例

我们来看一个立体声系统设计示例。以下是移动机器人在具有快速移动物体的动态环境中的应用要求。有关场景大小为 2 m,相机到场景的距离为 3 m,在 3 m 处所需的精度为 1 cm。

有关立体精度的更多详细信息,请参阅本文。深度误差由下式给出:ΔZ=Z²/Bf * Δd,这取决于以下因素:

Z 是范围

B 是基线

f 是以像素为单位的焦距,与相机视野和图像分辨率有关

有多种设计选项可以满足这些要求。根据上述场景大小和距离要求,我们可以确定特定传感器的镜头焦距。结合基线,我们可以使用上述公式计算 3 m 处的预期深度误差,以验证其是否满足精度要求。

图 2 显示了两个选项,使用基线较长的低分辨率相机或基线较短的高分辨率相机。第一个选项是较大的相机,但计算需求较低,而第二个选项是更紧凑的相机,但计算需求较高。对于此应用,我们选择了第二个选项,因为紧凑的尺寸更适合移动机器人,我们可以使用适用于 TX2 的 Quartet 嵌入式解决方案,该解决方案具有强大的板载 GPU 来满足处理需求。

1659575893537274.jpg

图 2:示例应用的立体声系统设计选项

硬件要求

在本例中,我们使用 IMX273 Sony Pregius 全局快门传感器将两台Blackfly S 板级160 万像素相机安装在 12 cm 基线处的 3D 印刷杆上。这两台相机都有类似的6 mm S 接口镜头。相机使用两条 FPC 电缆连接到“适用于 TX2 的 Quartet 嵌入式解决方案”定制载板。为了同步左右相机以同时捕捉图像,制作了一条连接两个相机的同步电缆。图 3 显示了我们定制的嵌入式立体声系统的前后视图。

1659575912563380.jpg

图 3:定制嵌入式立体声系统的前后视图

下表列出了所有硬件组件:

部件 说明 数量 链接方式
ACC-01-6005 带 8GB TX2 模块的 Quartet 载板 1 https://www.flir.com/products/quartet-embedded-solution-for-tx2/
BFS-U3-16S2C-BD2 160 万像素,226 FPS,Sony IMX273,彩色 2 https://www.flir.com/products/blackfly-s-board-level
ACC-01-5009 用于 BFS 彩色板级相机的 S 接口和红外滤光片 2 https://www.flir.com/products/s_mount-front
BW3M60B-1000 6 mm S 接口镜头 http://www.boowon.co.kr/site/down.asp?fileName=BW3M60B-1000.pdf
ACC-01-2401 用于板级 Blackfly S 的 15 cm FPC 线缆 2 https://www.flir.com/products/15-cm-fpc-cable-for-board-level-blackfly-s/
XHG302 NVIDIA® Jetson™ TX2/TX2 4GB/TX2i 主动式散热器 1 https://connecttech.com/product/nvidia-jetson-tx2-tx1-active-heat-sink/
同步电缆(自制) 1 https://www.flir.com/support-center/iis/machine-vision/application-note/configuring-synchronized-capture-with-multiple-cameras/
安装杆(自制) 1

应调整两个镜头,以将相机聚焦在您的应用所需的距离范围内。拧紧每个镜头上的螺钉(图 4 中以红色圈出)以保持对焦。

软件要求

a. Spinnaker

Teledyne FLIRSpinnaker SDK已预装在适用于 TX2 的 Quartet 嵌入式解决方案中。Spinnaker 需要与相机进行通信

b. 支持 CUDA 的 OpenCV 4.5.2

SGM(我们正在使用的立体匹配算法)需要 OpenCV 4.5.1 或更高版本。下载包含本文代码的 zip 文件,并将其解压缩到 StereoDepth 文件夹。安装 OpenCV 的脚本是 OpenCVInstaller.sh。在终端中键入以下命令:

cd ~/StereoDepth

chmod +x OpenCVInstaller.sh

./OpenCVInstaller.sh

安装程序将要求您输入管理员密码。安装程序将开始安装 OpenCV 4.5.2。下载和构建 OpenCV 可能需要几个小时。

校准

抓取和校准立体图像的代码可在 “Calibration” 文件夹中找到。使用 SpinView GUI 识别左右相机的序列号。在我们的设置中,右相机是主相机,左相机是从相机。将主从相机序列号复制到文件 grabStereoImages.cpp 第 60 和 61 行。在终端中使用以下命令构建可执行文件:

cd ~/StereoDepth/Calibration

mkdir build

mkdir -p images/{left, right}

cd build

cmake ..

make

从此链接打印出棋盘状图案,并将其贴在平面上用作校准目标。为了在校准时获得最佳效果,在 SpinView 中将 Exposure Auto 设置为 Off 并调整曝光,使棋盘状图案清晰且白色方块不会过度曝光,如图 5 所示。收集校准图像后,增益和曝光可在 SpinView 中设置为自动。

1659575936463260.jpg

图 5:SpinView GUI 设置

要开始收集图像,请键入

./grabStereoImages

代码应以大约 1 帧/秒的速度开始收集图像。左侧图像存储在 images/left 文件夹中,右侧图像存储在 images/right 文件夹中。移动目标,使其出现在图像的每个角落。您可以旋转目标,从近处和远处拍摄图像。默认情况下,该程序捕获 100 个图像对,但可以使用命令行参数进行更改:

./grabStereoImages 20

这将仅收集 20 对图像。请注意,这将覆盖之前写入文件夹中的所有图像。部分示例校准图像如图 6 所示。

收集图像后,通过键入以下内容运行校准 Python 代码:

cd ~/StereoDepth/Calibration

python cameraCalibration.py

这将生成 2 个名为 “intrinsics.yml” 和 “extrinsics.yml” 的文件,其中包含立体声系统的内部和外部参数。该代码默认采用 30mm 棋盘方格,但可以根据需要进行编辑。在校准结束时,它会显示 RMS 误差,表明校准的好坏。良好校准的典型 RMS 误差应低于 0.5 像素。

实时深度图

实时计算视差的代码位于 “Depth” 文件夹中。将相机序列号复制到文件 live_disparity.cpp 第 230 和 231 行。在终端中使用以下命令构建可执行文件:

cd ~/StereoDepth/Depth

mkdir build

cd build

cmake ..

make

将校准步骤中获得的 “intrinsics.yml” 和 “extrinsics.yml” 文件复制到此文件夹。要运行实时深度图演示,请键入

./live_disparity

它将显示左相机图像(原始未纠正图像)和深度图(我们的最终输出)。部分示例输出如图 7 所示。与相机的距离根据深度图右侧的图例进行颜色编码。深度图中的黑色区域意味着在该区域中没有发现视差数据。得益于 NVIDIA Jetson TX2 GPU,它在 1440 × 1080 的分辨率下可运行高达 5 帧/秒,在 720 × 540 的分辨率下可运行高达 13 帧/秒。

要查看特定点的深度,请在深度图中单击该点,深度将会显示出来,如图 7 中最后一个示例所示。

摘要

使用立体视觉来形成深度信息感知的优势众多,包括在户外工作良好,能够提供高分辨率的深度图,可通过低成本的现成组件制作。当您需要开发一个定制化的嵌入式立体感知系统,根据此处提供的说明进行操作,也将是一个相对简单的任务。
责任编辑:彭菁

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 3D
    3D
    +关注

    关注

    9

    文章

    2756

    浏览量

    106454
  • 开源软件
    +关注

    关注

    0

    文章

    204

    浏览量

    15661
  • 感知系统
    +关注

    关注

    1

    文章

    62

    浏览量

    15717
收藏 人收藏

    评论

    相关推荐

    如何通过立体视觉构建小巧轻便深度感知系统

    有多种 3D 传感器方案来实现深度感知系统,包括立体视觉相机、激光雷达和TOF(飞行时间)相机。每个选择都有其优缺点,其中,嵌入式深度
    的头像 发表于 08-23 16:45 1089次阅读
    如何<b class='flag-5'>通过</b><b class='flag-5'>立体视觉</b><b class='flag-5'>构建</b><b class='flag-5'>小巧</b><b class='flag-5'>轻便</b>的<b class='flag-5'>深度</b><b class='flag-5'>感知</b><b class='flag-5'>系统</b>

    双目立体视觉原理大揭秘(二)

    。基于双目立体视觉的三维重构其基本原理也是模拟人眼并利用空间几何模型推导出相应的算法来解决实际问题。本文以服装设计中关于人体轮廓还原案例做一说明。为了便于理解,本文仅说明案例中一个视角的双目系统,下图是已经
    发表于 11-21 16:22

    基于立体视觉的变形测量

    ` 本帖最后由 ketianjian 于 2016-3-3 10:01 编辑 关键词: 机器视觉;摄影测量;计算机视觉立体视觉;变形测量; 大家好!有一段时间没有跟大家分享交流机器视觉
    发表于 09-21 10:11

    双目立体视觉的运用

    高速相机对目标位进行摄像,充当人的双眼的功能,然后通过系统软件处理,可以确定任意物体的三维轮廓,还可以得到轮廓上任意点的三维坐标。基于双目立体视觉这种强大的技术功能,不但在军事科研上有所运用,如航天遥测
    发表于 03-03 09:36

    LABVIEW能做双目立体视觉

    最近在做一个双目立体视觉项目,LABVIEW有模块吗,有哪位大神用LABVIEW做过
    发表于 01-13 19:44

    采用OPT9221 ToF传感器设计的立体视觉深度感知电路

    成像对于许多机器人应用至关重要,能让机器人执行基本任务,躲避障碍物,进行导航以及确保基本安全。 显然,提供成像的方式是采用低成本视频摄像头,或者再好点,使用两个摄像头实现立体视野和深度感知。 但后者
    发表于 11-27 06:20

    双目立体视觉在嵌入式中有何应用

    双目立体视觉(BinocularStereoVision)是机器视觉的一种重要形式,因其可简单地利用左右摄像机中的图像信息计算得到相机视野中物体相对于摄像机的深度信息使得该技术拥有广泛的应用前景
    发表于 12-23 07:19

    基于HALCON的双目立体视觉系统实现

    双目立体视觉的研究一直是机器视觉中的热点和难点。使用双目立体视觉系统可以确定任意物体的三维轮廓,并且可以得到轮廓上任意点的三维坐标。因此双目立体视觉系统可以应用在
    发表于 04-08 17:51 130次下载
    基于HALCON的双目<b class='flag-5'>立体视觉系统</b>实现

    图像处理基本算法-立体视觉

    立体视觉是计算机视觉领域的一个重要课题,它的目的在于重构场景的三维几何信息。立体视觉的研究具有重要的应用价值,其应用包括移动机器人的自主导航系统,航空及遥感测量,工业自动化
    发表于 11-17 10:09 5215次阅读

    双相机立体视觉和结构光立体视觉原理及优势对比

    目前的深度相机根据其工作原理可以分为三种:TOF相机、双相机立体视觉、结构光投射立体视觉
    的头像 发表于 05-14 09:04 7659次阅读

    使用双目立体视觉实现CCD测距系统设计的资料说明

    的CCD测距技术。双目立体视觉的基本原理是模仿人眼与人类视觉立体感知过程,从两个视点观察同一景物,以获取不同视角下的感知图像,通过三角测量
    发表于 11-26 12:05 6次下载
    使用双目<b class='flag-5'>立体视觉</b>实现CCD测距<b class='flag-5'>系统</b>设计的资料说明

    如何使用FPGA实现微型实时多目立体视觉机的设计

    本文给出一种实时计算场景稠密深度图的多目立体视觉机设计与实现方法。立体视觉机使用多个微型摄像机同步获取场景图像,采用图像修正、LoG滤波、多立体图像对匹配和稠密
    发表于 04-02 09:33 21次下载
    如何使用FPGA实现微型实时多目<b class='flag-5'>立体视觉</b>机的设计

    边缘AI套件上的立体视觉深度感知

    电子发烧友网站提供《边缘AI套件上的立体视觉深度感知.zip》资料免费下载
    发表于 06-12 14:36 0次下载
    边缘AI套件上的<b class='flag-5'>立体视觉</b><b class='flag-5'>深度</b><b class='flag-5'>感知</b>

    立体视觉系统的设计方案

    电子发烧友网站提供《立体视觉系统的设计方案.pdf》资料免费下载
    发表于 11-06 10:17 0次下载
    <b class='flag-5'>立体视觉系统</b>的设计方案

    计算机视觉中的立体视觉深度感知Python示例实现

    在人工智能和图像处理的迷人世界中,这些概念在使机器能够像我们的眼睛一样感知我们周围的三维世界中起着关键作用。和我们一起探索立体视觉深度感知背后的技术,揭示计算机如何从二维图像中获得
    的头像 发表于 11-21 10:50 283次阅读