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