前言
雙目立體視覺(jué),由兩個(gè)攝像頭組成,像人的眼睛能看到三維的物體,獲取物體長(zhǎng)度、寬度信息,和深度的信息;單目視覺(jué)獲取二維的物體信息,即長(zhǎng)度、寬度。
1)雙目攝像頭
雙目攝像頭示意圖(ORBBEC Gemini 3D傳感攝像頭是一款基于雙目結(jié)構(gòu)光3D成像技術(shù)的近距離高精度的嵌入式模組):

2)雙目相機(jī)基線
基線越大,測(cè)量范圍越遠(yuǎn);基線越小,測(cè)量范圍越近。

建議:
(1)基線距離是工作距離的08-2.2倍時(shí)測(cè)量誤差比較??;
(2)雙目立體視覺(jué)的結(jié)構(gòu)對(duì)稱時(shí),測(cè)量系統(tǒng)的誤差比較小,精度也比較高。
(3)兩臺(tái)相機(jī)的有效焦距∫越大,視場(chǎng)越小,視覺(jué)測(cè)量系統(tǒng)的測(cè)量精度越高(即采用長(zhǎng)焦距鏡頭容易獲得較高的測(cè)量精度)
3)打開雙目攝像頭
在OpenCV用使用雙目攝像頭,包括:打開單目攝像頭、設(shè)置攝像頭參數(shù)、拍照、錄制視頻。
環(huán)境編程語(yǔ)言:Python3 主要依賴庫(kù):OpenCV3.x 或 OpenCV4.x
雙目同步攝像頭,兩個(gè)鏡頭共用一個(gè)設(shè)備ID,左右攝像機(jī)同一頻率。這款攝像頭分辨率支持2560*960或以上。
思路流程:
1、由于兩個(gè)鏡頭共用一個(gè)設(shè)備ID,打開攝像頭時(shí)使用cv2.VideoCapture()函數(shù),只需打開一次。區(qū)別有的雙目攝像頭是左右鏡頭各用一個(gè)設(shè)備ID,需要打開兩次cv2.VideoCapture(0),cv2.VideoCapture(1)。
2、雙目攝像頭的總分辨率是由左右鏡頭組成的,比如:左右攝像機(jī)總分辨率1280x480;分割為左相機(jī)640x480、右相機(jī)640x480

為了方便理解畫了張草圖;圖中的“原點(diǎn)”是圖像像素坐標(biāo)系的原點(diǎn)。
3、分割后,左相機(jī)的分辨率:高度 0:480、寬度 0:640
右相機(jī)的分辨率:高度 0:480、寬度 640:1280
4、轉(zhuǎn)換為代碼后
#讀取攝像頭數(shù)據(jù)
ret, frame = camera.read()
#裁剪坐標(biāo)為[y0:y1, x0:x1] HEIGHT * WIDTH
left_frame = frame[0:480, 0:640]
right_frame = frame[0:480, 640:1280]
cv2.imshow("left", left_frame)
cv2.imshow("right", right_frame)
源代碼:
舉個(gè)栗子:打開分辨率1280x480的雙目攝像頭
#-*-coding:utf-8-*- import cv2 import time AUTO = False # 自動(dòng)拍照,或手動(dòng)按s鍵拍照 INTERVAL = 2 # 自動(dòng)拍照間隔 cv2.namedWindow("left") cv2.namedWindow("right") camera = cv2.VideoCapture(0) # 設(shè)置分辨率 左右攝像機(jī)同一頻率,同一設(shè)備ID;左右攝像機(jī)總分辨率1280x480;分割為兩個(gè)640x480、640x480 camera.set(cv2.CAP_PROP_FRAME_WIDTH,1280) camera.set(cv2.CAP_PROP_FRAME_HEIGHT,480) counter = 0 utc = time.time() folder = "./SaveImage/" # 拍照文件目錄 def shot(pos, frame): global counter path = folder + pos + "_" + str(counter) + ".jpg" cv2.imwrite(path, frame) print("snapshot saved into: " + path) while True: ret, frame = camera.read() # 裁剪坐標(biāo)為[y0:y1, x0:x1] HEIGHT*WIDTH left_frame = frame[0:480, 0:640] right_frame = frame[0:480, 640:1280] cv2.imshow("left", left_frame) cv2.imshow("right", right_frame) now = time.time() if AUTO and now - utc >= INTERVAL: shot("left", left_frame) shot("right", right_frame) counter += 1 utc = now key = cv2.waitKey(1) if key == ord("q"): break elif key == ord("s"): shot("left", left_frame) shot("right", right_frame) counter += 1 camera.release() cv2.destroyWindow("left") cv2.destroyWindow("right")
補(bǔ)充理解:
OpenCV有VideoCapture()函數(shù),能用來(lái)定義“攝像頭”對(duì)象,0表示第一個(gè)攝像頭(一般是電腦內(nèi)置的攝像頭);如果有兩個(gè)攝像頭,第二個(gè)攝像頭則對(duì)應(yīng)VideoCapture(1)。
在while循環(huán)中使用“攝像頭對(duì)象”的read()函數(shù)一幀一幀地讀取攝像頭畫面數(shù)據(jù)。
imshow函數(shù)是顯示攝像頭的某幀畫面;cv2.waitKey(1)是等待1ms,如果期間檢測(cè)到了鍵盤輸入q,則退出while循環(huán)。
效果:

