【OpenCV】立體匹配算法SSD、NCC、ASW的基礎實現


  要求:對給出的左右視圖進行匹配,最后輸出左右兩張disparity map(視差圖)

  e.g.

  左視圖、右視圖(兩幅圖像大小相同,只有水平方向上的視角變換)

   

  標准視差圖如下:

   

  SSD(sum of squared differences)實現:

      

    1.把左右視圖轉成CV_8UC1單通道圖像

      可以直接引用opencv的API實現、自己寫一個對三通道取平均值或者按照下面公式轉換的函數,對結果影響不大

      

    2.對每一個像素進行處理

      假設dmax=79,則有,對於每個像素的每個d值,計算patch(滑動窗口)內左右視圖的像素灰度值的平方差之和,然后記錄該值與其對應的d值

      此處可以用vector<pair<sum, d>>來存儲結果

    3. 取最小sum值對應的d做為最終輸出的disparity map對應點的灰度值

    result:5*5 窗口,壞點率分別為24,72%, 25.78%

     

  NCC(normalized cross-correlation)實現:

  

    1. 同樣,先把左右視圖轉成單通道灰度圖

    2. 然后對於每個像素做處理,對於每個對應的d值,先計算分子,在計算分母,最后把分子/分母的值與對應d值存入vector中

    3.取vector中最大值對應的d值為disparity map在該點的灰度值

    result:5*5窗口 壞點率:23.64%, 24.20% 比SSD稍微好一點

     

  ASW(Adaptive Support Weight)實現:

  

  

  

    這個就按公式實現,比較簡單,如果窗口足夠大的話,ASW的處理效果會比較好,但是會很慢

    但是中間計算Cpq值的時候主要要把BGR模型轉換成Lab模型計算

    

    result:5*5 窗口大小,壞點率:31.33% , 31.39%

     

    33*33窗口大小,壞點率:19.44% , 20.75%(但是,跑了9242 seconds...可以自行感受一下...

     

    代碼實現:https://github.com/CheerM/opencv_stereo_matching/tree/master/src

    BTW,哪位勇士跑完全部測例的ASW 33*33,能不能順便分享一下數據給我看看,感激不盡啊>  <

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM