什么是SGBM
SGBM(Semi-Global Block Matching)是一種用于計(jì)算雙目視覺中視差(disparity)的半全局匹配算法,在OpenCV中的實(shí)現(xiàn)為semi-global block matching(SGBM)。它是基于全局匹配算法和局部匹配算法的優(yōu)缺點(diǎn),提出了一種折中的方法,既能保證視差圖的質(zhì)量,又能降低計(jì)算復(fù)雜度。
SGBM的原理
SGBM的原理可以分為以下幾個(gè)步驟:
預(yù)處理:使用水平Sobel算子對(duì)左右圖像進(jìn)行邊緣檢測(cè),得到梯度圖像。
匹配代價(jià)計(jì)算:對(duì)于每個(gè)像素,計(jì)算其在不同視差下與對(duì)應(yīng)像素的匹配代價(jià),通常使用絕對(duì)差或平方差作為代價(jià)函數(shù)。
能量函數(shù)最小化:對(duì)于每個(gè)像素,定義一個(gè)能量函數(shù),包括數(shù)據(jù)項(xiàng)和平滑項(xiàng)。數(shù)據(jù)項(xiàng)表示匹配代價(jià),平滑項(xiàng)表示相鄰像素的視差連續(xù)性。使用動(dòng)態(tài)規(guī)劃的方法,沿著多個(gè)方向(通常為8個(gè)或16個(gè))計(jì)算累積代價(jià),并求取最小值作為最終代價(jià)。
視差圖生成:對(duì)于每個(gè)像素,根據(jù)最終代價(jià)選擇最佳視差,并生成視差圖。
視差圖后處理:對(duì)于視差圖中的異常值或空洞,使用一些后處理方法進(jìn)行修復(fù)或填充,例如中值濾波、WLS濾波等。
SGBM的參數(shù)
SGBM的參數(shù)有以下幾個(gè):
minDisparity:最小視差值,默認(rèn)為0。
numDisparities:視差范圍,默認(rèn)為16。必須是16的整數(shù)倍。
blockSize:匹配塊大小,默認(rèn)為3。必須是奇數(shù)且大于1。
P1:控制視差平滑度的第一個(gè)參數(shù),默認(rèn)為8blockSizeblockSize。P1越大,越傾向于生成連續(xù)的視差圖。
P2:控制視差平滑度的第二個(gè)參數(shù),默認(rèn)為32blockSizeblockSize。P2越大,越傾向于消除小的視差變化。P2必須大于P1。
disp12MaxDiff:左右一致性檢查時(shí)允許的最大視差差異,默認(rèn)為-1,表示不進(jìn)行檢查。
preFilterCap:預(yù)處理時(shí)截?cái)嗵荻戎档纳舷?,默認(rèn)為63。
uniquenessRatio:唯一性檢查時(shí)的閾值,默認(rèn)為10。表示最佳視差值與次佳視差值之間的比例要大于該閾值才被認(rèn)為是有效的。
speckleWindowSize:消除噪聲斑點(diǎn)時(shí)考慮的窗口大小,默認(rèn)為0,表示不進(jìn)行消除。
speckleRange:消除噪聲斑點(diǎn)時(shí)考慮的最大視差變化,默認(rèn)為0,表示不進(jìn)行消除。
mode:SGBM算法選擇模式,默認(rèn)為StereoSGBM::MODE_SGBM??蛇x值有StereoSGBM::MODE_SGBM_3WAY(速度快)、StereoSGBM::MODE_HH4(速度慢)、StereoSGBM::MODE_SGBM(速度中等)、StereoSGBM::MODE_HH(速度慢)。
SGBM的參數(shù)變化
下面通過調(diào)整每個(gè)參數(shù)來觀察其影響效果:初始值設(shè)置:
minDisparity=0 numDisparities=16 blockSize=3 P1=8*blockSize*blockSize P2=32*blockSize*blockSize disp12MaxDiff=-1 preFilterCap=63 uniquenessRatio=10 speckleWindowSize=0 speckleRange=0
numDisparities:視差數(shù)量越多,能夠獲取到更多詳細(xì)的深度信息。但是,增加視差數(shù)量也會(huì)增加計(jì)算量,可能會(huì)導(dǎo)致較慢的運(yùn)行速度以及噪聲增多,且增大numDisparities會(huì)擴(kuò)大視差范圍,即視差圖中可以估計(jì)的深度范圍增大。如果增大的視差范圍超過了場(chǎng)景中實(shí)際的深度范圍,就會(huì)出現(xiàn)黑色區(qū)域。黑色區(qū)域表示無法進(jìn)行有效的匹配或估計(jì)深度。
minDisparity:最小視差越大,物體離相機(jī)近的程度就會(huì)變小。如果提高最小視差,則可能會(huì)使視差圖被高估,因?yàn)槲矬w不可能有大于最小視差的負(fù)的視差值。而如果最小視差過低,則可能會(huì)受到噪聲的影響,產(chǎn)生錯(cuò)誤的視差值。
blockSize:所選的窗口大小越大,所包含的像素就越多,從而產(chǎn)生更穩(wěn)定,但粗略的視差圖。減小塊大小,可以獲得反之,一些銳利但可能嘈雜(即不確定)的視差邊緣。
P1 和 P2:兩種參數(shù)都是控制視差變化規(guī)則的,從而使結(jié)果更平滑,增加這些值會(huì)使抗噪聲能力更強(qiáng)但同時(shí)會(huì)失去保留銳度的細(xì)節(jié)。如果P1和P2參數(shù)值過小,則會(huì)使視差圖中出現(xiàn)許多噪聲或未對(duì)齊的圖像。如果參數(shù)值太高,將導(dǎo)致平滑的結(jié)果,丟失更多的細(xì)節(jié)和銳度。
disp12MaxDiff:這個(gè)參數(shù)用于限制左右視圖之間的最大視差數(shù)量差異。增加這個(gè)值可能會(huì)導(dǎo)致插值和未對(duì)齊的像素點(diǎn)在圖像中顯示。但太小的值,則視差較光滑,缺少細(xì)節(jié)特征。
uniquenessRatio:這個(gè)參數(shù)是用來控制像素值的唯一性,如果唯一性比例越高,則得到的視差圖的噪聲和未對(duì)齊的像素會(huì)越小。但如果唯一性比例太高,則有可能會(huì)失去細(xì)節(jié)特征。
speckleWindowSize:這個(gè)參數(shù)被用來濾除孤立噪點(diǎn)或者離群值,如果窗口太小,則沒有過濾到足夠的噪聲點(diǎn)而窗口太大則會(huì)損失一些細(xì)節(jié)特征。
speckleRange:這個(gè)參數(shù)規(guī)定一個(gè)視差變化的閾值,如果發(fā)現(xiàn)視差變化超出了這個(gè)閾值,則這個(gè)像素應(yīng)該是一些無用的孤立像素。適當(dāng)調(diào)整該參數(shù)可以使其過濾掉孤立的雜點(diǎn)和噪聲。
preFilterCap:該參數(shù)控制了像素的最大值。如果已經(jīng)將值限制在負(fù)值的范圍內(nèi),那么它必須和像素值相比較,過濾掉那些值過大的像素點(diǎn)。
mode:SGBM算法的解釋模式,分別為SGBM,HHSGBM和SGBM_3WAY。這些模式包含了不同的參數(shù)設(shè)定,也會(huì)影響到視差圖的效果。
SGBM:這是默認(rèn)的解釋模式,也是最常用的模式。它代表了Semi-Global Block Matching (SGBM) 算法,該算法利用全局視差的一致性來獲得更準(zhǔn)確的視差圖。
HHSGBM:這代表了H.Hirschmüller的快速近似SGBM算法(H.Hirschmüller's Hierarchical Semi-Global Block Matching),是一種更快速的算法。它在速度上相對(duì)于標(biāo)準(zhǔn)SGBM算法有所優(yōu)化,但可能在某些情況下會(huì)犧牲一些準(zhǔn)確性。
SGBM_3WAY:這是一種三通道SGBM算法,它將輸入圖像的三個(gè)通道(BGR)分別作為獨(dú)立的視差圖像進(jìn)行處理。然后,將三個(gè)視差圖像中的像素最小化,從而得到最終的視差圖。這種方法可以改善處理彩色圖像時(shí)的準(zhǔn)確性。
—END—
審核編輯:劉清
-
濾波器
+關(guān)注
關(guān)注
161文章
7927瀏覽量
179630 -
OpenCV
+關(guān)注
關(guān)注
31文章
636瀏覽量
41815
原文標(biāo)題:SGBM你不知道的秘密:深入探討SGBM參數(shù)影響效果
文章出處:【微信號(hào):3D視覺工坊,微信公眾號(hào):3D視覺工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
深入探討DFM在PCB設(shè)計(jì)中的注意要點(diǎn)
stm32 uart硬件實(shí)現(xiàn)及深入探討(單片機(jī)通信學(xué)習(xí)連載4)
【原創(chuàng)】STM32 UART通信深入探討
【視頻】 stm32 uart硬件實(shí)現(xiàn)及深入探討3
【視頻】 stm32 uart硬件實(shí)現(xiàn)及深入探討4
基于OpenCV3.0的BM、SGBM和GC算法對(duì)比
深入探討人工智能的實(shí)際應(yīng)用

深入探討RF信號(hào)鏈
深入探討軟件定義架構(gòu)及其意義

深入探討Linux系統(tǒng)中的動(dòng)態(tài)鏈接庫機(jī)制

評(píng)論