在人工智能和圖像處理的迷人世界中,這些概念在使機(jī)器能夠像我們的眼睛一樣感知我們周圍的三維世界中起著關(guān)鍵作用。和我們一起探索立體視覺和深度感知背后的技術(shù),揭示計(jì)算機(jī)如何從二維圖像中獲得深度、距離和空間理解的秘密。
計(jì)算機(jī)視覺中的立體視覺和深度感知是什么?
立體視覺和深度感知是計(jì)算機(jī)視覺中的重要概念,旨在模仿人類從視覺信息中感知深度和三維結(jié)構(gòu)的能力。它們通常用于機(jī)器人技術(shù)、自動(dòng)駕駛汽車和增強(qiáng)現(xiàn)實(shí)等應(yīng)用中。
立體視覺
立體視覺,也稱為立體視或雙目視覺,是一種通過(guò)捕獲和分析稍微分開放置的兩個(gè)或多個(gè)攝像頭的圖像來(lái)感知場(chǎng)景深度的技術(shù),模仿了人眼的工作方式。
立體視覺背后的基本原理是三角測(cè)量。當(dāng)兩個(gè)攝像頭(或“立體攝像頭”)從稍微不同的視點(diǎn)捕獲相同場(chǎng)景的圖像時(shí),生成的圖像對(duì)稱為立體對(duì),其中包含兩個(gè)圖像中相應(yīng)點(diǎn)的位置差異或差異。
通過(guò)分析這些差異,計(jì)算機(jī)視覺系統(tǒng)可以計(jì)算場(chǎng)景中物體的深度信息??拷鼣z像頭的物體將具有較大的差異,而遠(yuǎn)離攝像頭的物體將具有較小的差異。
立體視覺算法通常涉及諸如特征匹配、差異映射和極線幾何等技術(shù),以計(jì)算深度圖或場(chǎng)景的3D表示。
深度感知
計(jì)算機(jī)視覺中的深度感知是指系統(tǒng)能夠從單個(gè)或多個(gè)2D圖像或視頻幀中理解和估計(jì)3D場(chǎng)景中物體的距離能力。
除了立體視覺外,深度感知可以使用其他方法實(shí)現(xiàn),包括:
單眼線索:這些是可以在單個(gè)攝像頭或圖像中感知的深度線索。例如,透視、紋理梯度、陰影和遮擋等示例。即使在沒(méi)有立體視覺的情況下,這些線索也可以幫助估算深度。
LiDAR(光探測(cè)與測(cè)距):LiDAR傳感器使用激光束來(lái)測(cè)量場(chǎng)景中物體的距離,提供點(diǎn)云形式的精確深度信息。這些信息可以與視覺數(shù)據(jù)融合,以獲得更準(zhǔn)確的深度感知。
結(jié)構(gòu)光:結(jié)構(gòu)光涉及將已知圖案投射到場(chǎng)景上,并分析該圖案在場(chǎng)景中的物體上的變形。這種變形可用于計(jì)算深度信息。
飛行時(shí)間(ToF)攝像頭:ToF攝像頭測(cè)量光線從物體反射并返回到攝像頭所需的時(shí)間。這些信息用于估算深度。
在計(jì)算機(jī)視覺應(yīng)用中,深度感知對(duì)于障礙物避免、物體識(shí)別、3D重建和場(chǎng)景理解等任務(wù)至關(guān)重要。
計(jì)算機(jī)視覺中的立體視覺和深度感知組件
立體攝像頭:立體視覺依賴于兩個(gè)或多個(gè)相機(jī)(立體攝像頭),這些相機(jī)相距已知的距離放置。這些相機(jī)從稍微不同的視點(diǎn)捕獲相同場(chǎng)景的圖像,模擬人眼感知深度的方式。
圖像捕獲:相機(jī)捕獲場(chǎng)景的圖像或視頻幀。這些圖像通常被稱為左圖像(來(lái)自左相機(jī))和右圖像(來(lái)自右相機(jī))。
校準(zhǔn):為了準(zhǔn)確計(jì)算深度信息,必須對(duì)立體攝像頭進(jìn)行校準(zhǔn)。這個(gè)過(guò)程涉及確定攝像頭參數(shù),如內(nèi)在矩陣、畸變系數(shù)和外在參數(shù)(攝像頭之間的旋轉(zhuǎn)和平移)。校準(zhǔn)確保來(lái)自兩個(gè)相機(jī)的圖像能夠正確進(jìn)行校正和匹配。
校正:校正是應(yīng)用于捕獲的圖像的幾何變換,以對(duì)齊極線上的相應(yīng)特征。這通過(guò)使差異更可預(yù)測(cè)來(lái)簡(jiǎn)化立體匹配過(guò)程。
立體匹配:立體匹配是在左圖像和右圖像之間找到對(duì)應(yīng)點(diǎn)或匹配點(diǎn)的過(guò)程。用于計(jì)算每個(gè)像素的差異的像素值被稱為差異,表示圖像中特征的水平偏移。有各種立
體匹配算法可供選擇,包括塊匹配、半全局匹配和圖割,用于找到這些對(duì)應(yīng)點(diǎn)。
差異圖:差異圖是一幅灰度圖像,其中每個(gè)像素的強(qiáng)度值對(duì)應(yīng)于場(chǎng)景中該點(diǎn)的差異或深度。靠近相機(jī)的物體具有較大的差異,而遠(yuǎn)離相機(jī)的物體具有較小的差異。
深度圖:深度圖是通過(guò)使用已知的基線(相機(jī)之間的距離)和相機(jī)的焦距來(lái)從差異圖中導(dǎo)出的。它計(jì)算每個(gè)像素的實(shí)際世界單位(例如米)的深度,而不是差異。
可視化:深度和差異圖通常可視化,以提供場(chǎng)景的3D結(jié)構(gòu)的可讀人類表示。這些圖可以顯示為灰度圖像,也可以轉(zhuǎn)換為點(diǎn)云以進(jìn)行3D可視化。
一些硬件:除了攝像頭外,還可以使用深度感知攝像頭(例如Microsoft Kinect、Intel RealSense)或LiDAR(光探測(cè)與測(cè)距)傳感器等專用硬件來(lái)獲取深度信息。這些傳感器直接提供深度,無(wú)需立體匹配。
計(jì)算機(jī)視覺中的立體視覺和深度感知Python示例實(shí)現(xiàn)
import cv2 import numpy as np # Create two video capture objects for left and right cameras (adjust device IDs as needed) left_camera = cv2.VideoCapture(0) right_camera = cv2.VideoCapture(1) # Set camera resolution (adjust as needed) width = 640 height = 480 left_camera.set(cv2.CAP_PROP_FRAME_WIDTH, width) left_camera.set(cv2.CAP_PROP_FRAME_HEIGHT, height) right_camera.set(cv2.CAP_PROP_FRAME_WIDTH, width) right_camera.set(cv2.CAP_PROP_FRAME_HEIGHT, height) # Load stereo calibration data (you need to calibrate your stereo camera setup first) stereo_calibration_file = ‘stereo_calibration.yml’ calibration_data = cv2.FileStorage(stereo_calibration_file, cv2.FILE_STORAGE_READ) if not calibration_data.isOpened(): print(“Calibration file not found.”) exit() camera_matrix_left = calibration_data.getNode(‘cameraMatrixLeft’).mat() camera_matrix_right = calibration_data.getNode(‘cameraMatrixRight’).mat() distortion_coeff_left = calibration_data.getNode(‘distCoeffsLeft’).mat() distortion_coeff_right = calibration_data.getNode(‘distCoeffsRight’).mat() R = calibration_data.getNode(‘R’).mat() T = calibration_data.getNode(‘T’).mat() calibration_data.release() # Create stereo rectification maps R1, R2, P1, P2, Q, _, _ = cv2.stereoRectify( camera_matrix_left, distortion_coeff_left, camera_matrix_right, distortion_coeff_right, (width, height), R, T ) left_map1, left_map2 = cv2.initUndistortRectifyMap( camera_matrix_left, distortion_coeff_left, R1, P1, (width, height), cv2.CV_32FC1 ) right_map1, right_map2 = cv2.initUndistortRectifyMap( camera_matrix_right, distortion_coeff_right, R2, P2, (width, height), cv2.CV_32FC1 ) while True: # Capture frames from left and right cameras ret1, left_frame = left_camera.read() ret2, right_frame = right_camera.read() if not ret1 or not ret2: print(“Failed to capture frames.”) break # Undistort and rectify frames left_frame_rectified = cv2.remap(left_frame, left_map1, left_map2, interpolation=cv2.INTER_LINEAR) right_frame_rectified = cv2.remap(right_frame, right_map1, right_map2, interpolation=cv2.INTER_LINEAR) # Convert frames to grayscale left_gray = cv2.cvtColor(left_frame_rectified, cv2.COLOR_BGR2GRAY) right_gray = cv2.cvtColor(right_frame_rectified, cv2.COLOR_BGR2GRAY) # Perform stereo matching to calculate depth map (adjust parameters as needed) stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15) disparity = stereo.compute(left_gray, right_gray) # Normalize the disparity map for visualization disparity_normalized = cv2.normalize(disparity, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U) # Display the disparity map cv2.imshow(‘Disparity Map’, disparity_normalized) if cv2.waitKey(1) & 0xFF == ord(‘q’): break # Release resources left_camera.release() right_camera.release() cv2.destroyAllWindows()
注意:對(duì)于立體攝像頭設(shè)置,需要進(jìn)行攝像頭校準(zhǔn),并保存校準(zhǔn)數(shù)據(jù)在.yml文件中,將路徑放入示例代碼中。
應(yīng)用
通過(guò)立體視覺和深度感知獲得的深度信息可以用于各種計(jì)算機(jī)視覺應(yīng)用,包括:
3D場(chǎng)景重建
物體檢測(cè)和跟蹤
機(jī)器人和車輛的自主導(dǎo)航
增強(qiáng)現(xiàn)實(shí)和虛擬現(xiàn)實(shí)
手勢(shì)識(shí)別
限制
以下是一些主要的限制:
依賴于相機(jī)校準(zhǔn):立體視覺系統(tǒng)需要對(duì)所使用的攝像機(jī)進(jìn)行精確的校準(zhǔn)。準(zhǔn)確的校準(zhǔn)對(duì)于確保深度信息的正確計(jì)算至關(guān)重要。校準(zhǔn)中的任何錯(cuò)誤都可能導(dǎo)致深度感知不準(zhǔn)確。
有限的視場(chǎng)范圍:立體視覺系統(tǒng)的視場(chǎng)范圍有限,基于兩個(gè)攝像機(jī)之間的基線距離。這可能導(dǎo)致盲區(qū)或在兩個(gè)攝像機(jī)視場(chǎng)之外的對(duì)象的感知困難。
沒(méi)有紋理和特征的表面:立體匹配算法依賴于在左右圖像中找到對(duì)應(yīng)的特征。缺乏紋理或獨(dú)特特征的表面,如光滑的墻壁或均勻的背景,可能難以準(zhǔn)確匹配,導(dǎo)致深度估計(jì)錯(cuò)誤。
遮擋:在場(chǎng)景中相互遮擋的對(duì)象可能會(huì)對(duì)立體視覺造成困難。當(dāng)一個(gè)對(duì)象部分遮擋另一個(gè)對(duì)象時(shí),確定被遮擋區(qū)域的深度可能會(huì)有問(wèn)題。
有限的范圍和分辨率:隨著距離攝像機(jī)的增加,使用立體視覺感知深度的準(zhǔn)確性會(huì)減小。此外,深度測(cè)量的分辨率隨著距離的增加而減小,使遠(yuǎn)處物體的細(xì)節(jié)難以感知。
對(duì)光照條件敏感:光照條件的變化,如環(huán)境光的變化或陰影,可能會(huì)影響立體視覺的準(zhǔn)確性。不一致的光照條件可能會(huì)使左右圖像之間的對(duì)應(yīng)關(guān)系難以找到。
計(jì)算資源:立體匹配算法可能需要大量計(jì)算資源,特別是在處理高分辨率圖像或?qū)崟r(shí)視頻流時(shí)。實(shí)時(shí)應(yīng)用可能需要強(qiáng)大的硬件來(lái)進(jìn)行高效處理。
成本和復(fù)雜性:設(shè)置帶有校準(zhǔn)攝像機(jī)的立體視覺系統(tǒng)可能會(huì)昂貴且耗時(shí)。硬件要求,包括攝像機(jī)和校準(zhǔn)設(shè)備,可能會(huì)成為某些應(yīng)用的障礙。
透明或反光物體的不準(zhǔn)確性:透明或高反射表面可能會(huì)導(dǎo)致立體視覺中的錯(cuò)誤,因?yàn)檫@些材料可能不會(huì)以適合深度感知的方式反射光線。
動(dòng)態(tài)場(chǎng)景:立體視覺假定在圖像捕捉期間場(chǎng)景是靜態(tài)的。在具有移動(dòng)對(duì)象或攝像機(jī)運(yùn)動(dòng)的動(dòng)態(tài)場(chǎng)景中,維護(hù)左右圖像之間的對(duì)應(yīng)關(guān)系可能會(huì)很具挑戰(zhàn)性,導(dǎo)致深度估計(jì)不準(zhǔn)確。
有限的戶外使用:立體視覺系統(tǒng)在明亮陽(yáng)光下的戶外環(huán)境或缺乏紋理的場(chǎng)景中可能會(huì)遇到困難,如晴朗的天空。
總之,計(jì)算機(jī)視覺中的立體視覺和深度感知為機(jī)器與理解我們環(huán)境的三維豐富性互動(dòng)打開了新的可能性。正如我們?cè)诒疚闹兴接懙?,這些技術(shù)是從機(jī)器人和自動(dòng)駕駛車輛到增強(qiáng)現(xiàn)實(shí)和醫(yī)學(xué)成像等各種應(yīng)用的核心。
編輯:黃飛
-
圖像處理
+關(guān)注
關(guān)注
27文章
1329瀏覽量
58060 -
人工智能
+關(guān)注
關(guān)注
1807文章
49029瀏覽量
249584 -
立體視覺
+關(guān)注
關(guān)注
0文章
38瀏覽量
9944 -
計(jì)算機(jī)視覺
+關(guān)注
關(guān)注
9文章
1709瀏覽量
46781 -
python
+關(guān)注
關(guān)注
56文章
4827瀏覽量
86767
原文標(biāo)題:計(jì)算機(jī)視覺中的立體視覺和深度感知及示例
文章出處:【微信號(hào):vision263com,微信公眾號(hào):新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
如何通過(guò)立體視覺構(gòu)建小巧輕便的深度感知系統(tǒng)

雙目立體視覺原理大揭秘(二)
基于立體視覺的變形測(cè)量
雙目立體視覺的運(yùn)用
匯總 |計(jì)算機(jī)視覺系統(tǒng)學(xué)習(xí)資料下載 精選資料分享
深度學(xué)習(xí)與傳統(tǒng)計(jì)算機(jī)視覺簡(jiǎn)介
雙目立體視覺在嵌入式中有何應(yīng)用
圖像處理基本算法-立體視覺
計(jì)算機(jī)視覺與機(jī)器視覺區(qū)別
雙相機(jī)立體視覺和結(jié)構(gòu)光立體視覺原理及優(yōu)勢(shì)對(duì)比
使用雙目立體視覺實(shí)現(xiàn)CCD測(cè)距系統(tǒng)設(shè)計(jì)的資料說(shuō)明

雙目立體計(jì)算機(jī)視覺的立體匹配研究綜述

雙目立體視覺深度測(cè)量步驟介紹
關(guān)于雙目立體視覺的三大基本算法及發(fā)展現(xiàn)狀

評(píng)論