朱春媚,張文康
(電子科技大學中山學院機電工程學院,中山 528403)
道路劃線是公路建設的重要組成部分,隨著公路的不斷興建和城市交通管理的智能化,道路劃線的工作量日益增多。目前道路劃線設備以手推劃線機和車載劃線機為主,兩種劃線機劃線時均需要提前人工劃好道路基準線,再以道路基準線為參考基點劃出其它的道路標線。人工繪制道路基準線包含人工測量、標位點和放樣線等環節,勞動強度大、效率低且繪制質量容易受人為因素影響[1]。如果能夠自動檢測到劃線噴頭與道路邊緣的距離,則可根據設定距離與實際距離的偏差,自動調整劃線噴頭的位置劃出基準水線,省去原有的人工測量、標位點和放樣線工序。因此,劃線噴頭與道路邊緣的距離檢測是實現自動劃線的關鍵。目前道路邊緣測距主要有超聲波測距和機器視覺測距兩類。楊慶鳳等[2]提出了一種超聲波測距技術,通過超聲波實現劃線機與道路邊緣之間的距離測量;王珩[3]也采用超聲波測距技術獲得劃線機與道路邊緣的距離來實現定位。超聲道路邊緣測距一般以護欄或路緣石作為參考點,測量劃線噴頭與護欄或路緣石的距離,該方法具有結構簡單、成本較低的優點,缺點是要求道路有連續的路緣石,且容易受溫度、汽車行駛產生的風噪和發動機噪聲的影響,因此適用面較小。機器視覺道路邊緣測距是通過圖像傳感器捕捉道路邊緣圖像,利用圖像處理的方法計算得到攝像頭與道路邊緣的距離,該方法受道路條件影響小,是目前主流的測距方法。如苑瑋琦等[4]、陳連勇[5]和李志鵬[6]等均采用圖像傳感器采集道路信息,通過Hough 變換檢測道路邊緣實現測距。機器視覺測距通常用到復雜的圖像處理方法,需要上位機進行計算,硬件成本較高,不適用于嵌入式道路劃線定位控制裝置。鑒于此,本文提出一種基于雙目相機深度圖的道路邊緣測距方法,通過檢測深度圖中道路邊緣的中心點實現測距。
基于雙目相機深度圖的道路邊緣測距方法總體流程如圖1所示。采用張正友標定法進行雙目相機參數標定,獲得相機的內部參數和外部參數,并通過調整標定棋盤格的拍攝角度和距離來減少畸變系數,達到畸變校正的效果;采用BM 算法計算左右圖像對中對應匹配點對之間的視差值獲得深度圖;通過二值化、腐蝕膨脹和尋找最大色塊的方法檢測深度圖中的道路邊緣中心點,最后通過坐標轉換獲得雙目相機與道路邊緣的橫向距離。
為了計算圖像坐標系與世界坐標系之間的相對位置關系,需對雙目攝像頭進行參數標定以獲得攝像機的內參數和外參數。攝像機標定法主要有傳統標定法、自標定法、主動視覺標定法和張正友標定法,其中張正友標定法先通過線性模型求出攝像機內外參數的最優解,然后采用最大似然估計法精確非線性求解得到攝像機的內外參數,具有操作簡單和精度高等優點,被廣泛用于雙目相機標定[7]。
本文采用張正友標定法,通過Matlab 內置的Stereo Camera Calibrator APP 實現雙目相機標定。首先用雙目相機獲取棋盤格標定板圖像對,然后提取每組圖像的角點,在提取角點的過程中,應盡量讓標定棋盤格占據盡可能多的畫面,可以得到更多有關攝像頭畸變方面的消息。點擊Calibrate 進行計算,可得到各組照片標定結果的反投影誤差,點擊Export Camera Parameters 來獲取攝像頭的標定參數,得到的左右攝像頭單獨標定參數如圖2 所示。其中IntrinsicMatrix 是攝像頭的內參,RadialDistortion和TangentialDistortion 分別為徑向畸變系數和切向畸變系數。
為了獲得較好的標定參數,減少徑向畸變系數和切向畸變,本文分別采用標定紙和標定板進行標定,得到標定數據分別如圖3 和圖4 所示,可見標定紙和標定板的平均反投影誤差分別為0.28 像素和0.10 像素,標定板的標定效果明顯優于標定紙。

圖3 標定紙的標定數據

