延續(xù)上篇所探討的ADAS單眼攝影系統(tǒng),接下來本篇將著重於立體視覺的探討。發(fā)明雷達(dá)之前,海上的船隻運(yùn)用立體反射機(jī)械原理和鐘盤來計(jì)算敵人和海盜船的距離(利用此資訊將加農(nóng)砲瞄準(zhǔn)敵人軍艦)。船身兩側(cè)裝載二個(gè)、甚至更多的鏡子(立體)。精心安排的反射鏡系統(tǒng)會將主要的立體鏡影像傳送到控制室,控制室的操作員先調(diào)整發(fā)條,再將接收到的兩個(gè)影像疊加起來,預(yù)校準(zhǔn)的鐘盤刻度就會顯示敵艦的距離。數(shù)百年來至今,立體運(yùn)算法的原理都沒有改變,這種量測法非常穩(wěn)定可靠,而規(guī)律和穩(wěn)定的演算法也為設(shè)計(jì)更好的硬體機(jī)械來執(zhí)行立體視覺計(jì)算提供了機(jī)會。
立體視覺如何從2D平面數(shù)據(jù)計(jì)算物體距離?
圖一顯示的是立體幾何方程式。如果兩個(gè)攝影機(jī)已被校準(zhǔn)過,找出物體距離這個(gè)問題就可以轉(zhuǎn)化成找出左攝影機(jī)和右攝影機(jī)同時(shí)拍攝的影像畫素點(diǎn)視差。預(yù)校準(zhǔn)的立體攝影機(jī)可以校準(zhǔn)圖像,如此對極幾何線就可以輕易對兩個(gè)影像的每一個(gè)畫素點(diǎn)進(jìn)行水平搜尋(同一行)。所謂視差(Disparity),就是與左圖像比對,一個(gè)特定點(diǎn)在右圖像移動的畫素量,此概念很重要,因?yàn)樗m用於硬體實(shí)作的常態(tài)計(jì)算模型,在深入此主題之前,視差這個(gè)概念必須進(jìn)一步釐清。

圖一 : 立體幾何方程式。3D空間中一個(gè)點(diǎn)的景深,與該點(diǎn)在左右攝影機(jī)的視差成反比。 |
|
立體視差計(jì)算和距離計(jì)算的精確度
圖二的三張圖顯示視差與物體距離的關(guān)係,首先注意到的是,視差和物體距離成反比。一個(gè)物體距離立體攝影機(jī)愈近,視差就會愈大,反之亦然。理論上,一個(gè)零視差的點(diǎn)距離攝影機(jī)無限的遠(yuǎn)。具體而言,以圖二(a)系統(tǒng)的選定物理參數(shù),一個(gè)畫素視差代表大約700公尺的距離,二個(gè)畫素視差,距離大約350公尺,這是非常大的解析度差異,如果視差計(jì)算失誤一個(gè)畫素,估算的距離就會產(chǎn)生很大的錯(cuò)誤 (100公尺以上的距離)。對於較短的距離(圖二曲線下半部,小於50公尺處),距離計(jì)算的解析度能獲得大幅改善,從曲線下半部密集的距離計(jì)算點(diǎn)可得到明證,在此區(qū)塊內(nèi),視差計(jì)算失誤一個(gè)畫素 (或更少),距離的誤差大約2~3公尺。

