阮航,尚斐亞,張雯木,沈世斌
(南京師范大學 電氣與自動化工程學院,江蘇南京,210046)
機器視覺是用機器代替人眼,通過CMOS/CCD 將被攝取目標轉換成圖像信號,傳送給專用的圖像處理系統(tǒng)進行測量和判斷。它涵蓋了光學、信號檢測與處理、模式識別、軟件設計等學科,有著諸多方面的應用[1]。圖像識別的基本過程是通過傳感器將圖像信號轉化為電信息,再進行圖像的二值化、畸變矯正、透視變換、濾波等預處理后,進行特征的抽取和選擇,作為決策依據(jù)[2]。由于機器視覺系統(tǒng)可以快速獲取直觀、全面的信息,而且易于自動處理,也易于同設計信息以及加工控制信息集成,因此,人們將機器視覺系統(tǒng)廣泛地用于工業(yè)生產(chǎn)、農(nóng)業(yè)、軍事等領域[3]。
本課題以英飛凌公司的32 位三核單片機TC377 為主控制器,總鉆風攝像頭為核心傳感器,如何處理攝像頭采集的灰度圖像信號,通過在處理器中經(jīng)過算法決策可以得出轉向的依據(jù)并使車模穩(wěn)定循跡。
圖像處理系統(tǒng)是本課題的主要內(nèi)容,圖像處理始于圖像采集,原始圖像要進行桶形畸變矯正處理、OSTU 二值化處理、四鄰域BFS(廣度優(yōu)先搜索),以上針對整幅圖像的預處理結束后,開始進行針對左右邊線的搜線處理以及邊線的特征分析、補線、中線計算。
攝像頭在準備傳輸圖像之前將提前產(chǎn)生一個場中斷信號且設置為高電平有效,同時,圖像準備開始輸出。接著攝像頭會輸出第一行的行中斷信號,并在其為高電平且相機時鐘信號為上升沿時采集像素點灰度信息。重復此步驟,直至一幀圖像采集完成。
智能車賽題通常會對攝像頭進行限高,因此,為了在直道、急彎中鏡頭都能穩(wěn)定看到賽道的左、右邊線,本課題選用140°廣角攝像頭。廣角攝像頭在提供寬闊視角的同時,也帶來了桶形畸變(Barrel distortion)。它表現(xiàn)為圖像中的直線在圖像四角處彎曲向外,形成了一個像圓桶正視圖般的形狀,因此得名桶形畸變。140°廣角鏡頭存在5%的桶形畸變,主要體現(xiàn)在圖像的四角處,這也使得車模近點的賽道在圖像的左下、右下角變形嚴重,畸變帶來的彎折會混淆元素中的角點,故需要進行桶形畸變矯正。
本課題使用張氏標定法配合MATLAB,打印一張棋盤格,再用主板、攝像頭采集不同角度、不同位置棋盤格的無損圖像通過串口發(fā)送給電腦的上位機,導入MATLAB 的單目相機標定應用進行桶形畸變矯正,并查看效果。本課題在標定中獲得并需要用到的參數(shù)有X 軸方向的焦距(FX)、Y 軸方向的焦距(FY)、X 軸方向的主點坐標(CX)、Y 軸方向的主點坐標(CY)、第一徑向畸變系數(shù)(D1)、第二徑向畸變系數(shù)(D2)[4]。
表1 相機內(nèi)參
由于桶形畸變只涉及徑向畸變,因此不需要切向畸變參數(shù)。得到相機內(nèi)參后,聲明一個與原始圖像(RAW)二維數(shù)組大小相同的矯正后圖像數(shù)組(UNDISTORTED)。從無畸變圖像的第一個點開始,先利用FX、FY、CX、CY 將無畸變的像素坐標歸一化到[-1,1]的范圍內(nèi)。
利用歸一化后的無畸變像素點坐標計算徑向畸變的平方和系數(shù),并利用徑向畸變系數(shù)計算該點對應的歸一化后的原始圖像像素點坐標,再將得到的歸一化原始圖像坐標去歸一化。最后將得到的原始圖像點對應的灰度值賦給無畸變圖像,無畸變圖像上188×120 個像素點,每一個都能計算出與之坐標對應的原始圖像像素點,將原始圖像上的灰度值填入無畸變圖像即可完成矯正。
矯正效果如圖5 所示,圖像四個角處的畸變得到了明顯的改善,原本邊緣彎曲的邊框變成了該有的豎線。
常見的軟件二值化算法有:固定閾值法、自適應閾值法、基于直方圖的閾值法等。本課題選用的方法是一種常用的基于直方圖的閾值法,名為大津法(Ostu)。它通過計算[0,255]范圍內(nèi)每一個灰度值在本幅圖片中的類間方差,并找到最大類間方差對應的灰度值,作為二值化閾值,因此大津法也稱最大類間方差法。其優(yōu)勢在于,大津法可以根據(jù)不同的輸入圖像自適應的選擇閾值,在光線不均勻的場地具有較好的適應性。此外大津法的實現(xiàn)相對簡單,只需要計算圖像的直方圖和類間方差,計算復雜度不高,本課題的算力資源可以滿足要求。此外,在有陽光等雙峰直方圖的圖像中,大津法的表現(xiàn)較好,可以自動找出最佳的閾值,有效勾勒圖像的信息[5]。
大津法的詳細步驟如下:
(1)假設初始有個閾值T0,將圖像分為前景F 和背景B 兩個部分。
(2)假設像素的總個數(shù)為N,前景像素個數(shù)為Nf,背景像素個數(shù)為Nb。
(3)假設圖像的總灰度級為L-1,每個灰度級的像素個數(shù)為Ni。
計算出各灰度值類間方差后,選出最大類間方差對應的灰度值作為二值化的閾值,完成二值化。
大津法二值化效果如圖6 所示,賽道和背景被清晰的區(qū)分開來。
得到二值化圖像后,需要將賽道部分和圖像中諸如反光、淺色雜物、相鄰賽道之類的噪點排除,并將賽道部分的邊界甄別出來。因此,需要對賽道主體部分進行連通域分析。
常用的連通域分析法有twopass 連通域分析法和四聯(lián)通BFS 法。twopass 連通域分析算法的基本思路是,通過兩次掃描二值化后的圖像,來完成連通域的識別和分析。該方法避免了多次迭代和重復操作,運行時間穩(wěn)定,且適用性廣,但實現(xiàn)起來稍復雜,需要額外的存儲空間。四聯(lián)通BFS法簡單易實現(xiàn),時間和空間復雜度低,運行時間與圖像的像素點數(shù)量成正比,當白點數(shù)量多時運行時間長,白點少時耗時少??紤]到單片機的算力資源,以及四聯(lián)通算法在圖像減小或壓縮后的運行時間也會相應地減少,本課題采用四聯(lián)通BFS 法來完成連通域分析[6]。
圖像從高到低行數(shù)(ROW)遞增,從左到右列數(shù)(COL)遞增。當車在賽道上時,圖像最下方中間的點必然是反應賽道的白點,從這個點開始,分析他的四領域,四領域中的白點按圖示順序入隊,本點標記為賽道專用的灰度值,再按隊列順序分析下一個點。若某點周圍出現(xiàn)黑點,則說明到達賽道邊界,將其標記為賽道邊界專用的灰度值。當圖像中賽道的部分被分析完畢后,我們就可以得到一個只含賽道部分且邊界清晰的圖像。
四聯(lián)通BFS 法的效果如圖9 所示,賽道的邊界被勾勒出來,排除了其他噪點。
圖像預處理結束后,接下來對圖像中賽道的輪廓進行操作,需要操作的數(shù)據(jù)量從整幅圖像的像素點減少為了兩邊邊線的像素點。首先,從圖像的底端,向左右兩邊尋找邊線的第一個點,稱為種子。找到種子后,左右邊線分別按照圖10 中順序,一一判斷該點八鄰域內(nèi)的八個點是否是邊線上的點。找到邊線上的并存入邊線結構體中的線段數(shù)組中,并記錄此點對應的八鄰域方向,即生長方向,記錄完畢后將該點的灰度值修改,防止此點在下一個點的八鄰域內(nèi),影響接下來的生長。如此循環(huán)往復,左右邊線從種子生長為完整的邊線[7]。再將邊線中向圖像上方生長的部分制作成一維邊線數(shù)組,結合左右邊線制作中線數(shù)組。制作的理想中線效果如圖11 所示。
圖1 圖像預處理流程
圖2 攝像頭采集流程
圖3 桶形畸變
圖4 畸變程序部分代碼
圖5 桶形畸變效果圖
圖6 賽道二值化效果圖
圖7 圖像坐標系與四鄰域順序
圖8 BFS 隊列圖解
圖9 四鄰域BFS 效果圖
圖10 種子生長八鄰域順序
圖11 理想中線效果圖
視覺循跡智能車是智能車中上限最高、算法最復雜的賽道,相比電磁、GPS 傳感器,視覺傳感器帶來的信息更為豐富,可以在有限的車身規(guī)模中檢測到遠方賽道的信息。想要利用這種信息必須有適合在單片機上運行的處理大量圖像數(shù)據(jù)的算法,既要考慮時間、空間復雜度,又要考慮面對不同道型、不同光照條件、不同車姿時軟件系統(tǒng)的魯棒性。未來需要繼續(xù)對算法進行優(yōu)化,提高時效性。
本文主要完成了圖像的預處理算法,設計并優(yōu)化了畸變矯正、二值化、四鄰域算法。在搜線系統(tǒng)中,完成了對普通賽道的左右邊線的分析,制作出理想的行駛中線,讓車??梢云椒€(wěn)地通過特殊道型。