OpenCV立體圖像深度圖Depth Map基礎(chǔ)
目標(biāo)
在本節(jié)中,將學(xué)習(xí)
- 根據(jù)立體圖像創(chuàng)建深度圖
基礎(chǔ)
在上一節(jié)中,看到了對極約束和其他相關(guān)術(shù)語等基本概念。如果有兩個場景相同的圖像,則可以通過直觀的方式從中獲取深度信息。下面是一張圖片和一些簡單的數(shù)學(xué)公式證明了這種想法。

上圖包含等效三角形。編寫它們的等式將產(chǎn)生以下結(jié)果:

xxx和x′x'x′是圖像平面中與場景點(diǎn)3D相對應(yīng)的點(diǎn)與其相機(jī)中心之間的距離。BBB是兩個攝像機(jī)之間的距離(已知),fff是攝像機(jī)的焦距(已知)。簡而言之,上述方程式表示場景中某個點(diǎn)的深度與相應(yīng)圖像點(diǎn)及其相機(jī)中心的距離差成反比。因此,利用此信息,可以得出圖像中所有像素的深度。
因此,可以在兩個圖像之間先找到對應(yīng)的匹配項(xiàng)。一旦找到匹配項(xiàng),就能獲得深度(disparity)。
代碼
下面的代碼片段顯示創(chuàng)建視差圖的簡單過程。
import cv2
import numpy as np
from matplotlib import pyplot as plt
imgL = cv2.imread('tsukuba_l.png', 0)
imgR = cv2.imread('tsukuba_r.png', 0)
stereo = cv2.StereoBM_create(numDisparities=16, blockSize=15)
disparity = stereo.compute(imgL, imgR)
plt.subplot(131)
plt.imshow(imgL, 'gray')
plt.title('imgL')
plt.xticks([])
plt.yticks([])
plt.subplot(132)
plt.imshow(imgR, 'gray')
plt.title('imgR')
plt.xticks([])
plt.yticks([])
plt.subplot(133)
plt.imshow(disparity, 'gray')
plt.title('disparity')
plt.xticks([])
plt.yticks([])
plt.show()
下面的圖像包含原始圖像(左)及其視差圖(右)。如圖所見,結(jié)果受到高度噪聲的污染。通過
調(diào)整numDisparities和blockSize的值,可以獲得更好的結(jié)果。

當(dāng)熟悉StereoBM后,可以微調(diào)一些參數(shù)以獲得更好、更平滑的結(jié)果。部分參數(shù)如下所示:
texture_threshold:過濾出沒有足夠紋理的區(qū)域以獲得可靠匹配的區(qū)域
Speckle range 和 size:基于塊的匹配器通常會在對象邊界附近產(chǎn)生“斑點(diǎn)”,其中匹配窗口捕獲一側(cè)的前景和在另一場景中的背景,在此場景中,匹配器還在桌子上找到的小片虛假匹配。要擺脫這些問題,可以使用speckle_size和speckle_range參數(shù)來控制后處理的深度圖像。speckle_size是視差斑點(diǎn)下的像素?cái)?shù),speckle_range控制必須被視為相同斑點(diǎn)的一部分最近距離
Number of disparities:滑動窗口的像素?cái)?shù)。越大表明可見深度的范圍就越大,但是需要更多的計(jì)算代價,最大視差值與最小視差值之差, 窗口大小必須是16的整數(shù)倍,int 型
min_disparity:從開始搜索的左像素的x位置開始的偏移量
uniqueness_ratio:另一個后過濾步驟。如果最佳匹配視差不足夠好于搜索范圍中的所有其他視差,則將像素濾出。如果texture_threshold和斑點(diǎn)過濾仍在通過虛假匹配,則可以嘗試進(jìn)行調(diào)整
prefilter_size和prefilter_cap:預(yù)過濾階段,可標(biāo)準(zhǔn)化圖像亮度并增強(qiáng)紋理,以準(zhǔn)備塊匹配。通常,不需要調(diào)整這些參數(shù)
附加資源
Ros stereo img processing wiki page
以上就是OpenCV立體圖像深度圖Depth Map基礎(chǔ)的詳細(xì)內(nèi)容,更多關(guān)于OpenCV立體圖像深度圖的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python使用箱型圖剔除異常值的實(shí)現(xiàn)方法
python中的箱線圖可用于分析數(shù)據(jù)中的異常值,下面這篇文章主要給大家介紹了關(guān)于python使用箱型圖剔除異常值的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
python目標(biāo)檢測SSD算法訓(xùn)練部分源碼詳解
這篇文章主要為大家介紹了python目標(biāo)檢測SSD算法訓(xùn)練部分源碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
virtualenv隔離Python環(huán)境的問題解析
virtualenv為應(yīng)用提供了隔離的Python運(yùn)行環(huán)境,解決了不同應(yīng)用間多版本的沖突問題,這篇文章主要介紹了virtualenv隔離Python環(huán)境,需要的朋友可以參考下2022-06-06
python:刪除離群值操作(每一行為一類數(shù)據(jù))
這篇文章主要介紹了python:刪除離群值操作(每一行為一類數(shù)據(jù)),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
一個月入門Python爬蟲學(xué)習(xí),輕松爬取大規(guī)模數(shù)據(jù)
利用爬蟲我們可以獲取大量的價值數(shù)據(jù),從而獲得感性認(rèn)識中不能得到的信息,這篇文章給大家?guī)砹艘粋€月入門Python學(xué)習(xí),爬蟲輕松爬取大規(guī)模數(shù)據(jù),感興趣的朋友一起看看吧2018-01-01
matplotlib設(shè)置坐標(biāo)軸標(biāo)簽和間距的實(shí)現(xiàn)
本文主要介紹了matplotlib設(shè)置坐標(biāo)軸標(biāo)簽和間距的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10

