from:https://blog.csdn.net/wintergeng/article/details/51049596
一、概念
??????? 立體匹配算法主要是通過建立一個能量代價函數,通過此能量代價函數最小化來估計像素點視差值。立體匹配算法的實質就是一個最優化求解問題,通過建立合理的能量函數,增加一些約束,采用最優化理論的方法進行方程求解,這也是所有的病態問題求解方法。
二、主要立體匹配算法分類
1)根據采用圖像表示的基元不同,立體匹配算法分為:
?????? A、區域立體匹配算法(可獲取稠密視差圖。缺點:受圖像的仿射畸變和輻射畸變影響較大;像素點約束窗口的大小與形狀選擇比較困難,選擇過大,在深度不連續處,視差圖中會出現過度平滑現象;選擇過小,對像素點的約束比較少,圖像信息沒有得到充分利用,容易產生誤匹配。)
?????? B、基于特征的立體匹配算法(可獲得稀疏的視差圖,經差值估計可獲得稠密視差圖。可提取點、線、面等局部特征,也可提取多邊形和圖像結構等全局特征。缺點:特征提取易受遮擋、光線、重復紋理等影響較大;差值估計計算量大)
?????? C、基于相位立體匹配算法(假定在圖像對應點中,其頻率范圍內,其局部相位是相等的,在頻率范圍內進行視差估計)
2)依據采用最優化理論方法的不同,立體匹配算法可以分為:
?????? A、局部的立體匹配算法
?????? B、全局的立體匹配算法
三、匹配基元(match primitive)
目前匹配算法中所采用的匹配基元可以分成兩大類:
1)在所有圖象像素點上抽取量測描述子
????? A、像素灰度值(最簡單、直接,但必須在同一光照條件下獲得)
????? B、局部區域灰度函數(主要是利用求得在各種大小不同窗口中灰度分布的導數信息,描述像素點周圍的結構矢量。)
????? C、卷積圖象符號(利用各種大小算子與圖象進行卷積,用灰度梯度局部極大值或極小值作為特征信息,描述整個圖像)
2)圖像特征
????? A、過零點
????? B、邊緣(由于邊緣是圖像特征位置的標志,對灰度值的變化不敏感,邊緣是圖像匹配的重要特征和描述子)
????? C、角點(雖然其沒有明確的數學定義,但大家普遍認為角點,即二維圖像亮度變化劇烈的點或邊緣曲線上曲率極值點)
------------------------------------------------------------------基元-----------------------------------------------------------------------------------------
- 立體視覺匹配基元:匹配基元是用以進行立體匹配的圖像特征,匹配基元的選擇,要考慮基元的穩定性、敏感性、可行性和能否表示圖像。
-
點:利用圖像的局部特征信息作為匹配基元,表示一個像素,如像素灰度值,角點,邊緣,卷積等。
-
塊:局部區域內所有像素的灰度、亮度特征值,對區域內所有像素進行變化,如卷積、梯度變換和Censes變換等。
-
線:一般是像素灰度信息發生急劇變化的像素點集,最能體現邊緣特征。
檢測邊緣的算子如Sobel算子、Canny算子、Log算子和Prewitt算子等。
-
------------------------------------------------------------------基元end------------------------------------------------------------------------------------------
四、區域匹配算法
??????? 基本原理是給定在一幅圖像上的某一點,選取該像素點鄰域內的一個子窗口,在另一幅圖像中的一個區域內,根據某種相似性判斷依據,尋找與子窗口圖像最為相似的子圖,而其匹配的子圖中對應的像素點就為該像素的匹配點。
??????? 一般單純的區域匹配都遇到如下限制:
?????? 1)針對弱紋理或存在重復紋理的區域,匹配結果不好
?????? 2)該算法不適應于深度變化劇烈的場景
?????? 3)對光照、對比度和噪聲比較敏感
?????? 4)子窗體的大小很難選擇
五、特征匹配算法
??????? 特征的匹配算法,主要是基于幾何特征信息(邊緣、線、輪廓、興趣點、角點和幾何基元等),針對幾何特征點進行視差估計,所以先要提取圖像的特征點,盡而利用這些特征點的視差值信息來重建三維空間場景。
??????? 匹配所需要的主要步驟:圖像預處理、提取特征、特征點的匹配獲取稀疏視差圖,如果想得到稠密的視差圖,需要采用插值的方法。
六、全局匹配算法
??????? 全局立體匹配算法主要是采用了全局的優化理論方法估計視差,建立全局能量函數,通過最小化全局能量函數得到最優視差值。
??????? 全局匹配算法得到的結果比較準確,但是其運行時間比較長,不適合實時運行。主要的算法有圖割(graph cuts)、信念傳播(belief propagation)、動態規劃等算法。
七、局部匹配算法(個人覺得跟區域匹配類似,角度不同而已)
??????? 主要是采用局部優化方法進行視差值估計,局部立體匹配算法有 SAD,SSD 等算法,與全局立體匹配算法一樣,也是通過能量最小化方法進行視差估計,但是,在能量函數中,只有數據項,而沒有平滑項。
?????? 主要分為三類:自適應窗體立體匹配算法、自適應權值的立體匹配算法和多窗體立體匹配算法。
八、立體匹配約束
1)極線約束
2)唯一性約束
3)視差連續性約束
4)順序一致性約束
5)相似性約束
----------------------------------------------------------------匹配約束--------------------------------------------------------------------------------------
- 約束準則具有縮小匹配搜索的范圍,降低誤匹配,同時提高匹配效率的功能。
-
極線約束:
如圖所示,三維空間的一個映射點,其匹配點必定在另一圖像的極線上,理想情況下,匹配點對位于同一水平線上即坐標y值相同。故只需在對應的水平線上搜素匹配點,大大提高了匹配效率。
-
唯一性約束:
三維空間點至多只一個圖像上的映射點(遮擋則沒有映射點),匹配時左右圖像上只有唯一一個匹配點。
-
連續性約束:
三維空間中物體表面是光滑的,匹配得到的視差圖大部分情況下是連續且光滑變化的。一般使用較小的視差梯度降低匹配的搜索范圍和待匹配點的數量以提高匹配速度。
-
相似性約束:
三維空間中的物體在不同視角下投影產生的匹配基元(點、塊、線)必須要有相同或相似的屬性。由于光照等因素的影響,相似性約束具有局限性。
-
順序一致性約束:
三維空間中物體上的點的位置信息在映射到兩幅圖像上的位置順序不會改變。這是不透明物體表面投影的幾何學必然性。
-
平滑性約束:
假設三維空間中物體表面是平滑的,則視差圖上除物體邊界位置會有大的視差波動以外,其他位置上匹配視差的變化很小。
-
左右一致性約束:
如圖所示,參考圖上像素點p點在匹配圖上的點是q,則參考圖上像素點q在匹配圖上是p。如果兩次搜索的結果不對應,則改點不可靠。常用于遮擋區域的檢測。
-
視差范圍約束:
兩臺攝像機之間具有一定的距離,在沿極線搜索時,搜索的范圍應小于一定的閾值。視差范圍約束限制了搜索的范圍。
-
-----------------------------------------------------------------匹配約束end----------------------------------------------------------------------------------
九、相似性判斷標準
1)像素點灰度差的平方和,即 SSD
2)像素點灰度差的絕對值和,即 SAD
3)歸一化交叉相關,簡稱 NCC
4) 零均值交叉相關,即 ZNCC
5)Moravec 非歸一化交叉相關,即 MNCC
6)?Kolmogorov-Smirnov?距離,即 KSD
7)Jeffrey 散度
8)Rank 變換(是以窗口內灰度值小于中心像素灰度值的像素個數來代替中心像素的灰度值)
9)Census 變換(是根據窗口內中心像素灰度與其余像素灰度值的大小關系得一串位碼,位碼長度等于窗口內像素個數減一)
各類代碼實現參考:https://blog.csdn.net/liyingjiang22/article/details/53156331
十、評價參數
??????? 立體匹配算法是一個病態問題,一般通過建立能量函數,利用最小化能量函數,和一些約束條件,采用最優化理論方法進行求解方程。
??????? 公認的定量評價參數有:均方根誤差(Root-mean-squared)和誤匹配率(percentage of bad matching pixels)