華 文 俞 斌 翁 華
摘要:從大的層面上來(lái)講,黑線提取分為AD轉(zhuǎn)換提取以及通過(guò)硬件濾波(電壓跳變比較)提取兩種算法,本文具體介紹了兩種方法的利與弊,以及我們?yōu)槭裁醋詈筮x擇了AD采樣。
關(guān)鍵詞:AD采樣;電壓跳變采樣;硬件濾波;提取黑線;逐行搜索
基于AD采樣的算法
基于AD的黑線提取算法能夠反映圖像上的每個(gè)點(diǎn)的黑白程度,提取出來(lái)的黑線準(zhǔn)確度比較高,但是后續(xù)的黑線提取算法比較復(fù)雜?;陔妷禾儽容^方法軟件黑線提取非常簡(jiǎn)單,但是硬件調(diào)試比較困難,而且不能反映每個(gè)點(diǎn)的真實(shí)黑白程度。對(duì)賽道環(huán)境要求很高,易受干擾。
基于AD的黑道提取有以下幾種方法:
·找出每一行的黑線的左右邊界點(diǎn),把中間點(diǎn)作為道路,
·利用若干行相加,取最黑點(diǎn),
·找出每行的最黑點(diǎn),把它作為道路。
第一種做法:找出每一行的黑線的左右邊界點(diǎn),把中間點(diǎn)作為道路。它是最容易想到的方法,在無(wú)交叉道以及攝像頭的黑白AD值分明的情況下,它可以達(dá)到非常理想的效果。但是若出現(xiàn)了斜看交叉道或者黑白AD不是很分明的情況下,該方法的濾波顯得十分復(fù)雜。在實(shí)際中由于攝像頭對(duì)于遠(yuǎn)處的黑線不是很敏感,這使得黑點(diǎn)的閾值很難確定,選大了會(huì)使遠(yuǎn)方道路提取出錯(cuò),選小了會(huì)丟失遠(yuǎn)方的道路信息。也許采用動(dòng)態(tài)閾值是一個(gè)好方法,但是它也不是十分管用。在實(shí)驗(yàn)中我們發(fā)現(xiàn)黑點(diǎn)的閾值不是隨著距離的變化成線性變化的,它的變化多少帶有點(diǎn)突變的味道,因此很難確定黑點(diǎn)閾值的變化規(guī)律,自然動(dòng)態(tài)閾值也很難設(shè)定。斜看十字道會(huì)帶來(lái)更大的麻煩,由于在實(shí)際的控制中很難做到每次都嚴(yán)格地貼線走,因此小車在從彎道出來(lái)的時(shí)候若彎道前方有個(gè)十字道,很容易造成斜看的情況發(fā)生。這時(shí)從AD采集的圖像上看來(lái)十字交叉道會(huì)像一個(gè)分叉的樹枝一樣從前方道路上出來(lái),更糟糕的情況是在前方正確道路消失的地方恰好被斜的十字道路的一邊給補(bǔ)上了。若采用這種方法,則很容易誤將道路確定到十字叉的一邊上,使得小車的轉(zhuǎn)向錯(cuò)誤。為了濾除這種情況,我們根據(jù)它的特點(diǎn)采用了很多的濾波方法。
首先,在前方道路與十字叉的交界點(diǎn),黑點(diǎn)的個(gè)數(shù)會(huì)突然增加很多。在一般情況下,隨著距離的增加黑點(diǎn)的個(gè)數(shù)會(huì)慢慢減少,不會(huì)出現(xiàn)突然增多的情況。因此我們可以用上一行的黑點(diǎn)數(shù),估計(jì)出下一行的黑點(diǎn)數(shù),如果超出了估計(jì)值,我們就認(rèn)為它是不合理的。
其次可以根據(jù)賽道不突變的原則,來(lái)濾除雜點(diǎn)。我們可以根據(jù)前面兩行的變化情況預(yù)測(cè)出下一行的賽道變化范圍,利用它來(lái)濾除雜點(diǎn)。但是在實(shí)際的應(yīng)用中下一行的變化范圍預(yù)測(cè)總不是很理想。因此當(dāng)賽車經(jīng)過(guò)90度彎時(shí),賽道的變化在小車看來(lái)是十分巨大的,幾乎和斜看十字交叉道沒有多大的區(qū)別。有時(shí)會(huì)將90度彎濾除,造成小車直接沖出跑道。最后,我們還可以通過(guò)分別從左至右與從右至左的方法來(lái)搜索賽道的左右邊界點(diǎn),若發(fā)現(xiàn)兩者不一致,則可以采取取變化較小的點(diǎn)作為賽道來(lái)處理。加了以上的濾波以后整個(gè)搜索賽道程序會(huì)顯得十分復(fù)雜,而且也不是十分可靠,如圖1。
第二種做法:利用若干行相加,取最黑點(diǎn)。這種做法是我們上屆的學(xué)長(zhǎng)提出來(lái)的算法。但是我們利用起來(lái)不是很可靠。它的頭點(diǎn)始終采不穩(wěn)定。它的三行相加的理由是若中間一行右黑點(diǎn)丟失,它可以利用自己設(shè)定的閾值把它找回,如三行相加的黑點(diǎn)閩值可以定義為1個(gè)白點(diǎn)與2個(gè)黑點(diǎn)的和。帶有些中值濾波的味道。但是,由于遠(yuǎn)處的黑白不是很清楚,本來(lái)黑白的閾值就難以設(shè)定,三行相加的閾值就更難設(shè)定。而且在彎道上由于遠(yuǎn)方的點(diǎn)本來(lái)就少,大約只有一兩個(gè)黑點(diǎn)而且又不在同一列上,很容易將這些點(diǎn)丟失,導(dǎo)致頭部的點(diǎn)不穩(wěn)定。為了盡可能地將遠(yuǎn)方的黑線提取出來(lái),從軟件上講唯一的方法就是增大閩值,比如將三行相加的閾值設(shè)置為一黑二白相加,但是問(wèn)題是遠(yuǎn)方的黑白不是很明顯,白點(diǎn)比較黑,黑點(diǎn)比較白,這種閩值的選取很容易造成把遠(yuǎn)方的那些比較黑的白點(diǎn)也一并歸入黑線之中,這使得小車的轉(zhuǎn)向發(fā)生混亂,如圖2。
第三種做法:找出每行的最黑點(diǎn),把它作為道路。由于每行搜索的是最黑點(diǎn),因此可以將黑點(diǎn)的閾值稍稍擴(kuò)大,即使遠(yuǎn)方的黑白不清,由于找的是最黑點(diǎn)因此還是可以提取出真確的黑線的。它的主要問(wèn)題是,不一定每行都有符合要求的點(diǎn),會(huì)造成一行丟失而失去后面的黑點(diǎn)。解決的方法是當(dāng)發(fā)現(xiàn)一行丟失以后,不立即退出搜索,而是置一個(gè)丟失計(jì)數(shù)器,只有當(dāng)丟失計(jì)數(shù)器的值連續(xù)累加到一定的閾值后才退出。當(dāng)每次搜索到一行的黑線后看看丟失計(jì)數(shù)器是否為非零。若不是,則說(shuō)明前面沒有丟失行。若是,則說(shuō)明前面有幾行丟失了。我們可以根據(jù)這一行與上一有效行對(duì)中間的丟失行做一個(gè)線性化處理。然后清零丟失計(jì)數(shù)器。有了丟失計(jì)數(shù)器,我們可以對(duì)賽道的提取條件加以嚴(yán)格的限制,而不必?fù)?dān)心黑線的漏檢。比如可以嚴(yán)格限制黑線的寬度,這樣很容易濾除看到大塊黑斑所帶來(lái)的干擾。對(duì)于上述的斜看十字交叉線的問(wèn)題,我們只要根據(jù)上一行的黑線嚴(yán)格限制下一行黑線出現(xiàn)的范圍,便可輕松地濾除。當(dāng)然在發(fā)現(xiàn)丟失行以后對(duì)于下一行的搜索必需加大黑線搜索的范圍,允許的連續(xù)丟失行越多則再次找回的黑線的可信度也就越低,在實(shí)際的提取過(guò)程中必須把握好這一閾值,使得既可以順利找到前方的道路,又不至于誤提取黑線。實(shí)際證明這種方法實(shí)現(xiàn)簡(jiǎn)單,可靠性也最高,黑線提取十分穩(wěn)定,如圖3、圖4。
硬件濾波(電壓跳變比較)
從圖5攝像頭的視頻輸出信號(hào)可以看出,在黑線與白線之間有一個(gè)明顯的電壓跳變過(guò)程,我們可以利用這一特點(diǎn)來(lái)作為黑線的提取標(biāo)志。利用合理的硬件電路我們便可以實(shí)現(xiàn)在電壓跳變以前輸出邏輯1,在電壓跳變后輸出邏輯0。這樣單片機(jī)要做的就是不停地讀取引腳的電平狀態(tài)。由于不需要AD轉(zhuǎn)化,這使得單片機(jī)在每個(gè)視頻的行中斷中讀取比AD多得多的點(diǎn),黑點(diǎn)的個(gè)數(shù)自然也很多。在提取黑線時(shí)軟件要做的只是區(qū)分0與1而已,實(shí)現(xiàn)起來(lái)非常方便。圖6是一幅由這種方法提取的圖像與AD采樣圖像的對(duì)比??梢钥吹剿暮诰€非常明顯,效果很好。
但是這種方法也存在著很多局限性。首先,它對(duì)環(huán)境的要求苛刻,不能有縫,不能有反光。由于縫的顏色明顯區(qū)別于周圍的顏色,因此在圖像上它就表現(xiàn)為一條黑線。其次由于反光的作用使得反光區(qū)域光線異常強(qiáng)烈。反光區(qū)在圖像上也是一片黑,使得白變黑。其次,它對(duì)橫向的分辨能力很弱。使得它對(duì)起始道的區(qū)分非常困難。比如起始道在圖像上往往會(huì)把中間的黑道變成白道,使得起始道的辨別以及黑線的提取困難。最后,對(duì)于十字交叉道,由于一行全是黑線,電壓無(wú)跳變,因此在圖像上它是一條白線,使得賽道出現(xiàn)斷點(diǎn),出現(xiàn)黑變白。更糟糕的情況是稍微斜看十字叉時(shí),它會(huì)出現(xiàn)起始道的特征,使得賽車亂停機(jī)。
上述的黑變白以及白變黑的出現(xiàn),很大程度上抵消了它所帶來(lái)的方便性,軟件必須對(duì)于采到的黑線加以認(rèn)真判別,看它是否是真的黑線,這就涉及到許多方面的濾波。再則,由干單片機(jī)讀取的僅僅是0-1信號(hào),丟失了每點(diǎn)之間的細(xì)微的黑白程度,這也給濾波帶來(lái)極大的難處。為了正確提取黑線,它涉及到本文所提到過(guò)的所有濾波方式,包括線寬設(shè)置,黑線的連續(xù)性等等。
但是它帶來(lái)的最大困難還是起始道的判別問(wèn)題。起始道的干擾不僅來(lái)自十字交叉線,而且還來(lái)自一般賽道,因?yàn)楹苡锌赡茉谫惖赖膬蓚?cè)由于光線反射的不均衡導(dǎo)致電壓的跳變,使得在黑線的旁邊隔著一段白斑出現(xiàn)幾段的黑線,很容易誤認(rèn)起始道,最終導(dǎo)致起始道根本無(wú)法識(shí)別。
基于以上的分析,最后我們還是選用了AD的第三種方法,它簡(jiǎn)單、實(shí)用,效果很理想。它的流程圖如圖7,程序代碼。