4)雙目測(cè)距
原理:
通過(guò)對(duì)兩幅圖像視差的計(jì)算,直接對(duì)圖像所拍攝到的范圍進(jìn)行距離測(cè)量,無(wú)需判斷前方出現(xiàn)的是什么類型的障礙物。

視差disparity:
首先看一組視覺(jué)圖:左相機(jī)圖和右相機(jī)圖不是完全一致的,通過(guò)計(jì)算兩者的差值,形成視差,生成視差圖(也叫:深度圖)

視差是同一個(gè)空間點(diǎn)在兩個(gè)相機(jī)成像中對(duì)應(yīng)的x坐標(biāo)的差值;
它可以通過(guò)編碼成灰度圖來(lái)反映出距離的遠(yuǎn)近,離鏡頭越近的灰度越亮;

我們觀察一下,看到臺(tái)燈在前面,離雙目相機(jī)比較近,在灰度圖呈現(xiàn)比較亮;攝影機(jī)及支架在后方,離雙目相機(jī)比較遠(yuǎn),在灰度圖呈現(xiàn)比較暗。
補(bǔ)充理解:
由立體視覺(jué)系統(tǒng)測(cè)量的深度被離散成平行平面 (每個(gè)視差值一個(gè)對(duì)應(yīng)一個(gè)平面)

給定具有基線 b 和焦距 f 的立體裝備, 系統(tǒng)的距離場(chǎng)受視差范圍[dmin ,dmax]的約束。
極線約束:
極線約束(Epipolar Constraint)是指當(dāng)空間點(diǎn)在兩幅圖像上分別成像時(shí),已知左圖投影點(diǎn)p1,那么對(duì)應(yīng)右圖投影點(diǎn)p2一定在相對(duì)于p1的極線上,這樣可以極大的縮小匹配范圍。

標(biāo)準(zhǔn)形式的雙目攝像頭,左右相機(jī)對(duì)齊,焦距相同。

如果不是標(biāo)準(zhǔn)形式的雙目攝像頭呢?哦,它是是這樣的:(需要極線校正/立體校正)

極線校正/立體校正

雙目測(cè)距流程:
a.雙目標(biāo)定
主要是獲取內(nèi)參(左攝像頭內(nèi)參+右攝像頭內(nèi)參)、外參(左右攝像頭之間平移向量+旋轉(zhuǎn)矩陣)
標(biāo)定過(guò)程:

b.雙目矯正
消除鏡頭變形,將立體相機(jī)對(duì)轉(zhuǎn)換為標(biāo)準(zhǔn)形式

c.立體匹配
尋找左右相機(jī)對(duì)應(yīng)的點(diǎn)(同源點(diǎn))

d.雙目測(cè)距(三角測(cè)量)
給定視差圖、基線和焦距,通過(guò)三角計(jì)算在3D中對(duì)應(yīng)的位置

雙目測(cè)距原理

e.測(cè)距效果

彩蛋:雙目立體匹配(重點(diǎn))
立體匹配是雙目立體視覺(jué)中比較重要的一環(huán),往往這里做研究和優(yōu)化。

a.立體匹配流程

