SGBM算法詳解(二)

上一期的SGBM算法詳解(一)得到了許多網友的熱烈回復搞乏,心里很開心扶欣,已經一一作了解答,如果有不懂的可以繼續(xù)咨詢音同,今天開始第二個部分《SGBM算法詳解(二)》词爬。本次主要包括SGM算法和后處理兩個部分。

一权均、SGM算法

SGM算法的全稱為Semi-Global Matching顿膨,網上關于它的介紹有很多不細講,它的論文出處詳見文末參考文獻叽赊,但是這里也要為作者贊一把恋沃,很牛逼。

SGM其實本質上還是一種代價聚合算法必指,和局部立體匹配算法中的代價聚合很像囊咏,不然也不會叫Semi-Global了(當然也不全是哈,重點在后面~)塔橡,而Global又是從何而來呢梅割?為了達到和全局立體匹配算法一樣全局能量函數最小化的效果,就需要更多或者全圖所有的像素參與到當前像素的約束當中葛家。但是剛剛也說了户辞,SGM類似代價聚合,也就是一定范圍內的鄰域操作(鄰域求和癞谒,加權平均等)咆课,那如何與整張圖像上的像素扯上關系而不提高太多性能呢(重點是遠距離像素也能扯上關系),于是作者想出了多路徑約束聚合的思路扯俱,簡單說就是讓當前像素的代價聚合過程受多個方向(或路徑)上所有像素的影響,方向越多參與影響當前像素的鄰域像素就越多(原文說一般來講8-16方向就比較不錯了)喇澡,這樣既保證了全局像素的約束迅栅,又不用建立全局最小能量函數,避免了復雜運算符晴玖,降低了性能读存,所以才叫半全局算法(純屬個人理解哈)为流,是不是很厲害呢?示意圖如圖1所示让簿。不知道我這樣講解敬察,有沒有讓你明白一點半全局的意思呢?


SGM

那么講到這里尔当,大家是不是會有一個疑問莲祸,對于每個像素點P都進行多個路徑像素代價的聚合,是不是太夸張了椭迎,魯棒性怎么解決锐帜?錯誤的或不正確的代價要怎么解決?和全局能量最小化差遠了吧畜号?還有就是數據越界了怎么辦缴阎?寫代碼可是硬傷啊!

所以接下來就要說到作者提出的聚合公式,如下简软。說實話一看到公式我就渾身發(fā)抖蛮拔,但是我們大致可以看出來,有多個最小值的比較痹升,包括有點像懲罰參數P1和P2建炫。what? 懲罰參數视卢?這不是和全局立體匹配算法很像嘛踱卵,哈哈。如果把 r 看做是方向的話据过,那么下面兩個公式看起來就像是多方向某個變量的求和(聚合)對吧惋砂?

