熊中華
摘要:本方案通過DMA進行攝像頭與單片機之間的信息傳輸,采用大津法確定二值化閥值,進行圖像分割,極大提高圖像處理速度。本文主要介紹了中心線擬合、最小二乘法補邊界線、特征點提取、十字元素與車庫元素識別與處理等算法,使智能車更平穩(wěn)快速通過多種賽道元素。
關(guān)鍵詞:DMA;大津法;最小二乘法;特征點;十字元素;
隨著汽車保有量的不斷攀升,交通擁堵、交通事故不斷頻發(fā),越來越多的國家投入到智能網(wǎng)聯(lián)汽車的研發(fā),智能網(wǎng)聯(lián)汽車多采用傳感器融合方案,視覺傳感器作為其中一種重要的傳感器,進行圖像采集。本文采用攝像頭傳感器進行圖像采集,進行賽道元素特征識別,輔助智能車快速通過多種賽道元素,對于提高城市交通智能化有著重要意義。
1攝像頭傳感器選取與安裝
1.1攝像頭傳感器選取
攝像頭傳感器是視覺檢測的核心器件,信息量豐富,相較于電磁傳感器,掃描距離更遠,有利于提前進行路徑規(guī)劃。本方案采用龍邱神眼攝像頭MT9V034作為圖像傳感器,為灰度數(shù)字攝像頭,只需3.3 V供電,分辨率為120×188,具有高動態(tài)成像、超低功耗等多種優(yōu)點,該攝像頭采用8位并行輸出,故像素點灰度值范圍為0~255。
結(jié)合智能小車循跡特點,一般會將分辨率設(shè)置為80x60,即可獲取賽道圖像處理所需數(shù)據(jù)。高分辨率,圖像會更清晰,但數(shù)據(jù)量增加,傳輸時間延長,影響圖像處理效率,如果再打開串口使用上位機,有機發(fā)光半導體(organic electroluminescence display,OLED)屏上圖像會延遲,幀率降低,也不便于調(diào)試。一般會降低分辨率提高幀率,但也會考慮算法性能,應(yīng)注重單片機處理速度與圖像刷新速度協(xié)調(diào)。
1.2攝像頭傳感器安裝
智能小車采用后輪驅(qū)動,為避免車模抖動,應(yīng)讓質(zhì)心靠后,提高小車抓地力,同時還要保證攝像頭盡量靠前,采取到更多有效數(shù)據(jù),故將攝像頭放在車模中部,關(guān)于車軸對稱。為減輕整車重量,選用空心碳素纖維管作為固定件,并用哥倆好膠水固定攝像頭角度,方便調(diào)試。
將攝像頭正裝,OLED屏幕上圖像顯示順序,從上到下依次為0~59行,從左到右依次為0~79列,一般小車前進時,近處圖像位于最大行處,遠處圖像位于0行處。
2圖像傳輸
本方案采用DMA(直接存儲器訪問,Direct Memory Access)進行數(shù)據(jù)傳輸,DMA可以進行高速數(shù)據(jù)傳輸,通過DMA控制器,可以將攝像頭等外設(shè)單元采集的數(shù)據(jù)直接傳輸?shù)轿覀兊膬?nèi)存中,只有數(shù)據(jù)傳輸開始、結(jié)束時才會與CPU(中央處理器)交流,傳輸過程中,CPU可以專心進行圖像處理;普通數(shù)據(jù)傳輸方式,每一個數(shù)據(jù)傳輸都需要依賴CPU進行,極大占用CPU資源。DMA傳輸,極大提高了單片機處理效率,故我們采用DMA進行數(shù)據(jù)傳輸。
FRM為場中斷,每當FRM管腳連接的IO 口檢測到一個沿變化,攝像頭和單片機之間開始傳輸一副圖像數(shù)據(jù);LINE為行中斷,每當LINE管腳連接的IO 口檢測到一個沿變化,攝像頭和單片機之間開始傳輸一行數(shù)據(jù);PIX為像素時鐘,每當PIX管腳連接的IO 口檢測到一個沿變化,攝像頭和單片機之間開始傳輸一個數(shù)據(jù)。需要采集一副圖像時,會先讀取到一個場信號,連續(xù)兩個場信號之間為一副完整圖像,當讀取到一個場信號后,會連續(xù)讀取到120個行信號,每兩個行信號間,會連續(xù)讀取到188個點信號。獲得一個場中斷后,開始將圖像的每一行數(shù)據(jù)存入數(shù)組,并開始進行行累加計數(shù),當計數(shù)達到120行后,會獲得下一個場中斷,一副圖像采集完畢,及時將行累加計數(shù)器清0,并置場結(jié)束標志位,開始進行數(shù)據(jù)處理。
3圖像預(yù)處理
因選用的攝像頭傳感器為灰度傳感器,無需額外進行圖像灰度化,本方案主要采用閥值分割法進行圖像分割。閥值的確定是閥值分割法的核心,常見的閥值分為:靜態(tài)閥值和動態(tài)閥值[2],靜態(tài)閥值容易受到環(huán)境光線影響,對不同環(huán)境的賽道適應(yīng)力較差;動態(tài)閥值抗干擾性強,對光照變化不敏感。為更好地適應(yīng)不同賽道環(huán)境變化,本方案采用大津法確定動態(tài)閥值。大津法(OTSU),利用統(tǒng)計學方法,讓計算機在每一張圖片上都自適應(yīng)的根據(jù)圖片整體亮度確定閾值,單片機在不同環(huán)境下都能自適應(yīng)找到不同的分割閾值,每一張圖片的閾值都不一樣,受圖像亮度和對比度的影響小,但對噪聲非常敏感。一般采集的灰度直方圖會存在兩個峰值,兩峰之間存在一個谷底,而大津法的閾值即為峰谷對應(yīng)的灰度值。
3.1大津法算法原理
假設(shè)灰度直方圖中某一灰度值,恰為峰谷,以此為閥值Threshold進行圖像分割,將一幅圖像中所有像素分成前景和背景兩部分,前景即為白色,背景即為黑色,驗證類間方差是否最大。為優(yōu)化算法性能,對傳統(tǒng)類間方差計算式作出變式,得到公式1,通過下式計算類間方差值:
σ=PP(E-E)(1)
式中:P為所有黑色像素占所有像素中的比例,P為所有白色像素占所有像素中的比例,E為所有黑色像素的平均灰度,E為所有白色像素的平均灰度,σ為方差值。
在所有灰度值中使類間方差值最大的灰度值即為二值化分割閥值Threshold。
3.2大津法算法邏輯與優(yōu)化
3.2.1算法邏輯
循環(huán)0~255個灰度值,記錄每一個灰度值對應(yīng)的類間方差值,將其與已知的最大類間方差值比較,記錄兩者間最大值,并進行循環(huán)計數(shù),當循環(huán)計數(shù)值達256次,即可確定此時最大類間方差值對應(yīng)的灰度值為二值化閥值Threshold。
3.2.2算法優(yōu)化
如果是固定賽道,可以多次試運行大津法算法,記錄對應(yīng)多種賽道元素的二值化閥值,可以得到一個灰度值范圍,比如70~140,縮小灰度值遍歷范圍,提高算法效率。賽道上光線一般比較均勻,當一幅圖像中包含噪聲和非均勻光照時,可能會造成大津法閥值不準確,而賽道圖像中部分元素灰度差別大,特別是可能會遇到上帝之光的干擾,使部分賽道光照與正常賽道光照差異較大,可以采集賽道時,隔行隔列采集,以此形成的灰度直方圖,可以有效減少噪聲和非均勻光照;面對上帝之光,也可以嘗試部分區(qū)域求大津的方法,只對賽道前半部分用大津法求二值化閥值,對圖像后半部分舍棄,因為小車往往需要近處圖像進行數(shù)據(jù)處理,及時進行賽道循跡,舍棄遠處圖像數(shù)據(jù),可以使圖像二值化數(shù)值更接近于賽道近處值,效果更好。也可將賽道劃分為遠近兩個區(qū)域,對其分別大津法求閾值,并分別加權(quán)求出更理想的二值化閾值。
一般情況下,賽道光照強,二值化動態(tài)閾值會更大,對于光斑等干擾,不易找到合適閾值,可以安裝濾光片等光學元器件改善。
3.3二值化
遍歷賽道所有像素點灰度值,如果某一像素點灰度值大于二值化閾值,則置為白點1,如果灰度值小于二值化閾值,則置為黑點0;
4圖像處理
4.1中線擬合與偏差
因為攝像頭采集到的近處圖像實際中線[4]與賽道理想中線接近,遠處圖像可能兩者差別比較大,所以我們一般選擇從近處到遠處開始掃線。從底部第59行的理想中線位置第40列開始向左向右兩方向分別掃線,找到黑白跳變點,記錄左右邊界點位置;
以向左掃線為例,當向左掃線找到一點H的值同其左邊一點J的值差值為1時,再以H點向左間隔3個點找到點K,計算點K同其左邊一點L的差值為0時,繼續(xù)以K點向左間隔3個點找到點M,計算點M同其左邊一點N的差值為0時,即可判斷找到第59行左邊界點,將其計入一個大小為60的左線數(shù)組,這種方法有效避免了噪聲、光斑對邊界點提取的影響。同理獲得第59行右邊界坐標,左邊界坐標與右邊界坐標求和后除以2,即為當前賽道第59行實際中點坐標,并將其存入中線數(shù)組。
向左掃線找左邊界原理如圖1所示。
繼續(xù)以第59行實際中點坐標為起始點開始進行第58行左右掃線,因為部分賽道如果選取理想中點第40列作為下一行左右掃線起始點,可能理想中線正好位于黑色區(qū)域,左右兩邊掃線遇到的都是黑點,黑白跳變點位置同掃線起始點間隔較遠,連貫性不好,極大地浪費CPU性能,不利于小車快速巡線。同理進行For循環(huán)向上迭代求中線,直到掃線完60行,將各行中點連接,即為實際中線。
用右邊界數(shù)組減左邊界數(shù)組,可以得到賽道寬度。從起始點第59行第40列的像素開始,向上掃線,找到白黑跳變點,用圖像總行數(shù)減去白黑跳變點的值即為賽道長度;在某些特定元素判斷中,可以使用賽道寬度、賽道長度作為輔助判斷,識別特定元素。
選取一個控制行,控制行與實際中線、理想中線交點分別為O、P,計算兩點差值作為偏差,乘以比例項系數(shù)Kp,作為PWM一部分用于小車轉(zhuǎn)向控制。也可以計算多行偏差,對遠處偏差賦予低權(quán)重,近處偏差賦予高權(quán)重,進行累加作為最終偏差,為進一步提高車速,可以針對不同賽道元素,對多行不同區(qū)域分別賦予不同的權(quán)重??刂菩械倪x取需要綜合考慮車速、攝像頭前瞻位置等,一般車速越快,控制行數(shù)值選取越小。
4.2丟線處理
對于部分特殊賽道或者當小車偏離賽道理想中線時,可能無法找到邊界線。當出現(xiàn)單邊丟線時,根據(jù)不同賽道元素,有多種處理方法,以左邊丟線為例,可以將圖像左邊框線規(guī)定為黑點0,當算法向左掃線檢測到只有第0列有黑點0的時候,即判定該點為左邊界點;也可以選擇找到某一特殊點,比如拐點,利用拐點和其他已知點進行補線,一般采用最小二乘法[5]補線處理賽道元素??梢哉业阶筮吔鐏G線前的5個左邊界點,利用公式2和公式3計算出擬合直線的K和B,將丟線后的行數(shù)依次作為縱坐標帶入公式4計算出橫坐標,補齊左邊界。
當出現(xiàn)雙邊丟線時,一般是處于特殊元素十字路口處,可以選擇存儲歷史數(shù)組的方法,用之前的實際中線數(shù)據(jù)過特殊元素。也可以選擇通過左右拐點等同時補線,通過兩邊界丟線處附件已知的5個邊界點分別擬合出兩條直線,補全左右邊界。為降低算法復(fù)雜度,也可以直接使用丟線前幾行的賽道進行直接補線,因車速、電池電量等情況,可能會不穩(wěn)定。
4.3特征點
圖2中:A點為左下拐點、B點為右下拐點、C點為左上拐點、D點為右上拐點、E點為起始行左邊界、F點為起始行右邊界。
正常直道的邊界線斜率為定值,當存在拐點時,如圖2標注所示,邊界線斜率會在拐點前后發(fā)生突變,A 為左下拐點,在A點下方的左邊界線為固定斜率的右傾直線,當從下往上掃線找邊界求中線時,突然發(fā)現(xiàn)A點上方的左邊界斜率急劇變緩,自A點開始向左接近水平生長;
B為右下拐點,在B點下方的右邊界線為固定斜率的左傾直線,當從下往上掃線找邊界求中線時,突然發(fā)現(xiàn)B點上方的右邊界斜率急劇變緩,自B點開始向右接近水平生長;
同理可知,C為左上拐點,在C點下方的左邊界線自右向左接近水平生長,斜率較小,在C點上方的左邊界斜率急劇變大;D為右上拐點,在D點下方的右邊界線自右向左接近水平生長,斜率較小,在D點上方的右邊界線斜率急劇變大。
以找左下拐點A為例,假設(shè)選取邊界點R,R點縱坐標行數(shù)為i,判斷其是否為左下拐點,掃線找邊界時,比較R點附近連續(xù)幾行左邊界點對應(yīng)的橫坐標,即其對應(yīng)的列數(shù),分組兩兩計算連續(xù)左邊界點橫坐標差值,發(fā)現(xiàn)第i行與第i-1行對應(yīng)的橫坐標差值為正數(shù)T,第i+1行與第i行對應(yīng)的橫坐標差值絕對值為T,并且T-T差值大于某一閾值,連續(xù)多組左邊界點都符合上述條件,并且R點上方出現(xiàn)較多空白行,即判定為左下拐點A,單獨用變量記錄左下拐點A值,用于后續(xù)補線。
4.4十字路口處理
4.4.1正入十字路口
當左右掃線找到左下拐點A、右下拐點B,且從左下拐點向上隔行掃描2行,發(fā)現(xiàn)下拐點上方白點數(shù)目大于某一設(shè)定值時,即可判定正入十字。
十字路口下拐點上方有多行空白行,發(fā)生丟邊現(xiàn)象,需要找特征點,使用最小二乘法構(gòu)造邊界線。左右巡線找到左下拐點A、右下拐點B、左上拐點C、右上拐點D,利用斜截式分別構(gòu)造線段AC、BD,補出拐點空白行的左右邊界線,再利用左右邊界線求和除以2作為實際中線。正入十字元素補線圖如圖3所示。
進入圓環(huán)后,可以正常掃線找到左右邊界,出環(huán)后,用相同方法補線出十字路口。
4.4.2斜入十字路口
以左斜進入十字路口為例,當左右掃線找到左下拐點A、右上拐點D,判定為斜入十字。
十字路口下拐點上方有多行空白行,發(fā)生丟邊現(xiàn)象,需要找特征點,使用最小二乘法構(gòu)造邊界線。左右掃線找到左下拐點A、左上拐點C、右上拐點D,利用斜截式構(gòu)造線段AC,作為左下拐點上方空白行的左邊界;取右上拐點D點后方5個邊界點,利用最小二乘法反向補線,從第59行作為縱坐標代入最小二乘法擬合右邊界線,循環(huán)到y(tǒng)取值為D點縱坐標,補出丟失的右上拐點下方的右邊界,再利用左右邊界線求和除以2作為實際中線,斜入十字元素補線圖如4所示。
4.5車庫元素處理
以右入車庫為例,車庫有比較明顯的特點:左邊界為直線,右邊界丟線,可以找到右下拐點B,空白行上方存在斑馬線。
先找到右下拐點B,右下拐點B上方存在空白行,繼續(xù)向上掃線,從右向左掃線,找到白黑跳變點,跳變點計數(shù),繼續(xù)掃線,發(fā)現(xiàn)黑白跳變點,計算兩者差值,發(fā)現(xiàn)在某一范圍,對從右向左循線沿途中遇到的所有跳變點計數(shù),發(fā)現(xiàn)大于某一閾值,同時滿足上述條件,即判定為車庫元素。
找到右下拐點B后,B點橫坐標減去賽道寬度,即確定到Z點坐標,因斑馬線總寬度小于賽道寬度,所以可以找到右上拐點D點,用最小二乘法構(gòu)造線段ZD,通過線段ZD加上最近處賽道一半構(gòu)造出實際中心線,小車沿實際中心線順利入庫。車庫元素補線圖如5所示。
5結(jié)語
本方案主要通過DMA傳輸數(shù)據(jù)、大津法分割圖像,提高單片機處理性能;尋找賽道元素特征點,擬合賽道中線,并對特殊元素進行識別與處理,使智能車更平穩(wěn)快速通過多種賽道元素,達到了設(shè)計要求。
參考文獻:
[1]符曉明.基于ADSP-BF60X網(wǎng)絡(luò)通信的DMA配置模式及中斷方法實現(xiàn)[J].中國計量,2018(03):109-110+112.
[2]巴德凱.自適應(yīng)圖像分割及并行挖掘方法的研究與實現(xiàn)[D].北京:北方工業(yè)大學,2016.
[3]孫少林,馬志強,湯偉.灰度圖像二值化算法研究[J].價值工程,2010,29(05):142-143.
[4]蔡栩嘉,劉海剛,陳冠成,李勇祥,莊越.攝像頭智能小車設(shè)計與控制算法研究[J].工業(yè)控制計算機,2018,31(12):98-101.
[5]徐翔,王琪,高進可,秦海亭,張鈺潔.智能車車道識別與圖像處理[J].自動化技術(shù)與應(yīng)用,2020,39(07):91-95.