圖二 : 計(jì)算精確度與距離和視差的關(guān)係。視差計(jì)算的畫素精確度提升,距離的精確度也相對提高。該計(jì)算基於(a)兩臺攝影機(jī)相距30公分(b)焦距10釐米(c) 畫素大小4.2微米。 |
|
有些方法可以改善系統(tǒng)的精確度,如圖二(b)和(c)所示,如果視角計(jì)算以半畫素或四分之一畫素執(zhí)行,距離計(jì)算的解析度會成正比提升。在這些情況下,100公尺以上、300公尺以下的距離,連續(xù)視角增加的計(jì)算距離解析度會提升30~40公尺。100公尺以下的距離,精確度可優(yōu)於50公分。重要的是,對近距離防撞系統(tǒng)而言,精確度必須最大化(最好小於10公分),但與此同時(shí),立體攝影機(jī)的工作範(fàn)圍必須獲得改善,即使得稍微犧牲精確度。
ADAS系統(tǒng)的立體攝影機(jī)工作範(fàn)圍
如果再回顧一下基礎(chǔ)的立體方程式(圖一),要增進(jìn)系統(tǒng)的最大範(fàn)圍,很明顯的低視角的距離計(jì)算必須正確。這可以從下列方式獲得實(shí)現(xiàn),每一個(gè)方法都必須和機(jī)械或電子設(shè)計(jì)以及最終的系統(tǒng)成本之間取得平衡。
(1):使用較小的畫素尺寸(例如一半),其他不變,範(fàn)圍可以提高50%(精
確度相同)。(2):增加兩臺攝影機(jī)之間的距離。如果“T”的長度加倍,其他不變,範(fàn)圍可以提升50%(精確度相同)。(3):改變焦距。如果“f”的長度加倍,其他不變,範(fàn)圍可以提高50%(精確度相同),但視野縮小。(4)使用擁有子畫素精確度的運(yùn)算系統(tǒng)計(jì)算立體視角。
(2)和(3)的選項(xiàng)雖在數(shù)理上可行,但卻對系統(tǒng)的硬體特色造成困擾。當(dāng)汽車裝載立體系統(tǒng)時(shí),通常會以固定的角度安裝,系統(tǒng)也必須愈小愈好。這樣的美學(xué)考量與增加攝影機(jī)間的距離(T)或拉長焦距(f)相違背。因此,要安裝大範(fàn)圍的高精確度立體距離計(jì)算系統(tǒng),最可行的選項(xiàng)只剩下(1)和(4)。
流程
圖三顯示計(jì)算立體視差的數(shù)據(jù)流程和運(yùn)算鏈高階方塊圖。請注意,其中並沒有像上篇提及的SFM方塊圖一樣有攝影機(jī)校準(zhǔn)步驟,也不須像密集立體視差演算法一樣需要尋找特徵。SFM距離計(jì)算法是基於物體的大小來計(jì)算距離,因此辨識特徵和物體是必要的。

圖三 : 立體視差距離計(jì)算法的高階數(shù)據(jù)和演算流程 |
|
圖像秩轉(zhuǎn)換通常是立體圖像處理流程的第一或第二個(gè)步驟。此步驟的目的是確保兩個(gè)圖像的連續(xù)區(qū)塊比對不易受到真實(shí)世界干擾的影響,例如左、右圖像的照明或亮度變化。許多因素會造成變化,例如兩臺攝影機(jī)因?yàn)椴煌暯恰⒖扉T速度和其他抖動偽像的細(xì)微差異,導(dǎo)致攝影機(jī)在不太一樣的時(shí)間點(diǎn)拍下左、右圖像,造成亮度不同。
有許多研究論文和方法論提出各種不同的圖像秩轉(zhuǎn)換選項(xiàng),並分析它們?nèi)绾斡绊懸暡钣?jì)算的強(qiáng)固性。圖三的圖像校準(zhǔn)步驟,確保連續(xù)視差計(jì)算能沿著水平對極搜尋線進(jìn)行。接下來的流程步驟就是實(shí)際計(jì)算視差、運(yùn)算信心水平和後處理。密集的視差計(jì)算大多是在空間域執(zhí)行,雖然有些方法建議在頻域計(jì)算視差。
這些方法試圖利用可以相對快速計(jì)算大FFT這個(gè)優(yōu)點(diǎn),但FFT有其缺點(diǎn)使它無法專美於前。本文無須對此深入討論,但持平而言,大多數(shù) (如果不是全部的話) 商品化的立體視差演算法都是在空間域?qū)崿F(xiàn)。在最基礎(chǔ)的層次上,此分析法要求必須為左圖像(已轉(zhuǎn)換)的每一個(gè)畫素,選取一小塊圍繞著它的畫素區(qū)塊。
接著,沿著對極(水平)線搜尋右圖像(已轉(zhuǎn)換),直到找到相同區(qū)塊的位置。每一個(gè)可能的視差值(從1到最大值64或128或其他任何數(shù)值)都要執(zhí)行這樣的計(jì)算。左邊和右邊區(qū)塊的差異(或關(guān)聯(lián)性)會趨近於最小(最大),接近畫素真正的視差值。使用「移動視窗」執(zhí)行區(qū)塊比對或匹配以計(jì)算區(qū)塊移動的範(fàn)圍,得出的結(jié)果再用來計(jì)算3D空間中特定畫素的距離。此流程如圖四所示。

圖四 : 簡易SAD區(qū)塊比對演算法,用於搜尋視差 |
|
使用SAD算法搜尋視差雖然簡潔但有時(shí)太過於簡單。此算法的基本前提是,給定的畫素區(qū)塊視差是相等的,但這在物體的邊緣幾乎不可能。物體邊緣的小畫素區(qū)塊,視差會劇烈變化,傾斜或彎曲的表面則微幅改變。
如圖五Middlebury圖片集的「錐體和面具」清楚說明此一事實(shí)。在一個(gè)圓錐(略微傾斜的表面)上發(fā)現(xiàn)的相鄰像素,視差改變微小,物體邊緣的視差差異則較大。使用簡單的SAD算法及秩轉(zhuǎn)換,兩邊的遮擋都留下很大的視差孔,如同僅在一臺攝影機(jī)和物體邊緣才會看見的偽影。

