基于AD采樣的算法
基于AD的黑線提取算法能夠反映圖像上的每個點的黑白程度,提取出來的黑線準(zhǔn)確度比較高,但是后續(xù)的黑線提取算法比較復(fù)雜。基于電壓跳變比較方法軟件黑線提取非常簡單,但是硬件調(diào)試比較困難,而且不能反映每個點的真實黑白程度。對賽道環(huán)境要求很高,易受干擾。
基于AD的黑線提取有以下幾種方法:
1) 找出每一行的黑線的左右邊界點,把中間點作為道路;
2) 利用若干行相加,取最黑點;
3) 找出每行的最黑點,把它作為道路。
第一種做法:找出每一行的黑線的左右邊界點,把中間點作為道路。
圖1 斜看十字交叉道示意圖
它是最容易想到的方法,在無交叉道以及攝像頭的黑白AD值分明的情況下,它可以達(dá)到非常理想的效果。但是若出現(xiàn)了斜看交叉道或者黑白AD不是很分明的情況下,該方法的濾波顯得十分復(fù)雜。在實際中由于攝像頭對于遠(yuǎn)處的黑線不是很敏感,這使得黑點的閾值很難以確定,選大了會使遠(yuǎn)方道路提取出錯,選小了會丟失遠(yuǎn)方的道路信息。也許采用動態(tài)閾值是一個好方法,但是它也不是十分管用。在實驗中我們發(fā)現(xiàn)黑點的閾值不是隨著距離的變化成線性變化的,它的變化多少帶有點突變的味道,因此很難確定黑點閾值的變化規(guī)律,自然動態(tài)閾值也很難設(shè)定。斜看十字道會帶來更大的麻煩,由于在實際的控制中很難做到每次都嚴(yán)格地貼線走,因此小車在從彎道出來的時候若彎道前方有個十字道,很容易造成斜看的情況發(fā)生。這時從AD采集的圖像上看來十字交叉道會像一個分叉的樹枝一樣從前方道路上出來,更糟糕的情況是在前方正確道路消失的地方恰好被斜的十字道路的一邊給補(bǔ)上了。若采用這種方法,則很容易誤將道路確定到十字叉的一邊上,使得小車的轉(zhuǎn)向錯誤。為了濾除這種情況,我們根據(jù)它的特點采用了很多的濾波方法。
首先,在前方道路與十字叉的交界點,黑點的個數(shù)會突然增加很多。在一般情況下,隨著距離的增加黑點的個數(shù)會慢慢減少,不會出現(xiàn)突然增多的情況。因此我們可以用上一行的黑點數(shù),估計出下一行的黑點數(shù),如果超出了我們的估計值,我們就認(rèn)為它是不合理的。
其次可以根據(jù)賽道不突變的原則,來濾除雜點。我們可以根據(jù)前面兩行的變化情況預(yù)測出下一行的賽道變化范圍,利用它來濾除雜點。但是在實際的應(yīng)用中下一行的變化范圍預(yù)測總是不是很理想。因此當(dāng)賽車經(jīng)過90度彎時,賽道的變化在小車看來變化是十分巨大的幾乎和斜看十字交叉道沒有多大的區(qū)別。有時會將90度彎濾除,造成小車直接沖出跑道。
最后,我們還可以通過分別從左至右與從右至左的方法來所搜賽道的左右邊界點,若發(fā)現(xiàn)兩者不一致,則可以采取取變化較小的點作為賽道來處理。
圖2 三行相加提取黑線示意圖
加了以上的濾波以后真?zhèn)€搜索賽道程序會顯得十分復(fù)雜,而且也不是十分可靠。
第二種做法: 利用若干行相加,取最黑點。
這種做法是我們上屆的學(xué)長提出來的算法。但是我利用起來不是很可靠。它的頭點始終采不穩(wěn)定。它的三行相加的理由是若中間一行右黑點丟失,它可以利用自己設(shè)定的閾值把它找回,如三行相加的黑點閾值可以定義為1個白點與2個黑點的和。帶有些中值濾波的味道。 但是,由于遠(yuǎn)處的黑白不是很清楚,本來黑白的閾值就難以設(shè)定,三行相加的閾值就更難設(shè)定。而且在彎道上由于遠(yuǎn)方的點本來就少,大約只有一兩個黑點而且又不在同一列上,很容易將這些點丟失,導(dǎo)致頭部的點不穩(wěn)定。為了盡可能地將遠(yuǎn)方的黑線提取出來,從軟件上將唯一的方法就是增大閾值,比如將三行相加的閾值設(shè)置為一黑二白相加,但是問題是遠(yuǎn)方的黑白不是很明顯,白點比較黑,黑點比較白,這種閾值的選取很容易造成把遠(yuǎn)方的那些比較黑的白點也一并歸入黑線之中,這使得小車的轉(zhuǎn)向發(fā)生混亂。
圖3 逐行找黑點
第三種做法: 找出每行的最黑點,把它作為道路。
由于每行搜索的是最黑點,因此可以將黑點的閾值稍稍擴(kuò)大一點,即使遠(yuǎn)方的黑白不清,由于找的是最黑點因此還是可以提取出真確的黑線的。它的主要問題是,不一定每行都有符合要求的點,會造成一行丟失而失去后面的黑點。解決的方法是當(dāng)發(fā)現(xiàn)一行丟失以后,不立即退出搜索,而是置一個丟失計數(shù)器,只有當(dāng)丟失計數(shù)器的值連續(xù)累加到一定的閾值后才退出。當(dāng)每次搜索到一行的黑線后看看丟失計數(shù)器是否為非零。若不是,則說明前面沒有丟失行。若是,則說明前面有幾行丟失了。我們可以根據(jù)這一行與上以有效行對中間的丟失行對中間的丟失行做一個線性化處理。然后清零丟失計數(shù)器。有了丟失計數(shù)器,我們可以對賽道的提取條件加以嚴(yán)格的限制,而不必?fù)?dān)心黑線的漏檢。比如我們可以嚴(yán)格限制黑線的寬度,這樣我們可以很容易濾除看到大塊的黑斑帶來的干擾;對于上述的斜看十字交叉線的問題我們只要根據(jù)上一行的黑線嚴(yán)格限制下一行黑線出現(xiàn)范圍便可輕松濾除。當(dāng)然在發(fā)現(xiàn)丟失行以后對于下一行的搜索必需加大黑線搜索的范圍,允許的連續(xù)丟失行越多則再次找回的黑線的可信度也就越低,在實際的提取過程中必須把握好這一閾值,使得即可以順利找到前方的道路,又不至于誤提取黑線。實際證明這種方法實現(xiàn)簡單,可靠性也最高,黑線提取十分穩(wěn)定。