延續上篇所探討的ADAS單眼攝影系統,接下來本篇將著重於立體視覺的探討。發明雷達之前,海上的船隻運用立體反射機械原理和鐘盤來計算敵人和海盜船的距離(利用此資訊將加農砲瞄準敵人軍艦)。船身兩側裝載二個、甚至更多的鏡子(立體)。精心安排的反射鏡系統會將主要的立體鏡影像傳送到控制室,控制室的操作員先調整發條,再將接收到的兩個影像疊加起來,預校準的鐘盤刻度就會顯示敵艦的距離。數百年來至今,立體運算法的原理都沒有改變,這種量測法非常穩定可靠,而規律和穩定的演算法也為設計更好的硬體機械來執行立體視覺計算提供了機會。
立體視覺如何從2D平面數據計算物體距離?
圖一顯示的是立體幾何方程式。如果兩個攝影機已被校準過,找出物體距離這個問題就可以轉化成找出左攝影機和右攝影機同時拍攝的影像畫素點視差。預校準的立體攝影機可以校準圖像,如此對極幾何線就可以輕易對兩個影像的每一個畫素點進行水平搜尋(同一行)。所謂視差(Disparity),就是與左圖像比對,一個特定點在右圖像移動的畫素量,此概念很重要,因為它適用於硬體實作的常態計算模型,在深入此主題之前,視差這個概念必須進一步釐清。
圖一 : 立體幾何方程式。3D空間中一個點的景深,與該點在左右攝影機的視差成反比。 |
|
立體視差計算和距離計算的精確度
圖二的三張圖顯示視差與物體距離的關係,首先注意到的是,視差和物體距離成反比。一個物體距離立體攝影機愈近,視差就會愈大,反之亦然。理論上,一個零視差的點距離攝影機無限的遠。具體而言,以圖二(a)系統的選定物理參數,一個畫素視差代表大約700公尺的距離,二個畫素視差,距離大約350公尺,這是非常大的解析度差異,如果視差計算失誤一個畫素,估算的距離就會產生很大的錯誤 (100公尺以上的距離)。對於較短的距離(圖二曲線下半部,小於50公尺處),距離計算的解析度能獲得大幅改善,從曲線下半部密集的距離計算點可得到明證,在此區塊內,視差計算失誤一個畫素 (或更少),距離的誤差大約2~3公尺。
圖二 : 計算精確度與距離和視差的關係。視差計算的畫素精確度提升,距離的精確度也相對提高。該計算基於(a)兩台攝影機相距30公分(b)焦距10釐米(c) 畫素大小4.2微米。 |
|
有些方法可以改善系統的精確度,如圖二(b)和(c)所示,如果視角計算以半畫素或四分之一畫素執行,距離計算的解析度會成正比提升。在這些情況下,100公尺以上、300公尺以下的距離,連續視角增加的計算距離解析度會提升30~40公尺。100公尺以下的距離,精確度可優於50公分。重要的是,對近距離防撞系統而言,精確度必須最大化(最好小於10公分),但與此同時,立體攝影機的工作範圍必須獲得改善,即使得稍微犧牲精確度。
ADAS系統的立體攝影機工作範圍
如果再回顧一下基礎的立體方程式(圖一),要增進系統的最大範圍,很明顯的低視角的距離計算必須正確。這可以從下列方式獲得實現,每一個方法都必須和機械或電子設計以及最終的系統成本之間取得平衡。
(1):使用較小的畫素尺寸(例如一半),其他不變,範圍可以提高50%(精
確度相同)。(2):增加兩台攝影機之間的距離。如果“T”的長度加倍,其他不變,範圍可以提升50%(精確度相同)。(3):改變焦距。如果“f”的長度加倍,其他不變,範圍可以提高50%(精確度相同),但視野縮小。(4)使用擁有子畫素精確度的運算系統計算立體視角。
(2)和(3)的選項雖在數理上可行,但卻對系統的硬體特色造成困擾。當汽車裝載立體系統時,通常會以固定的角度安裝,系統也必須愈小愈好。這樣的美學考量與增加攝影機間的距離(T)或拉長焦距(f)相違背。因此,要安裝大範圍的高精確度立體距離計算系統,最可行的選項只剩下(1)和(4)。
流程
圖三顯示計算立體視差的數據流程和運算鏈高階方塊圖。請注意,其中並沒有像上篇提及的SFM方塊圖一樣有攝影機校準步驟,也不須像密集立體視差演算法一樣需要尋找特徵。SFM距離計算法是基於物體的大小來計算距離,因此辨識特徵和物體是必要的。
圖像秩轉換通常是立體圖像處理流程的第一或第二個步驟。此步驟的目的是確保兩個圖像的連續區塊比對不易受到真實世界干擾的影響,例如左、右圖像的照明或亮度變化。許多因素會造成變化,例如兩台攝影機因為不同視角、快門速度和其他抖動偽像的細微差異,導致攝影機在不太一樣的時間點拍下左、右圖像,造成亮度不同。
有許多研究論文和方法論提出各種不同的圖像秩轉換選項,並分析它們如何影響視差計算的強固性。圖三的圖像校準步驟,確保連續視差計算能沿著水平對極搜尋線進行。接下來的流程步驟就是實際計算視差、運算信心水平和後處理。密集的視差計算大多是在空間域執行,雖然有些方法建議在頻域計算視差。
這些方法試圖利用可以相對快速計算大FFT這個優點,但FFT有其缺點使它無法專美於前。本文無須對此深入討論,但持平而言,大多數 (如果不是全部的話) 商品化的立體視差演算法都是在空間域實現。在最基礎的層次上,此分析法要求必須為左圖像(已轉換)的每一個畫素,選取一小塊圍繞著它的畫素區塊。
接著,沿著對極(水平)線搜尋右圖像(已轉換),直到找到相同區塊的位置。每一個可能的視差值(從1到最大值64或128或其他任何數值)都要執行這樣的計算。左邊和右邊區塊的差異(或關聯性)會趨近於最小(最大),接近畫素真正的視差值。使用「移動視窗」執行區塊比對或匹配以計算區塊移動的範圍,得出的結果再用來計算3D空間中特定畫素的距離。此流程如圖四所示。
使用SAD算法搜尋視差雖然簡潔但有時太過於簡單。此算法的基本前提是,給定的畫素區塊視差是相等的,但這在物體的邊緣幾乎不可能。物體邊緣的小畫素區塊,視差會劇烈變化,傾斜或彎曲的表面則微幅改變。
如圖五Middlebury圖片集的「錐體和面具」清楚說明此一事實。在一個圓錐(略微傾斜的表面)上發現的相鄰像素,視差改變微小,物體邊緣的視差差異則較大。使用簡單的SAD算法及秩轉換,兩邊的遮擋都留下很大的視差孔,如同僅在一台攝影機和物體邊緣才會看見的偽影。
圖五 : Middlebury圖片集的圓錐和面具。使用簡單的SAD執行視差計算,視差在曲面上保持輕微變化,而在物體邊界急劇變化。觀察圖的右上方圍欄視差孔、物體不連續、以及圖左側遮擋的情形。 |
|
更好的方法是「半全域比對法(semi global matching, SGM)」。該方法針對多於一個方向(4、8或16)的每個像素計算平滑度代價函數。代價函數計算如圖六所示,目的是為每個像素優化多方向的代價函數S(p,d),並確保平滑視差圖。SGM的原始文件建議用16個方向優化代價函數,而實作上已經嘗試了2、4和8個方向。
SGM代價函數和優化算法的具體實現如圖七所示。使用偽代碼段,可以很容易進行記憶體、運算效能和最終的硬體複雜度條件評估,即時實現SGM運算。
視差計算對運算效能和記憶體的需求
可想而知,上述計算對ADAS應用來說是很重的運算負擔。一個典型的前置立體攝影機裝置,是一組以每秒30格的速度進行拍攝的1百萬畫素攝影機。視差計算處理的第一步驟是秩轉換。典型的秩轉換是Census Transformation轉換或略微修改的版本,兩者所需的輸入都是立體影像,輸出則是經過Census Transformation轉換的影像對。
以畫素點為中心的N×N區塊所需的Census Transformation運算,是執行6,000萬次N×N Census Transformation轉換。每一次對N×N區塊的畫素進行Census Transformation轉換,需要N2次比對運算。其他涉及的秩轉換需要對每個畫素進行N2次點排列。保守估計,未來幾年實際部署在車輛上的系統,最少須進行6,000萬x N2次的秩轉換比對運算。
流程的第二步驟是影像校準,以利極線視差搜尋在水平線上進行。第三步驟比較有趣,它針對每個畫素和視差組合計算C(p,d),Lr(p,d)和S(p,d)(參見圖七)。如果C(p,d)按區塊進行SAD操作且區塊大小是N×N,所需的系統範圍大約200公尺,距離精確度以半畫素視差計算,則系統需要計算C(p,d)用於64-128種視差可能性。使用這些參數的C(p,d)的總運算需求為每秒執行6,000萬 × N2 × 128次SAD操作。Lr(p,d)的計算則須對每個畫素在“r”個可能的方向進行運算,因此必須進行6,000萬x128 x r次計算。一個畫素的計算需要五次加法運算(如果把減法當作一種特別形式的加法)和一次最小偵查蒐尋操作。加總起來,每秒的Lr(p,d)的計算需要6,000萬 × 128 × r × 5次加法和6,000萬 × 128× r次最小值計算。
圖八 : 影像秩轉換範例。圖的左邊是簡單的Census Transformation轉換,右邊稱為「全秩轉換」。 |
|
對於每個可能的畫素和視差值,S(p,d)計算需進行r次,每次計算S(p,d)需要“r”次加法和一次比對。執行此計算的每秒總操作數為6,000萬 × 128 × r 次加法和6,000萬 × 128次比對。將這三個計算相加,一個精確的SGM視差計算引擎,運行在1百萬畫素每秒30格的攝影機上,進行128個視差可能性計算,每秒必須執行大約1 Tera的操作 (加法、減法、尋找最小值)。
和這個數字相較,先進的通用嵌入式處理器每一個周期發出7到10個指令,其中一些指令是SIMD類型,亦即它們可以平行處理8-16段數據。倘若通用處理器使用最佳的IPC,以2 GHz運行的四核處理器將提供約320G的64位元操作。即使我們認為大多數的立體管線將是16位元,而且可以100%的效率將數據封包在64位元倉,但四核通用處理器仍不足以滿足現代ADAS立體視覺系統的需求。通用處理器的目標是提供各種高階可編程性,這意味著設計即時ADAS立體視覺系統需要專用的硬體。
計算方法的強固可靠性
ADAS視覺系統的目的是避免或起碼將道路事故的嚴重性降至最低。每年有120多萬人因交通事故死亡,成為15至29歲人口的主要死因。行人是最脆弱的道路使用者,每年有超過25萬行人受傷。駕駛人注意力不集中或疲勞駕駛是道路交通事故的主因。因此,ADAS視覺系統的緊急剎車功能,最重要的目的是降低事故的嚴重性和頻率。然而,這是一個雙面刃的需求,因為視覺系統不僅必須針對每一格影像和每一秒精確可靠地估算距離,而且還必須使誤報的情況降至最低。為了確保ADAS系統的規格和設計達到適當的強固性,ISO 26262被制定作為汽車安全應用電子系統的規範、設計和開發的國際標準。
在此進行一點算術,可以得知立體視覺系統計算距離時可能產生的誤差。圖九顯示,如果焦距(f)和攝影機距離(T)的容許誤差是1%,視差計算演算法的精確度是5%,那麼計算出來的距離(Z)就會產生大約2.5%的誤差。因此,將視差計算法的準確度提高到子畫素(四分之一或二分之一畫素)水平是很重要的。這有兩個意涵:第一個是提升演算法和硬體的後處理插值計算要求,第二個要求更複雜,而且與ISO 26262相關。
架構和設計需確保電子零件的瞬時和永久性錯誤,能在系統的容錯時間間隔(FTTI)內被檢測和標記出來。FTTI和其他相關指標的評量並非本文要討論的,只要記得用於建構系統的電子零組件,必須能夠實現ADAS視覺系統所需的ASIL級別就夠了。
本文中,我們檢視各種通用和立體視覺演算法的成效,特別是用於計算汽車ADAS安全緊急煞車系統距離的選項。而TI目前正在推動ADAS處理領域的深度創新,特別是高效、強大的立體視覺處理。也有許多不同的電子系統選項,可以實現ADAS安全視覺系統的設計和效能目標。例如,TI(TDA系列)的異質晶片架構特別能夠滿足此一特定應用的效能、功耗、尺寸和ASIL功能性安全目標。
(本文作者任職於德州儀器)
@刊頭圖(Source:Sports and Mobiles Knowledge Blogs)