E(D) = \sum_{p}(C(p,D_{q}) + \sum_{q\in N_{p}}P_{1}T[|D_{p} - D_{q}| = 1]+\sum_{q\in N_{p}}(P_{2}T[|D_{p}-D_{q}])

這里必須給出公式的解釋(很重要):
第一項表示視差為D時所有像素匹配代價之和。第二項表示對像素點p的鄰域Np中的所有像素q增加一個懲罰常數P1(僅在視差差值為1個像素時起作用)绳锅。第三項表示對視差差值大于1的像素使用更大的懲罰常數P2西饵。P1是為了適應傾斜或彎曲的表面。P2則是為了保留不連續(xù)性鳞芙。同時作者也對P2閾值設定給出了方法:因為不連續(xù)性通常與梯度變化是對應的眷柔,因此,可以使用一下的計算公式:
P_{2} = (\frac{P'_{2} }{|I_{p}-I_{q}}|)
簡單講P1與視差圖的平滑有關原朝,P2與視差圖的邊緣有關驯嘱,這里給出兩組不同P1和P2的效果圖,給大家更清晰的認識喳坠。先看P1的結果鞠评,可以看出在P2不變的情況下,P1越大壕鹉,圖像越平滑剃幌。

0.1 * P1
P1
3*P1

再看P2聋涨,P2越大圖像邊緣越差。
P2 = 0.8 * P1

P2 = 1.6 * P1

P2 = 2.4 * P1

但是這里需要強調的是负乡,P1和P2的變化規(guī)律并不是線性的牍白,而是非線性的,意思就是達到某一個值以后抖棘,可能效果就不會再改變茂腥。
如果不容易理解的話,我們可以這樣想钉答,SGM的本質是想像素P的聚合過程有多個方向上的全局像素參數础芍,那么我們可以先看單一方向的全局像素是如何參與聚合的。公式如下:
singlepath

那么完成單一方向聚合約束数尿,再把所有方向上的聚合約束加起來仑性,是不是就是我們前面所說的多方向代價聚合約束了呢?公式如下:

我們這里先不管這個公式右蹦,先看opencv里面的代碼是如何描述這個公式的诊杆。

SGM

簡單說明一下:

L0 - L3 表示三個不同方向上的聚合值,一般來講是左上角順時針計算方向何陆。類似下面這個樣子:
? ? ? 1? ? 2? ? 3
? ? ? 0? ? p? ? 4
? ? ? 7? ? 6? ? 5
Lr_p0 - Lr_p3 表示不同方向上的鄰域像素的代價值晨汹。
這樣我們大致就能看出來,這個公式和代碼還是很對應的贷盲,無非就是求多個方向的最小值之和并約束一下嘛淘这,我們以L0的計算為例:

假設
? T0 = 像素p在0方向上的像素Lr_p0在視差值為d時的代價

? T1 = 像素p在0方向上的像素Lr_p0在視差為d-1時的代價 + P1

? T2 = 像素p在0方向上的像素Lr_p0在視差為d+1是的代價 + P1

? T3 = 像素p在0方向上的像素Lr_p0在非d-1和d+1時的代價最小值 + P2

? L0 = 當前代價 + min(T0, T1巩剖, T2铝穷, T3)- delta(防止聚合結果過大)

? ? 因此,我們只要將多個方向的代價求和佳魔,就完成了當前像素P的聚合過程曙聂。可以看出P1和P2懲罰的代價值所在位置是有區(qū)別的鞠鲜,較近的用P1宁脊,而較遠的用P2,同時P2>P1贤姆,所以他們的作用也就比較明顯榆苞,通過兩個懲罰項來保證視差圖的平滑和邊緣,簡單說如果P1或P2任意一個攔住了你霞捡,那么此處應該是平滑的(或者存在異常值)要好好保護起來坐漏,如果P1和P2都沒能攔住你,那此處或者附近就真的是邊緣,也要好好保護仙畦。

? ? 等到代價立方體所有代價值完成聚合,也就完成了代價的SGM優(yōu)化音婶。

? ? 完成SGM優(yōu)化以后慨畸,SGBM算法剩下的就是視差計算和視差后處理步驟。視差計算相信大家都比較了解衣式,這里采用的是勝者為王(WTA)算法寸士,不過多介紹。

二碴卧、 后處理

? ? 重點介紹一下后處理算法弱卡。SGBM算法的后處理流程包括:置信度檢測、亞像素插值和左右一致性檢測住册。

? 置信度檢測是利用代價立方體本身進行錯誤視差值的剔除婶博。簡單來講就是最佳視差值要與一定范圍內的視差值在代價值上面保持一定的全局最優(yōu)關系,這樣可以避免算法中經常遇到的局部最優(yōu)解問題荧飞。置信度代碼如下:

置信度檢測

? 亞像素插值的目的簡單說就是讓物體表面視差更加的平滑凡人,因為我們在立體匹配的時候是將雙目視角所在空間粗略的分為了maxDisparity個平面,但是真實場景卻又是連續(xù)且漸變的叹阔,其計算公式如下:

亞像素插值

? 左右一致性檢測的目的則是為了消除左右遮擋帶來的視差錯誤挠轴,代碼如下。這里要特別說明一下耳幢,左右一致性檢測是需要用到左右視差圖的岸晦,但是SGBM算法中并沒有重新計算右視差圖,而是采用左視差圖推斷出右視差圖的睛藻。

左右一致性檢測

? 最后給出WTA的結果和后處理完以后的結果启上,可以看出,后處理的效果還是非常明顯的修档,是一個必不可少的部分碧绞。


WTA + subPixelRefine
WTA+All_Refine

參考文獻:

Hirschm? H . Stereo Processing by Semiglobal Matching and Mutual Information[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2007, 30(2):328-341.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吱窝,隨后出現的幾起案子讥邻,更是在濱河造成了極大的恐慌,老刑警劉巖院峡,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兴使,死亡現場離奇詭異,居然都是意外死亡照激,警方通過查閱死者的電腦和手機发魄,發(fā)現死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人励幼,你說我怎么就攤上這事汰寓。” “怎么了苹粟?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵有滑,是天一觀的道長。 經常有香客問我嵌削,道長毛好,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任苛秕,我火速辦了婚禮肌访,結果婚禮上,老公的妹妹穿的比我還像新娘艇劫。我一直安慰自己吼驶,他們只是感情好,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布港准。 她就那樣靜靜地躺著旨剥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浅缸。 梳的紋絲不亂的頭發(fā)上轨帜,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音衩椒,去河邊找鬼蚌父。 笑死,一個胖子當著我的面吹牛毛萌,可吹牛的內容都是我干的苟弛。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼阁将,長吁一口氣:“原來是場噩夢啊……” “哼膏秫!你這毒婦竟也來了?” 一聲冷哼從身側響起做盅,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤缤削,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后吹榴,有當地人在樹林里發(fā)現了一具尸體亭敢,經...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年图筹,在試婚紗的時候發(fā)現自己被綠了帅刀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片让腹。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扣溺,靈堂內的尸體忽然破棺而出骇窍,到底是詐尸還是另有隱情另绩,我是刑警寧澤枫吧,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站漏策,受9級特大地震影響哈恰,放射性物質發(fā)生泄漏。R本人自食惡果不足惜志群,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一着绷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锌云,春花似錦荠医、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至攻冷,卻和暖如春娃胆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背等曼。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工里烦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人禁谦。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓胁黑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親州泊。 傳聞我的和親對象是個殘疾皇子丧蘸,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349