圖五 : Middlebury圖片集的圓錐和面具。使用簡單的SAD執(zhí)行視差計(jì)算,視差在曲面上保持輕微變化,而在物體邊界急劇變化。觀察圖的右上方圍欄視差孔、物體不連續(xù)、以及圖左側(cè)遮擋的情形。 |
|
更好的方法是「半全域比對法(semi global matching, SGM)」。該方法針對多於一個(gè)方向(4、8或16)的每個(gè)像素計(jì)算平滑度代價(jià)函數(shù)。代價(jià)函數(shù)計(jì)算如圖六所示,目的是為每個(gè)像素優(yōu)化多方向的代價(jià)函數(shù)S(p,d),並確保平滑視差圖。SGM的原始文件建議用16個(gè)方向優(yōu)化代價(jià)函數(shù),而實(shí)作上已經(jīng)嘗試了2、4和8個(gè)方向。

圖六 : SGM優(yōu)化代價(jià)函數(shù)方程式 |
|
SGM代價(jià)函數(shù)和優(yōu)化算法的具體實(shí)現(xiàn)如圖七所示。使用偽代碼段,可以很容易進(jìn)行記憶體、運(yùn)算效能和最終的硬體複雜度條件評估,即時(shí)實(shí)現(xiàn)SGM運(yùn)算。
視差計(jì)算對運(yùn)算效能和記憶體的需求
可想而知,上述計(jì)算對ADAS應(yīng)用來說是很重的運(yùn)算負(fù)擔(dān)。一個(gè)典型的前置立體攝影機(jī)裝置,是一組以每秒30格的速度進(jìn)行拍攝的1百萬畫素?cái)z影機(jī)。視差計(jì)算處理的第一步驟是秩轉(zhuǎn)換。典型的秩轉(zhuǎn)換是Census Transformation轉(zhuǎn)換或略微修改的版本,兩者所需的輸入都是立體影像,輸出則是經(jīng)過Census Transformation轉(zhuǎn)換的影像對。
以畫素點(diǎn)為中心的N×N區(qū)塊所需的Census Transformation運(yùn)算,是執(zhí)行6,000萬次N×N Census Transformation轉(zhuǎn)換。每一次對N×N區(qū)塊的畫素進(jìn)行Census Transformation轉(zhuǎn)換,需要N2次比對運(yùn)算。其他涉及的秩轉(zhuǎn)換需要對每個(gè)畫素進(jìn)行N2次點(diǎn)排列。保守估計(jì),未來幾年實(shí)際部署在車輛上的系統(tǒng),最少須進(jìn)行6,000萬x N2次的秩轉(zhuǎn)換比對運(yùn)算。
流程的第二步驟是影像校準(zhǔn),以利極線視差搜尋在水平線上進(jìn)行。第三步驟比較有趣,它針對每個(gè)畫素和視差組合計(jì)算C(p,d),Lr(p,d)和S(p,d)(參見圖七)。如果C(p,d)按區(qū)塊進(jìn)行SAD操作且區(qū)塊大小是N×N,所需的系統(tǒng)範(fàn)圍大約200公尺,距離精確度以半畫素視差計(jì)算,則系統(tǒng)需要計(jì)算C(p,d)用於64-128種視差可能性。使用這些參數(shù)的C(p,d)的總運(yùn)算需求為每秒執(zhí)行6,000萬 × N2 × 128次SAD操作。Lr(p,d)的計(jì)算則須對每個(gè)畫素在“r”個(gè)可能的方向進(jìn)行運(yùn)算,因此必須進(jìn)行6,000萬x128 x r次計(jì)算。一個(gè)畫素的計(jì)算需要五次加法運(yùn)算(如果把減法當(dāng)作一種特別形式的加法)和一次最小偵查蒐尋操作。加總起來,每秒的Lr(p,d)的計(jì)算需要6,000萬 × 128 × r × 5次加法和6,000萬 × 128× r次最小值計(jì)算。

圖八 : 影像秩轉(zhuǎn)換範(fàn)例。圖的左邊是簡單的Census Transformation轉(zhuǎn)換,右邊稱為「全秩轉(zhuǎn)換」。 |
|
對於每個(gè)可能的畫素和視差值,S(p,d)計(jì)算需進(jìn)行r次,每次計(jì)算S(p,d)需要“r”次加法和一次比對。執(zhí)行此計(jì)算的每秒總操作數(shù)為6,000萬 × 128 × r 次加法和6,000萬 × 128次比對。將這三個(gè)計(jì)算相加,一個(gè)精確的SGM視差計(jì)算引擎,運(yùn)行在1百萬畫素每秒30格的攝影機(jī)上,進(jìn)行128個(gè)視差可能性計(jì)算,每秒必須執(zhí)行大約1 Tera的操作 (加法、減法、尋找最小值)。
和這個(gè)數(shù)字相較,先進(jìn)的通用嵌入式處理器每一個(gè)周期發(fā)出7到10個(gè)指令,其中一些指令是SIMD類型,亦即它們可以平行處理8-16段數(shù)據(jù)。倘若通用處理器使用最佳的IPC,以2 GHz運(yùn)行的四核處理器將提供約320G的64位元操作。即使我們認(rèn)為大多數(shù)的立體管線將是16位元,而且可以100%的效率將數(shù)據(jù)封包在64位元倉,但四核通用處理器仍不足以滿足現(xiàn)代ADAS立體視覺系統(tǒng)的需求。通用處理器的目標(biāo)是提供各種高階可編程性,這意味著設(shè)計(jì)即時(shí)ADAS立體視覺系統(tǒng)需要專用的硬體。
計(jì)算方法的強(qiáng)固可靠性
ADAS視覺系統(tǒng)的目的是避免或起碼將道路事故的嚴(yán)重性降至最低。每年有120多萬人因交通事故死亡,成為15至29歲人口的主要死因。行人是最脆弱的道路使用者,每年有超過25萬行人受傷。駕駛?cè)俗⒁饬Σ患谢蚱隈{駛是道路交通事故的主因。因此,ADAS視覺系統(tǒng)的緊急剎車功能,最重要的目的是降低事故的嚴(yán)重性和頻率。然而,這是一個(gè)雙面刃的需求,因?yàn)橐曈X系統(tǒng)不僅必須針對每一格影像和每一秒精確可靠地估算距離,而且還必須使誤報(bào)的情況降至最低。為了確保ADAS系統(tǒng)的規(guī)格和設(shè)計(jì)達(dá)到適當(dāng)?shù)膹?qiáng)固性,ISO 26262被制定作為汽車安全應(yīng)用電子系統(tǒng)的規(guī)範(fàn)、設(shè)計(jì)和開發(fā)的國際標(biāo)準(zhǔn)。
在此進(jìn)行一點(diǎn)算術(shù),可以得知立體視覺系統(tǒng)計(jì)算距離時(shí)可能產(chǎn)生的誤差。圖九顯示,如果焦距(f)和攝影機(jī)距離(T)的容許誤差是1%,視差計(jì)算演算法的精確度是5%,那麼計(jì)算出來的距離(Z)就會產(chǎn)生大約2.5%的誤差。因此,將視差計(jì)算法的準(zhǔn)確度提高到子畫素(四分之一或二分之一畫素)水平是很重要的。這有兩個(gè)意涵:第一個(gè)是提升演算法和硬體的後處理插值計(jì)算要求,第二個(gè)要求更複雜,而且與ISO 26262相關(guān)。

圖九 : 立體視覺系統(tǒng)計(jì)算距離的統(tǒng)計(jì)誤差預(yù)估值 |
|
架構(gòu)和設(shè)計(jì)需確保電子零件的瞬時(shí)和永久性錯(cuò)誤,能在系統(tǒng)的容錯(cuò)時(shí)間間隔(FTTI)內(nèi)被檢測和標(biāo)記出來。FTTI和其他相關(guān)指標(biāo)的評量並非本文要討論的,只要記得用於建構(gòu)系統(tǒng)的電子零組件,必須能夠?qū)崿F(xiàn)ADAS視覺系統(tǒng)所需的ASIL級別就夠了。
本文中,我們檢視各種通用和立體視覺演算法的成效,特別是用於計(jì)算汽車ADAS安全緊急煞車系統(tǒng)距離的選項(xiàng)。而TI目前正在推動ADAS處理領(lǐng)域的深度創(chuàng)新,特別是高效、強(qiáng)大的立體視覺處理。也有許多不同的電子系統(tǒng)選項(xiàng),可以實(shí)現(xiàn)ADAS安全視覺系統(tǒng)的設(shè)計(jì)和效能目標(biāo)。例如,TI(TDA系列)的異質(zhì)晶片架構(gòu)特別能夠滿足此一特定應(yīng)用的效能、功耗、尺寸和ASIL功能性安全目標(biāo)。
(本文作者任職於德州儀器)
@刊頭圖(Source:Sports and Mobiles Knowledge Blogs)