立體匹配演算法(Stereo Matching)及其在OpenCV中的應用
阿新 • • 發佈:2019-01-27
模擬人的兩隻眼睛的Stereo相機最近變得很受歡迎。通過對stereo相機拍攝的左右兩張圖進行匹配找出視差圖,可以還原物體的3D資訊。
立體匹配(Stereo matching)的步驟如下:
1: 預處理:亮度歸一化,去噪,影象增強,濾波等等
2: 匹配Cost計算Cost aggregation
每個畫素點的matching cost可用下圖所示的兩種方式表示
將所有畫素的Cost加起來,選擇和最小的方案。
3: 全域性最優化
4: 後處理:Refinement 精化
一般基於畫素點的匹配含有較大的噪音,所以人們更願意使用基於區域性或全域性的匹配演算法。常用的立體匹配演算法可分為基於區域性的匹配方法和基於全域性的匹配方法。
(1)基於區域性的匹配演算法:塊匹配,模板匹配,SIFT[1] ,SURF[2],AKAZE[3]
(2)基於全域性的匹配演算法:首先定義Cost Function,然後根據約束條件優化Cost Function.
在這裡簡單介紹後兩種全域性匹配演算法: 1:Graph Cut: 將每一個畫素看作Graph中的一個Node,然後假設該圖有L個不同的深度值,則新增L個 新的Node作為Label,然後求視差圖的問題就變成了多重Labelling的問題了,具體Graph Cut參照文 獻[4]。 2:Belief Propagation: 將影象看作馬爾科夫隨機場,則求視差問題變成了最大化聯合後驗概率的問題,
每一個畫素對其深度值的猜測來自於其鄰居給的資訊,然後再把資訊傳給其他的鄰居。每一個資訊有 一個可靠度(概率)。最後經過多次迴圈深度值會收斂。
[2]Herbert
Bay,Tinne Tuytelaars, and Luc Van Gool,SURF: Speeded Up Robust Features,ECCV,2006
[4]Yuri
Boykov and Vladimir Kolmogorov (2003), "Computing Geodesics and Minimal Surfaces via Graph Cuts"
OpenCV提供了以下四種立體匹配演算法的函式:
匹配結果如下: 精度與速度統計圖如下:
- Dynamic Programming
- Scaling Optimization
- Graph Cuts
- Belief Propagation:Markov Random Field
在這裡簡單介紹後兩種全域性匹配演算法: 1:Graph Cut: 將每一個畫素看作Graph中的一個Node,然後假設該圖有L個不同的深度值,則新增L個 新的Node作為Label,然後求視差圖的問題就變成了多重Labelling的問題了,具體Graph Cut參照文 獻[4]。 2:Belief Propagation: 將影象看作馬爾科夫隨機場,則求視差問題變成了最大化聯合後驗概率的問題,
- Block Matching(BM) StereoBM
- Semi-Global Block Matching(SGBM) StereoSGBM
- Graph Cut(GC)cvStereoGCState()
- Dynamic Programming(DP)cvFindStereoCorrespondence()
- 左相鄰畫素disparity取值為d時,其最小的cost值。
- 左相鄰畫素disparity取值為d-1時,其最小的cost值+懲罰1。
- 左相鄰畫素disparity取值為d+1時,其最小的cost值+懲罰1。
- 左相鄰畫素disparity取值為其他時,其最小的cost值+懲罰2。
匹配結果如下: 精度與速度統計圖如下: