運用OpenCV進行雙目匹配時各引數的意義

2021-06-18 01:56:27 字數 1312 閱讀 7356

在進行雙目匹配的過程中發現匹配引數對最後得到的視差的結果有很大的影響。但是對各引數的意義本人卻不是很明白。看了鄒宇華老師的文章後有點感覺了,特此把這部分摘錄出來研究下。

opencv中雙目匹配演算法有:

1、stereo_bm  

2、stereo_sgbm  

3、stereo_hh,(stereo_hh 其實是 stereo_sgbm 演算法的狀態引數中使能了 fulldp 。)

(1)stereobmstate

// 預處理濾波引數

// sad 引數

// 後處理引數

// opencv2.1 新增的狀態引數

在上述引數中,對視差生成效果影響較大的主要引數是 sadwindowsize、numberofdisparities 和 uniquenessratio 三個,一般只需對這三個引數進行調整,其餘引數按預設設定即可

在opencv2.1中,bm演算法有c和c++ 兩種實現模組。

(2)stereosgbmstate

sgbm演算法的狀態引數大部分與bm演算法的一致,下面只解釋不同的部分:

注意opencv2.1的sgbm演算法是用c++ 語言編寫的,沒有c實現模組。與h. hirschmuller提出的原演算法相比,主要有如下變化:

演算法預設執行單通道dp演算法,只用了5個方向,而fulldp使能時則使用8個方向(可能需要占用大量記憶體)。

演算法在計算匹配代價函式時,採用塊匹配方法而非畫素匹配(不過sadwindowsize=1時就等於畫素匹配了)。

匹配代價的計算採用bt演算法("depth discontinuities by pixel-to-pixel stereo" by s. birchfield and c. tomasi),並沒有實現基於互熵資訊的匹配代價計算。

增加了一些bm演算法中的預處理和後處理程式。

(3)stereogcstate

gc演算法的狀態引數只有兩個:numberofdisparities 和 maxiters,並且只能通過 cvcreatestereogcstate 在建立演算法狀態結構體時一次性確定,不能在迴圈中更新狀態資訊。gc演算法並不是一種實時演算法,但可以得到物體輪廓清晰準確的視差圖,適用於靜態環境物體的深度重構。

注意gc演算法只能在c語言模式下執行,並且不能對視差圖進行預先的邊界延拓,左右檢視和左右視差矩陣的大小必須一致。

OpenCV雙目匹配演算法

opencv中提供了多種雙目匹配演算法,比如bm,sgbm,hh等,並提供了各演算法主要引數的設定與獲取方式,加速了雙目匹配的演算法開發。雙目匹配遵循以下的流程 相機標定左右相機的內外參 對左右影象進行畸變校正 選擇匹配演算法對校正後的影象進行匹配,計算視差。各匹配演算法也遵循一定的流程,具體的細節...

運用C 在採集時進行自動驗證登入

最近有朋友在問我如何進行資訊採集時對一些有使用者或和密碼驗證的 進行採集,剛好最近在專案中有運用到這個來進行驗證登入,將部分 發出來與大家分享 學習,這只是我在網上參考人家的做的乙個雛形試用版,雖然能用,但是效能可能不是那麼好。目前只能對那些沒有登入驗證碼的 有效,如果有驗證碼的,呵 呵。那還得去寫...

OpenCV學習 對富特徵進行光流匹配

深入理解opencv 實用計算機視覺專案解析 第四章學習。在富特徵上使用光流匹配的優勢在於處理過程通常較快且能容納更多的匹配點。將結構keypoint轉化成point2f的 如下 void keypointstopoints const vector kps,vector ps vector lef...