數(shù)字形態(tài)學(xué)濾波器與智能車路徑記憶
數(shù)學(xué)形態(tài)濾波的快速算法
本文引用地址:http://butianyuan.cn/article/95469.htm由于數(shù)學(xué)形態(tài)濾波器只由加法、減法和比較運(yùn)算構(gòu)成,其運(yùn)算相對(duì)簡(jiǎn)單,因此,它很適合于在計(jì)算功能相對(duì)較弱的單片機(jī)上應(yīng)用并能取得很好的效果。以往單片機(jī)由于受存儲(chǔ)容量、計(jì)算速度及字長(zhǎng)的限制而使大多數(shù)的數(shù)字濾波器較難實(shí)現(xiàn),而形態(tài)濾波器則為單片機(jī)應(yīng)用數(shù)字濾波器代替以往的模擬濾波器提供了一條新的途徑。
為了進(jìn)一步提高形態(tài)濾波器的處理速度,可采用文獻(xiàn)[5]給出的一種合并計(jì)算的方法。以開運(yùn)算為例,開運(yùn)算是由一個(gè)腐蝕運(yùn)算后接著一個(gè)膨脹運(yùn)算得到的。一般的方法是首先對(duì)一段數(shù)據(jù)先進(jìn)行腐蝕運(yùn)算,然后,再回到這段數(shù)據(jù)的起始地址,重新進(jìn)行膨脹運(yùn)算,最后得到開運(yùn)算的結(jié)果。本文提出了只對(duì)這段數(shù)據(jù)運(yùn)算一遍,便可得到最后運(yùn)算結(jié)果。下面簡(jiǎn)要介紹一下它的實(shí)現(xiàn)方法。
由腐蝕的定義可知,欲計(jì)算f(n)的腐蝕值,需要知道該點(diǎn)前w(w為結(jié)構(gòu)元素的寬度)點(diǎn)的數(shù)據(jù);而要計(jì)算f(n)膨脹后的結(jié)果,則需要知道該點(diǎn)后w點(diǎn)的數(shù)據(jù)。由于運(yùn)算是一個(gè)腐蝕運(yùn)算接著一個(gè)膨脹運(yùn)算后得到的,在長(zhǎng)度為L(zhǎng)的數(shù)據(jù)中只有從第w點(diǎn)到第(L-w+1)點(diǎn),才可以得到開運(yùn)算的結(jié)果。
如圖6所示,我們定義一個(gè)模板序列,該序列的長(zhǎng)度和結(jié)構(gòu)元素的寬度相同。該模板的初始值由前w個(gè)點(diǎn)的腐蝕值組成。以第n點(diǎn)為例,沿該點(diǎn)向前的方向?qū)δ0逍蛄械闹颠M(jìn)行膨脹運(yùn)算,運(yùn)算的結(jié)果即為該點(diǎn)的開運(yùn)算的結(jié)果。同時(shí),沿該點(diǎn)向后的方向繼續(xù)進(jìn)行腐蝕運(yùn)算,得到第(n+1)點(diǎn)的腐蝕值。將(n+1)點(diǎn)的腐蝕值作為模板序列的最后一個(gè)點(diǎn),并將模板序列前(w-1)點(diǎn)順次向前移動(dòng)一個(gè)位置。更新后的模板值即可用來(lái)做 (n+1)點(diǎn)的膨脹運(yùn)算,得到在(n+1)點(diǎn)的開運(yùn)算值。如此繼續(xù)下去,就可完成全部的開運(yùn)算。在做閉運(yùn)算也可采用類似的方法來(lái)提高計(jì)算的速度。
這樣,對(duì)長(zhǎng)度為N的一段數(shù)據(jù),用M個(gè)零作為其結(jié)構(gòu)元素進(jìn)行處理時(shí),當(dāng)采用一般方法進(jìn)行計(jì)算,需要進(jìn)行2×M×N次的比較運(yùn)算。而當(dāng)采用快速算法時(shí),能夠在比較最大值的同時(shí)得到最小值,減少(N-M+1)×M次比較運(yùn)算,使程序的執(zhí)行速度提高了近一倍,而且,由于采用這種快速算法,可以實(shí)現(xiàn)路徑記憶信息的實(shí)時(shí)處理,很大程度上方便了第二圈控制策略的制定,因此,它使得形態(tài)濾波這種方法更加適合應(yīng)用于路徑信息的處理中。
實(shí)驗(yàn)及結(jié)論
通過對(duì)不同傳感器方案(光電管和CCD)的智能車在不同賽道多次實(shí)驗(yàn)發(fā)現(xiàn),對(duì)于光電管方案和CCD方案的智能車,賽道記憶算法都能一定程度上提高第二圈速度。智能車采用形態(tài)學(xué)濾波算法處理賽道記憶數(shù)據(jù)后,不但行駛的穩(wěn)定性、準(zhǔn)確性有了較大的提升,而且沒有大幅增加MCU的資源消耗,同時(shí)可以支持復(fù)雜的控制策略。上述方案具有很強(qiáng)的通用性,適用于不同傳感器方案、不同控制算法的智能車。
評(píng)論