b.匹配代價(jià)計(jì)算
代價(jià)函數(shù)用于計(jì)算左、右圖中兩個(gè)像素之間的匹配代價(jià)(cost)。cost越大,表示這兩個(gè)像素為對(duì)應(yīng)點(diǎn)的可能性越低。

常用代價(jià)函數(shù)
AD/BT
AD+Gradient
Census transform
SAD/SSD
NCC
AD+Census
CNN
c.立體匹配

端到端視差計(jì)算網(wǎng)絡(luò)
? Disp-Net (2016)
? GC-Net (2017)
? iRestNet (2018)
? PSM-Net (2018)
? Stereo-Net (2018)
? GA-Net (2019)
? EdgeStereo (2020)

立體視覺(jué)方法評(píng)測(cè)網(wǎng)站
ETH3Dhttps://www.eth3d.net/
Kitti Stereohttp://www.cvlibs.net/datasets/kitti/eval_scene_flow.php?benchmark=stereo
Middlebury Stereo 3.0https://vision.middlebury.edu/stereo/eval3/

雙目測(cè)距總結(jié)
優(yōu)勢(shì):
(1)成本比單目系統(tǒng)要高,但尚處于可接受范圍內(nèi),并且與激光雷達(dá)等方案相比成本較低;
(2)沒(méi)有識(shí)別率的限制,因?yàn)閺脑砩蠠o(wú)需先進(jìn)行識(shí)別再進(jìn)行測(cè)算,而是對(duì)所有障礙物直接進(jìn)行測(cè)量;
(3)直接利用視差計(jì)算距離,精度比單目高;
(4)無(wú)需維護(hù)樣本數(shù)據(jù)庫(kù),因?yàn)閷?duì)于雙目沒(méi)有樣本的概念。
難點(diǎn):
(1)計(jì)算量大,對(duì)計(jì)算單元的性能要求高,這使得雙目系統(tǒng)的產(chǎn)品化、小型化的難度較;(芯片或FPGA)
(2)雙目的配準(zhǔn)效果,直接影響到測(cè)距的準(zhǔn)確性;
(3)對(duì)環(huán)境光照非常敏感;(光照角度、光照強(qiáng)度)
(4)不適用于單調(diào)缺乏紋理的場(chǎng)景;(天空、白墻、沙漠)
(5)相機(jī)基線限制了測(cè)量范圍。(基線越大,測(cè)量范圍越遠(yuǎn);基線越小,測(cè)量范圍越近)
審核編輯 :李倩
-
成像技術(shù)
+關(guān)注
關(guān)注
4文章
309瀏覽量
32220 -
攝像頭
+關(guān)注
關(guān)注
61文章
5091瀏覽量
103109 -
結(jié)構(gòu)光
+關(guān)注
關(guān)注
0文章
74瀏覽量
13687
發(fā)布評(píng)論請(qǐng)先 登錄
雙目立體視覺(jué)原理大揭秘(一)
雙目立體視覺(jué)原理大揭秘(二)
基于立體視覺(jué)的變形測(cè)量
維視雙目產(chǎn)品在高??蒲袘?yīng)用中的實(shí)例及優(yōu)點(diǎn)分析
雙目立體視覺(jué)的運(yùn)用
雙目立體視覺(jué)在嵌入式中有何應(yīng)用
雙目立體視覺(jué)中靶標(biāo)的設(shè)計(jì)與識(shí)別
基于HALCON的雙目立體視覺(jué)系統(tǒng)實(shí)現(xiàn)
三維立體視覺(jué)技術(shù)的應(yīng)用及其三維恢復(fù)方法介紹
雙目主動(dòng)立體視覺(jué)監(jiān)測(cè)平臺(tái)靶標(biāo)編碼標(biāo)志點(diǎn)的設(shè)計(jì)與識(shí)別分析
重慶鉅芯視覺(jué)科技發(fā)布國(guó)內(nèi)首款智能雙目立體視覺(jué)芯片
使用雙目立體視覺(jué)實(shí)現(xiàn)CCD測(cè)距系統(tǒng)設(shè)計(jì)的資料說(shuō)明
一篇文章帶你認(rèn)識(shí)《雙目立體視覺(jué)》
三維立體視覺(jué)之三維恢復(fù)方法
檢測(cè)三維物體?一篇文章認(rèn)識(shí)《雙目立體視覺(jué)》
評(píng)論