宇文旋 趙明明 陳 龍
1.電子科技大學機械與電氣工程學院,成都,6117312.中山大學數(shù)據(jù)科學與計算機學院,廣州,510006
基于計算機視覺的環(huán)境感知是無人車行駛環(huán)境識別的重要手段,常見的視覺系統(tǒng)包括單目視覺系統(tǒng)和雙目(多目)視覺系統(tǒng)。相較單目系統(tǒng),雙目系統(tǒng)不僅能獲得場景的灰度信息,還能通過計算獲得場景的深度信息,使無人車能夠實時獲取障礙物的形狀、位置、姿態(tài)、運動以及與無人車自身的相對位置等關鍵信息,為無人車的自主運行提供支持。相較于昂貴的激光雷達系統(tǒng),相機價格便宜且信息量更加豐富,因此基于雙目視覺的場景深度信息提取一經(jīng)提出便成為無人駕駛領域的研究熱點之一。為了使無人車有更快的反應能力,必須為相機提供足夠大的視野。傳統(tǒng)的針孔成像攝像機視場角往往只有40°~60°,難以滿足要求。
魚眼鏡頭是一種特殊的鏡頭,焦距短、視角大,能夠在單張照片中包含更多的信息,具有獨特優(yōu)勢。國內(nèi)外研究人員對單目魚眼相機[1-2]、雙目魚眼相機從理論和應用方面進行了廣泛的研究。雙目魚眼相機方面的研究有:褚光宇[3]研究了一般鏡頭的雙目視覺定位模型,以此為基礎討論了基于魚眼鏡頭的雙目視覺定位模型;熊文莉[4]以魚眼雙目立體視覺系統(tǒng)為研究對象,針對魚眼圖像變形嚴重、匹配難度大的問題,提出了適合未經(jīng)矯正的魚眼圖像的匹配算法;HENG等[5]提出了一種基于平面掃描的魚眼鏡頭雙目稠密匹配算法,該方法能夠直接獲取魚眼圖像的視差,但是需要多個預先設置好的平面來尋找環(huán)境中物體的接近位置,算法的復雜度較高。關于雙目魚眼相機的應用研究有:ZHAO等[6]提出了一種基于建筑物角點的城區(qū)建筑重建模型,基于汽車直行的位移計算出建筑高度,該方法簡單直觀,但是適用范圍??;BOUTTEAU等[7]利用Canny算法對魚眼圖像上的車道線進行邊緣檢測,并將較長的線段投影到單位球面并驗證能否過球心成圓,以此來判斷檢測到的是否為真正的車道線;此外,CAO等[8]開發(fā)了一種基于魚眼鏡頭的機器人視覺導航系統(tǒng)并應用在自動導引運輸車(automated guided vehicle,AGV)上;DRULEA等[9]利用魚眼鏡頭對機器人周圍環(huán)境進行了三維重建并獲得了較高的障礙識別率。
通過文獻分析可知,現(xiàn)有的結合魚眼相機和雙目系統(tǒng)的研究并不多,尤其在以下兩個方面的研究有待深入:①基于魚眼相機的雙目系統(tǒng)成像模型及其與針孔雙目模型的轉化分析;②針對魚眼圖像矯正后像素缺失特點的圖像插值算法研究。
針對以上問題,本文提出一種結合魚眼相機模型與傳統(tǒng)匹配算法的雙目視覺算法,并通過場景深度提取試驗對該模型和算法進行了試驗驗證。
目前大多雙目視覺系統(tǒng)的模型都是基于針孔相機的,包括雙目平行模型、雙目匯聚模型、雙目軸向模型等[10],其中基于針孔相機的平行雙目視覺模型是現(xiàn)在雙目系統(tǒng)最常用的視覺模型,圖1為其示意圖。圖1中,兩個攝像機坐標系統(tǒng)的各對應軸完全平行,且x軸重合,兩個相平面均與世界坐標系的xy平面平行。兩個鏡頭的焦距均為λ,兩鏡頭中心連線稱為系統(tǒng)的基線,其長度為B。同一個3D空間點分別對應兩個相平面坐標點,這兩點之間的位置差稱為視差。一個3D空間點W到成像平面的距離Z稱為這一點的深度。
圖1 針孔平行雙目視覺模型Fig.1 Pinhole parallel binocular vision model
圖2為模型在xy平面的投影圖,下面根據(jù)圖2計算一點視差與深度的關系。由W點坐標X與其在第一個成像平面上投影點坐標X1間的三角相似的關系得
(1)
圖2 針孔雙目視差計算原理圖Fig.2 Pinhole binocular parallax calculation principle
再考慮點W坐標X與其在第二個相平面上投影點坐標X2間的三角相似關系得
(2)
兩式聯(lián)立,消去X,得視差
(3)
從中可得深度
(4)
式(4)把深度與視差直接聯(lián)系起來,因此在已知基線和焦距時,確定一點在左右成像平面的視差d后,就能方便地計算出其深度。
完整的雙目深度提取過程是圍繞上述計算模型展開的,主要包括以下4步:
(1)雙目系統(tǒng)標定。其目的是根據(jù)有效的成像模型確定相機的內(nèi)外部參數(shù)和相對位姿,以便正確建立空間坐標系中物點與它在平面上像點之間的對應關系。
(2)圖像獲取與矯正。圖像獲取是指用雙目系統(tǒng)同步采集場景圖片,因為相機在采集圖像時采用的鏡頭類型以及制造誤差的存在,使成像過程并非理想的針孔模型,所以,為了使用上述計算模型,需要根據(jù)標定參數(shù)對圖片進行校正。
(3)雙目匹配。根據(jù)圖像的灰度特征建立左右兩目圖片像素間的對應,并由此得到相應的視差圖像。
(4)深度信息獲取。根據(jù)視差圖恢復場景的深度信息,其原理如本節(jié)所述。
以上步驟不僅適用于針孔雙目系統(tǒng),也可用于魚眼雙目系統(tǒng),但魚眼雙目系統(tǒng)采用了非線性的魚眼鏡頭,因此不能直接使用針孔雙目模型,需要研究魚眼雙目系統(tǒng)的模型,以及其與針孔雙目模型的轉化關系,進而對魚眼圖像的變形進行矯正。同時由于魚眼鏡頭大畸變會導致矯正后的圖像產(chǎn)生嚴重像素缺失,因此需要研究有效的插值算法。
大多數(shù)應用場合,由于魚眼相機具有大的視野范圍,故采用橫向平行布局即可滿足視野要求。
對于圖3所示小型無人車的魚眼雙目系統(tǒng),可建立圖4所示模型。
圖3 魚眼雙目視覺無人車Fig.3 Unmanned vehicle with fisheye binocular vision
圖4 魚眼平行雙目視覺模型Fig.4 Fisheye parallel binocular vision model
模型由左右兩個平行放置的魚眼相機組成,模型中的球面表示以鏡頭光心為中心點的單位成像球面。平面表示實際的成像平面,球面中心與成像平面的距離為焦度f??臻g一點W在左右成像平面的成像點分別為W1和W2,下面具體分析其成像過程。
與透視投影成像的過程不同,魚眼相機的成像過程是非線性的,如圖5所示。它可以被分為三步:①空間點W被映射為連接W與投影中心O的射線OW;②將射線OW線性地映射到單位球面上,得到球面透視投影圖像W′;③將球面點W′非線性地映射到像平面上,得到魚眼圖像W″。球面點W′經(jīng)過非線性映射得到魚眼圖像點W″,用公式形式化表示為
W″=D(W′)
(5)
圖5 魚眼相機成像原理圖Fig.5 Fisheye camera imaging principle
D被稱為魚眼變形模型。D是可逆的,每一個球面點唯一地對應一個魚眼圖像點,而每一個魚眼圖像點也唯一地對應一個球面點,因此有
W′=D-1(W″)
(6)
D-1被稱為魚眼變形校正模型,如圖6所示。
圖6 魚眼圖像矯正原理圖Fig.6 Fisheye image correction schematic
矯正魚眼圖像就是找到魚眼圖像點到球面點之間的映射關系D-1。得到點的球面坐標W′以后,再根據(jù)相機成像平面與單位球面的幾何關系,將魚眼圖像轉化為針孔相機模型下的圖像,從而實現(xiàn)圖3模型到圖1模型的轉換。
魚眼鏡頭在獲得大視野的同時,也產(chǎn)生了較大的畸變,尤其是邊緣部分,圖像壓縮扭曲較為嚴重。文獻[1]介紹了一種圖像矯正的方法,但是在重投影的過程中,圖像出現(xiàn)了呈網(wǎng)狀分布的區(qū)域像素缺失。為了展示圖像缺失的狀況,將一張所有像素值都為255的全亮魚眼圖像按照文獻算法進行矯正,結果如圖7所示,其中像素缺失的點像素置為0。由圖7分析可知,圖像邊緣處像素缺失較嚴重,甚至出現(xiàn)許多黑色區(qū)域,這使得重投影后的圖像不利于進行雙目匹配,需要對其進行插值計算。
常見的插值算法有最近鄰插值、雙線性插值等,但是算法一般要求較豐富的初始像素密度,用于重投影圖像的插值效果不好。本文根據(jù)重投影圖像素稀疏且不均勻的特點,結合試驗,提出了一種基于鄰域相似的圖像插值算法。
本文設計的插值算法基于圖像點周圍3×3的矩陣進行插值,基本思想是:重投影后的空缺點和周圍的像素點存在聯(lián)系,并且趨近于周圍大多數(shù)像素點的近似。采用余弦相似度來衡量近似,余弦相似度的定義如下:
(7)
其中,Vi和Vj為根據(jù)待插值點周圍的像素構建的向量,θ為任意兩個構造向量之間的夾角。下面結合實例,對所需向量的構建和算法原理作進一步說明。
如圖8所示,在待插值點周圍檢測有像素的點,生成一個n×n的矩陣,n為待插值點周圍有像素點的個數(shù),計算每個行向量分別與其他向量的夾角的余弦值;然后對于余弦值的矩陣進行去0操作并把每一列相加,減去其中的最大值和最小值,再在最后形成的行向量中,找到最大值所在的列,則其在最初形成的行向量中相同位置即為要插值的像素。
圖8 算法原理實例說明圖Fig.8 Algorithm principle explanation
根據(jù)上述原理,實現(xiàn)了一種具體算法,算法的偽代碼見圖9。
(1)讀入重投影圖像image、對應的掩碼mask及插值的次數(shù)times,mask表征需要處理的像素區(qū)域。
(2)獲取圖像的行列數(shù),分別記為row、column。
(3)生成一個大小為(row+2)×(column+2)的空矩陣img,在空矩陣img中[(2,2),(row+1,column+1)]的位置插入image。
(4)將mask的值復制給next_mask。
(5)遍歷img中[(2,2),(row+1,column+1)]的位置,即根據(jù)times,循環(huán)如下操作:①對于img(i,j),判斷其是否需要插值,若需要插值,執(zhí)行下一步,否則繼續(xù)循環(huán);②根據(jù)img(i,j)周圍
Algorithm 1 Main steps of the interpolation algorithmRequire: vector win, pixel coordinates (x, y)Ensure: interpolated pixel img(x, y) wColumn is the column number of win. ifwColumn < 3 then img(x, y) = win(1) else A is a matrix of size 1 × wColumn arr = win·A arr = [arrT, winT] cosResult is a zero matrix of size wColumn × wColumn for alli = 1 ∶ wColumndo for all j = i + 1 ∶ wColumndo cosResult(i, j) = (arr(i, :)· arr(j, :)T)/ (norm(arr(i, :))· norm(arr(j, :))) cosResult(j, i) = cosResult(i, j) end for end for Remove zero values in cosResult and reshape it into a matrix of size wColumn× cosSum = sum(cosResult, 1) - min(cosResult, [], 1) - max(cosResult, [], 1) img(x, y) = win(max ID(cosSum)) end if After the image is restored through interpolation algorithm, do median filtering:img = medfilt2(img)
圖9 算法偽代碼
Fig.9 Algorithm pseudo code
8個方向在mask中值為1的位置生成一個n維向量v;③根據(jù)這n個位置生成其他n個n維向量v_neig[n],每個v_neig向量都用該位置的值進行填充;④利用與v所成夾角余弦值最大的v_neig中的值,對img(i,j)的值進行填充;⑤next_mask(i,j)的值賦為1;⑥將next_mask的值賦給mask。
(6)將img中[(2,2),(row+1,column+1)]區(qū)域的子矩陣賦值給image。
(7)用L×M大小的模板,對image進行中值濾波,并把結果再次賦值給image。
(8)返回image。
圖10展示了原圖到矯正圖,最后得到插值后圖像的整個過程。由圖10可看出算法能完整地恢復圖像的信息,且能較好地保留圖像細節(jié)。
(a)魚眼圖像原圖 (b)矯正圖
(c)插值圖圖10 魚眼圖像原圖、矯正圖、插值圖Fig.10 Fisheye image artwork, correction map, interpolation map
雙目視覺的最終目的是提取場景的深度信息,深度信息提取的好壞可以反映出模型及算法的優(yōu)劣。為了對比本文模型和算法的性能及其在實際場景中深度信息提取的情況,分別設計了模型對比試驗、插值算法對比試驗和場景提取試驗。試驗中魚眼雙目模型的視差計算全部按照圖11所示過程進行。
圖11 魚眼雙目系統(tǒng)深度提取過程Fig.11 Process of depth extraction
(1)試驗目的。通過傳統(tǒng)雙目模型及魚眼模型對場景識別的對比試驗,說明魚眼雙目模型與傳統(tǒng)雙目模型在實際場景使用時,所獲得的深度圖像的具體差異及魚眼雙目模型相對傳統(tǒng)雙目的優(yōu)勢所在。
(2)試驗裝置。為了進行對比試驗,搭建了圖12所示的簡易試驗裝置,裝置包括上方兩個配有普通鏡頭的相機和下方兩個配有魚眼鏡頭的相機,相機的位置相對固定。這樣相機在采集場景數(shù)據(jù)時,位置基本相同。同時各相機采集圖像的過程是同步的,從而盡量保證除了鏡頭不同外,其他變量保持一致。場景數(shù)據(jù)采集時,此裝置安裝于圖13所示的無人電動汽車的前部。
圖12 雙目模型對比試驗裝置Fig.12 Binocular model contrast test equipment
圖13 試驗所用電動汽車Fig.13 Electric vehicles used in the test
(a)T形路口1 (b)T形路口2圖14 試驗場景Fig.14 Test scene
(3)試驗過程 在校園的道路上選取了圖14所示的兩種試驗場景,包括T形路口1、T形路口2。其中,T形路口1場景圖像采集時,為了安全起見,采用了圖15a所示的模擬場景,用停泊于路邊的汽車來代替T形路口1右面行駛來的車輛。
(a)T形路口1
(b)T形路口2圖15 魚眼雙目模型與傳統(tǒng)雙目模型對比試驗結果Fig.15 Interpolation algorithm comparison test results
(4)試驗結果分析。圖15給出了a、b兩組對比試驗的部分結果,每組圖像由4個圖組成,包括左上方的左目魚眼圖像的矯正圖,右上方的魚眼雙目模型提取的視差圖,左下方的左目傳統(tǒng)圖像的矯正圖,右下方的傳統(tǒng)雙目模型提取的視差圖。
在a組試驗結果中,由于魚眼雙目模型有更大的視野范圍,所以提取的深度圖像中能夠分辨出路邊的模擬車輛,從而為無人車的環(huán)境感知提供更多的場景信息;而傳統(tǒng)雙目模型的視野則沒有覆蓋路旁的模擬車輛,從而導致重要的場景信息缺失。b組試驗結果顯示,在T形路口2場景中,魚眼雙目模型可以利用其視野范圍大的優(yōu)勢,得到左右兩側較大區(qū)域的實時狀況,使無人車的決策有更多的信息支撐;而傳統(tǒng)相機在這種場景下則完全發(fā)揮不了作用,其視野主要覆蓋了前方?jīng)]有道路的區(qū)域,從而使無人車對左右的場景完全失去感知。
(5)試驗結論。通過對比試驗發(fā)現(xiàn),魚眼雙目模型與傳統(tǒng)雙目模型相比,主要優(yōu)勢在于其具有較大的視野范圍,使其在交通環(huán)境中可以獲得更多的場景信息。尤其在T形路口等需要無人車全面獲取不同分叉口交通信息的場景,魚眼雙目模型的優(yōu)勢更加明顯。
插值算法對比試驗的目的是對比本文算法與現(xiàn)有算法的性能,在此選取了最近鄰插值、諧波插值和連貫性插值3種算法作對比,試驗以道路場景行人深度提取為目標,分別采用本文算法和對比算法對目標深度進行提取,提取過程除插值算法不同外,其他步驟嚴格一致,試驗結果如圖16所示。
由圖16可知,相較于現(xiàn)有插值算法,本文算法提取的視差圖目標輪廓清晰,層次分明,有較好的辨識度和三維信息表達能力。
為了進一步探究本文算法性能,設計了室內(nèi)外場景下的深度信息提取試驗。
(a)余弦相似插值
(b)諧波插值
(c)連貫性插值
(d)最近鄰插值圖16 插值算法對比試驗結果Fig.15 Interpolation algorithm comparison test results
室外場景的試驗以城市道路上的行人檢測為基礎,研究本文算法在實際道路場景下對行人深度信息的提取情況。為了安全起見,試驗在校園道路上進行。試驗中無人車以慢速行駛,前方行人進行了雙臂向上、雙臂張開、側身、左向行走、右向行走等動作,無人車通過本文所述魚眼雙目系統(tǒng)同步采集了前方行人的圖像,并分別根據(jù)本文算法提取了場景的視差圖像。由于篇幅的限制,故僅給出圖17所示部分試驗數(shù)據(jù),左側為左目矯正以及插值后的圖像,右側為根據(jù)本文魚眼雙目模型及插值算法所得視差圖。
由圖17可見,所得深度圖像能有效反映出行人的位置、行人的動作、行人距離車輛的距離、行人的運動狀態(tài)等信息,為無人車的局部環(huán)境感知和安全駕駛提供了有效的數(shù)據(jù)支持。
此外,為了研究本文算法對場景對象的空間層次關系的處理能力,采用同一輛無人車的魚眼雙目系統(tǒng),以人、方形鐵箱、紙盒為場景對象,設計了以下室內(nèi)試驗。試驗中魚眼雙目系統(tǒng)固定,方形鐵箱置于相機正前方,分別采集人在鐵箱后、人在鐵箱前、鐵箱上放置紙盒、鐵箱上不放置紙盒等不同遮擋場景的同步圖像,并提取視差圖像。部分試驗數(shù)據(jù)見圖18。
(a)雙手舉起
(b)雙手平展
(c)側身
(d)左行
(e)右行圖17 室外場景試驗部分圖像Fig.17 Outdoor scene experimental results
如圖18所示,試驗對象在視差圖中明顯可辨,對象之間的遮擋和層次關系明確,且與實際情況相吻合。說明本文算法能較好地反映對象的空間布局,有利于無人車應對實際場景下的復雜環(huán)境。
(a)人在鐵箱后
(b)人在鐵箱前
(c)鐵箱上放置紙盒
(d)鐵箱上不放置紙盒圖18 室內(nèi)場景試驗部分圖像Fig.18 Indoor scene experimental results
本文對無人駕駛車輛的魚眼雙目環(huán)境感知進行了研究。首先,對雙目相機的原理進行了簡要介紹,分析了魚眼雙目系統(tǒng)模型與針孔雙目模型的轉化關系;其次,提出了一種用于魚眼相機圖像矯正的余弦相似插值算法,算法以余弦相似衡量待插值點與周圍灰度已知點的相似性,對因重投影產(chǎn)生的像素缺失進行了有效插值;最后,通過對比試驗對本文模型和算法進行了驗證,并探究了本文算法在室內(nèi)和室外實際場景下的深度信息提取情況。試驗結果證明了本文模型和算法的合理性和有效性,研究成果對于擴大無人車的視野、提高無人車的環(huán)境感知能力有重要作用。