<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 物聯(lián)網(wǎng)與傳感器 > 設(shè)計應(yīng)用 > 如何通過立體視覺構(gòu)建小巧輕便的深度感知系統(tǒng)

          如何通過立體視覺構(gòu)建小巧輕便的深度感知系統(tǒng)

          作者:Teledyne Flir 時間:2022-08-03 來源:電子產(chǎn)品世界 收藏

          image.png

          本文引用地址:http://www.ex-cimer.com/article/202208/436957.htm

          有多種 3D 傳感器方案來實(shí)現(xiàn)系統(tǒng),包括相機(jī)、激光雷達(dá)和TOF(飛行時間)相機(jī)。每個選擇都有其優(yōu)缺點(diǎn),其中,嵌入式立體系統(tǒng)成本低,堅(jiān)固耐用,適合戶外使用,并且能夠提供高分辨率的彩色點(diǎn)云。


          目前市場上有各種現(xiàn)成的立體感知系統(tǒng)。有時系統(tǒng)工程師需求根據(jù)精度、基線(兩個相機(jī)間距)、視野和分辨率等因素,構(gòu)建定制系統(tǒng)來滿足特定的應(yīng)用需求。


          在本文中,我們首先介紹了系統(tǒng)的主要部分,并提供了有關(guān)使用硬件組成和開源軟件制作定制立體相機(jī)的說明。由于此設(shè)置專注于嵌入式系統(tǒng),因此它將實(shí)時計算任何場景的深度圖,而無需電腦主機(jī)。在另一篇文章中,我們將討論如何在空間較少的情況下構(gòu)建定制系統(tǒng),以便與電腦主機(jī)一起使用。


          立體視覺概述

          立體視覺是通過從兩個視角比較場景中的信息,從數(shù)字圖像中提取 3D 信息。物體在兩個圖像平面中的相對位置可提供關(guān)于物體距離相機(jī)的深度的信息。


          立體視覺系統(tǒng)概述如圖 1 所示,包括以下關(guān)鍵步驟:


          1. 校準(zhǔn):相機(jī)校準(zhǔn)包括內(nèi)部校準(zhǔn)和外部校準(zhǔn)。內(nèi)部校準(zhǔn)確定圖像中心、焦距和失真參數(shù),而外部校準(zhǔn)確定相機(jī)的 3D 位置。這在許多計算機(jī)視覺應(yīng)用中是至關(guān)重要的一步,尤其是在需要有關(guān)場景的計量信息(例如深度)時。我們將在下文第 5 節(jié)詳細(xì)討論校準(zhǔn)步驟。


          2.糾正:立體糾正是指將圖像平面重新投影到與相機(jī)中心之間的線平行的公共平面上的過程。糾正后,對應(yīng)點(diǎn)位于同一行,大大降低了匹配的成本和模糊度。此步驟在提供的代碼中完成,用于構(gòu)建您自己的系統(tǒng)。


          3.立體匹配:這是指在左右圖像之間匹配像素的過程,從而產(chǎn)生視差圖像。提供的代碼中將使用半全局匹配 (SGM) 算法來構(gòu)建您自己的系統(tǒng)。


          4.三角測量:三角測量是指在給定 3D 空間中的點(diǎn)投影到兩個圖像上的情況下確定該點(diǎn)的過程。視差圖像將轉(zhuǎn)換為 3D 點(diǎn)云。


          image.png


          設(shè)計示例

          我們來看一個立體聲系統(tǒng)設(shè)計示例。以下是移動機(jī)器人在具有快速移動物體的動態(tài)環(huán)境中的應(yīng)用要求。有關(guān)場景大小為 2 m,相機(jī)到場景的距離為 3 m,在 3 m 處所需的精度為 1 cm。


          有關(guān)立體精度的更多詳細(xì)信息,請參閱本文。深度誤差由下式給出:ΔZ=Z2/Bf * Δd,這取決于以下因素:


          ● Z 是范圍


          ● B 是基線


          ● f 是以像素為單位的焦距,與相機(jī)視野和圖像分辨率有關(guān)


          有多種設(shè)計選項(xiàng)可以滿足這些要求。根據(jù)上述場景大小和距離要求,我們可以確定特定傳感器的鏡頭焦距。結(jié)合基線,我們可以使用上述公式計算 3 m 處的預(yù)期深度誤差,以驗(yàn)證其是否滿足精度要求。


          圖 2 顯示了兩個選項(xiàng),使用基線較長的低分辨率相機(jī)或基線較短的高分辨率相機(jī)。第一個選項(xiàng)是較大的相機(jī),但計算需求較低,而第二個選項(xiàng)是更緊湊的相機(jī),但計算需求較高。對于此應(yīng)用,我們選擇了第二個選項(xiàng),因?yàn)榫o湊的尺寸更適合移動機(jī)器人,我們可以使用適用于 TX2 的 Quartet 嵌入式解決方案,該解決方案具有強(qiáng)大的板載 GPU 來滿足處理需求。

          image.png


          硬件要求

          在本例中,我們使用 IMX273 Sony Pregius 全局快門傳感器將兩臺 Blackfly S 板級 160 萬像素相機(jī)安裝在 12 cm 基線處的 3D 印刷桿上。這兩臺相機(jī)都有類似的 6 mm S 接口鏡頭。相機(jī)使用兩條 FPC 電纜連接到“適用于 TX2 的 Quartet 嵌入式解決方案”定制載板。為了同步左右相機(jī)以同時捕捉圖像,制作了一條連接兩個相機(jī)的同步電纜。圖 3 顯示了我們定制的嵌入式立體聲系統(tǒng)的前后視圖。

          image.png


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

          image.pngimage.png


          應(yīng)調(diào)整兩個鏡頭,以將相機(jī)聚焦在您的應(yīng)用所需的距離范圍內(nèi)。擰緊每個鏡頭上的螺釘(圖 4 中以紅色圈出)以保持對焦。

          image.png

          圖 4:顯示鏡頭螺釘?shù)牧Ⅲw聲系統(tǒng)側(cè)視圖


          軟件要求

          a. Spinnaker

          Teledyne FLIR Spinnaker SDK 已預(yù)裝在適用于 TX2 的 Quartet 嵌入式解決方案中。Spinnaker 需要與相機(jī)進(jìn)行通信。


          b. 支持 CUDA 的 OpenCV 4.5.2

          SGM(我們正在使用的立體匹配算法)需要 OpenCV 4.5.1 或更高版本。下載包含本文代碼的 zip 文件,并將其解壓縮到 StereoDepth 文件夾。安裝 OpenCV 的腳本是 OpenCVInstaller.sh。在終端中鍵入以下命令:


          cd ~/StereoDepth

          chmod +x OpenCVInstaller.sh

          ./OpenCVInstaller.sh


          安裝程序?qū)⒁竽斎牍芾韱T密碼。安裝程序?qū)㈤_始安裝 OpenCV 4.5.2。下載和構(gòu)建 OpenCV 可能需要幾個小時。


          校準(zhǔn)

          抓取和校準(zhǔn)立體圖像的代碼可在 “Calibration” 文件夾中找到。使用 SpinView GUI 識別左右相機(jī)的序列號。在我們的設(shè)置中,右相機(jī)是主相機(jī),左相機(jī)是從相機(jī)。將主從相機(jī)序列號復(fù)制到文件 grabStereoImages.cpp 第 60 和 61 行。在終端中使用以下命令構(gòu)建可執(zhí)行文件:


          cd ~/StereoDepth/Calibration

          mkdir build

          mkdir -p images/{left, right}

          cd build

          cmake ..

          make


          從此鏈接打印出棋盤狀圖案,并將其貼在平面上用作校準(zhǔn)目標(biāo)。為了在校準(zhǔn)時獲得最佳效果,在 SpinView 中將 Exposure Auto 設(shè)置為 Off 并調(diào)整曝光,使棋盤狀圖案清晰且白色方塊不會過度曝光,如圖 5 所示。收集校準(zhǔn)圖像后,增益和曝光可在 SpinView 中設(shè)置為自動。

          image.png

          要開始收集圖像,請鍵入


          ./grabStereoImages


          代碼應(yīng)以大約 1 幀/秒的速度開始收集圖像。左側(cè)圖像存儲在 images/left 文件夾中,右側(cè)圖像存儲在 images/right 文件夾中。移動目標(biāo),使其出現(xiàn)在圖像的每個角落。您可以旋轉(zhuǎn)目標(biāo),從近處和遠(yuǎn)處拍攝圖像。默認(rèn)情況下,該程序捕獲 100 個圖像對,但可以使用命令行參數(shù)進(jìn)行更改:


          ./grabStereoImages 20


          這將僅收集 20 對圖像。請注意,這將覆蓋之前寫入文件夾中的所有圖像。部分示例校準(zhǔn)圖像如圖 6 所示。


          image.png


          收集圖像后,通過鍵入以下內(nèi)容運(yùn)行校準(zhǔn) Python 代碼:


          cd ~/StereoDepth/Calibration

          python cameraCalibration.py


          這將生成 2 個名為 “intrinsics.yml” 和 “extrinsics.yml” 的文件,其中包含立體聲系統(tǒng)的內(nèi)部和外部參數(shù)。該代碼默認(rèn)采用 30mm 棋盤方格,但可以根據(jù)需要進(jìn)行編輯。在校準(zhǔn)結(jié)束時,它會顯示 RMS 誤差,表明校準(zhǔn)的好壞。良好校準(zhǔn)的典型 RMS 誤差應(yīng)低于 0.5 像素。


          實(shí)時深度圖

          實(shí)時計算視差的代碼位于 “Depth” 文件夾中。將相機(jī)序列號復(fù)制到文件 live_disparity.cpp 第 230 和 231 行。在終端中使用以下命令構(gòu)建可執(zhí)行文件:


          cd ~/StereoDepth/Depth

          mkdir build

          cd build

          cmake ..

          make


          將校準(zhǔn)步驟中獲得的 “intrinsics.yml” 和 “extrinsics.yml” 文件復(fù)制到此文件夾。要運(yùn)行實(shí)時深度圖演示,請鍵入


          ./live_disparity


          它將顯示左相機(jī)圖像(原始未糾正圖像)和深度圖(我們的最終輸出)。部分示例輸出如圖 7 所示。與相機(jī)的距離根據(jù)深度圖右側(cè)的圖例進(jìn)行顏色編碼。深度圖中的黑色區(qū)域意味著在該區(qū)域中沒有發(fā)現(xiàn)視差數(shù)據(jù)。得益于 NVIDIA Jetson TX2 GPU,它在 1440 × 1080 的分辨率下可運(yùn)行高達(dá) 5 幀/秒,在 720 × 540 的分辨率下可運(yùn)行高達(dá) 13 幀/秒。


          要查看特定點(diǎn)的深度,請?jiān)谏疃葓D中單擊該點(diǎn),深度將會顯示出來,如圖 7 中最后一個示例所示。


          image.png

          圖 7:對左相機(jī)圖像和相應(yīng)的深度圖進(jìn)行采樣。底部深度圖還會顯示特定點(diǎn)的深度。


          摘要

          使用立體視覺來形成深度信息感知的優(yōu)勢眾多,包括在戶外工作良好,能夠提供高分辨率的深度圖,可通過低成本的現(xiàn)成組件制作。當(dāng)您需要開發(fā)一個定制化的嵌入式立體感知系統(tǒng),根據(jù)此處提供的說明進(jìn)行操作,也將是一個相對簡單的任務(wù)。




          關(guān)鍵詞: 立體視覺 深度感知

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();