圖4 標定板的標定數據
在進行攝像頭標定時,可以通過拍攝不同角度或者距離的棋盤格圖案來獲取攝像頭內參和畸變系數,選擇畸變系數最佳的一組,通過減少標定誤差達到畸變校正的效果。
通過立體匹配計算左右圖像匹配點對之間的視差值獲得深度圖。立體匹配是立體視覺系統的關鍵步驟,也是核心技術,其基本思想就是利用雙目圖像中的像素對應關系來計算物體在空間中的位置和距離[8-9]。BM(block matching)算法[10],其本質是一種塊匹配算法,使用的是SAD(sum of absolute differences)匹配代價計算方式,通過選定一個左像素,在右圖像范圍中尋找最佳像素點與之配對,形成像素對,然后計算絕對差值之和,SAD 的值越小,說明匹配的效果越好[11]。BM 算法最大的優點就是計算速度快,適合移植用于嵌入式系統。本文采用BM 算法計算深度圖,得到的深度圖如圖5所示。

圖5 BM算法深度圖、右視圖和左視圖
對BM 算法獲得的深度圖通過圖像處理的方法檢測道路邊緣的中心點,包含二值化、腐蝕、膨脹和尋找最大色塊圖像運算。
首先,通過全局閾值法實現圖像二值化,其思想是將整個圖像的像素值與一個設定的閾值進行比較,將大于該閾值的像素設置為白色,小于該閾值的設置為黑色,如公式(1)所示。
其中,g(x,y)為運算后像素值,f(x,y)為原像素值,T為閾值,本文取T= 125。
然后,對二值化后的深度圖先腐蝕后膨脹,腐蝕的作用是消除物體邊界點,使目標縮小,可以消除小于結構元素的噪聲點;膨脹的作用是將與物體接觸的所有背景點合并到物體中,使目標增大,可添補目標中的空洞。對深度圖進行腐蝕膨脹運算,可以消除二值化深度圖中高亮物體的孔洞,讓深度圖更加平滑、均衡。
最后,通過尋找最大色塊提取道路邊緣區域,把道路邊緣以外的像素全部置零后,計算得到道路邊緣中心點的像素坐標(i,j)。道路邊緣中心點的繪制效果如圖6所示。

圖6 道路邊緣中心點檢測結果
根據深度圖中道路邊緣的中心點在相機坐標系中的坐標以及相機的內部參數和外部參數計算攝像頭與道路邊緣中心點的距離。具體步驟如下:
首先,計算道路邊緣中心點在相機坐標系的坐標。設像素點(i,j)的深度值為D(i,j),相機的內參(fx,fy,u0,v0)已經通過相機標定得知,則該像素點在相機坐標系的計算公式如下:
然后,將相機坐標系中的坐標轉換為世界坐標系。設相機的外部參數為旋轉矩陣R和平移向量T,則該道路邊緣中心點在世界坐標系中的坐標為
(Xw,Yw,Zw)即是道路邊緣中心點的三維坐標。設雙目相機中心與圖像道路邊緣中心點的實際距離為d,雙目相機中心與實際道路邊緣的橫向距離為h,相機與道路橫向的夾度為α,則有:
采用400萬像素的雙目相機采集道路邊緣圖像,相機與道路橫向的夾度為α=30°。在Matlab2010進行雙目攝像頭標定,采用Python3.10.11 進行圖像處理與計算。實驗結果見表1,平均相對誤差為2.96%。

表1 測量結果及相對誤差
提出一種基于雙目相機深度圖的道路邊緣測距方法,包含雙目相機參數標定、深度圖計算、道路邊緣中心點檢測和距離計算四個步驟。其中雙目相機參數標定采用廣泛使用的張正友標定法,獲得相機的內部參數和外部參數,并通過調整標定棋盤格的拍攝角度和距離來減少畸變系數,達到畸變校正的效果;為了兼顧計算精度與速度以適用于嵌入式系統使用,采用計算速度較快的BM 算法計算左右圖像匹配點對之間的視差值獲得深度圖;通過二值化、腐蝕膨脹和尋找最大色塊等圖像處理方法檢測得到道路邊緣中心點,最后通過道路邊緣的中心點在相機坐標系中的坐標,以及相機的內部參數和外部參數,計算攝像頭與道路邊緣中心點的距離,完成測距。本文方法可用于嵌入式道路劃線定位控制系統,根據檢測的距離控制執行裝置實現道路劃線噴頭的自動定位。