圖像采集與處理在智能車系統中的應用
系統概述
智能小車系統主要由路徑識別、速度采集、轉向控制及車速控制等功能模塊組成。路徑識別功能采用CMOS攝像頭,將其模擬量的視頻信號進行視頻解碼后,經過二值化處理并轉化為18×90pix的圖像數據后送入MCU進行處理;轉向控制采用基于模糊控制算法進行調節;而車速控制采用的是經典PID算法,通過對賽道不同形狀的判斷結果,設定不同的給定速度。該系統以50Hz的頻率通過不斷地采集實時路況信息和速度,實現對整個系統的閉環控制,如圖1所示。
智能小車的圖像采集與存儲
圖像采集模塊設計
CMOS攝像頭正常供電后,便可輸出原始圖像的信號波形,它是PAL制式的模擬信號,包含行同步、行消隱、場同步、場消隱等信號如圖2所示。但該形式的信號并不能被CPU直接使用,需要加入視頻解碼芯片如SAA7111,它的功能是將攝像頭輸出的模擬信號轉化為數字信號,同時產生各種同步信號,CPU利用此同步信號將圖像的數字信號存儲在一個外部FIFO芯片AL422中,這便構成了基本的路徑檢測模塊,如圖3所示。
????? 圖像數據存儲
SAA7111是飛利浦公司一款增強型視頻輸入處理器芯片,常應用在嵌入式視頻應用的高度集成的電路中。工作時,模擬視頻圖像從SAA7111的4個輸入端口中的一個端口輸入,經模擬處理后,一路通過緩沖器從模擬輸出端輸出用于監視,另一路經A/D后產生數字色度信號、亮度信號,分別進行亮度信號處理、色度信號處理。亮度信號處理的結果,一路送到色度信號處理器進行綜合處理,產生Y、U、V信號,經格式化后從VPO輸出,輸出的信號格式有422YUV或CCIR-656(8位)等;另一路進入同步分離器,經數字PLL,產生相應的行、場同步信號HS、VS及像素時鐘信號LLC和LLC2等信號,這些信號是實現視頻數據采集的依據。SAA7111輸出的每幀圖像大小可設為720×286,其數據量相對于單片機的處理速度來說是比較大的,較為理想的圖像大小是18×45,壓縮后的數據量僅為原始圖像的0.394%。為了使圖像的數據得到有效壓縮,可以采用將圖像的數字信號存入FIFO中,經過一定的分頻處理后便能壓縮圖像大小,系統所采用的FIFO芯片是AL422B。
為了實現圖像數字信號的分頻處理,可以分為兩種實現方式,其一是軟件分頻,另一種是硬件分頻。對于軟件分頻來說,系統不需要額外的分頻電路,而是單片機利用解碼芯片SAA7111輸出的控制信號,對讀時鐘進行分頻后再執行實際的讀操作,這種方式的缺點是分頻工作需要占用單片機資源,影響系統的實時性等性能;對于硬件分頻來說,需要加入專門的分頻處理電路,在不需要單片機控制的條件下實現圖像的壓縮,從而在根本上減少了單片機處理的數據量并縮短讀取圖像的時間。因此該系統采用了硬件分頻的方式,具體信號的分頻模式如圖4所示,CREF代表像素時鐘,分頻后得到的是AL422B的寫時鐘WCK,HREF代表行參考信號,分頻后得到的信號作為AL422B的寫允許信號。
圖像去噪與特征提取
圖像二值化
圖像二值化是數字圖像處理技術中的一項基本技術,該系統中由于賽道是由黑色和白色兩種顏色組成的,并且背景顏色基本也是白色的,系統的任務是識別出黑色的引跑線位置,由于其圖像的干擾并不是很強,因此可以采用二值化的技術作為系統的圖像預處理。經過二值化處理將原來白色的像素點用0表示,而黑色像素點用1表示。圖像二值化技術的關鍵在于如何選取閾值通常來說,常用的方法包括有全局閾值法,局部閾值法及動態閾值法。由于賽道現場光線是比較均勻,而且賽道周圍的底色基本上都是白色的,所以在該系統設計中采用全局閾值法,可達到算法簡單,執行效率高的效果。
二值化閥值選取
在對賽道環境的分析中,我們可以發現黑線部分的亮度是相對比較固定的,其波動的范圍非常小,小于20(亮度值最大為255),而白色底板的亮度值變化相對較大一些,但仍能保證其與黑線的亮度值有較大的梯度。因此,可以采用直方圖統計法來對其閥值進行自動設定,具體方法如下。
??? 首先存儲一幅原始圖像的所有數據,然后對整幅圖像的第一像素點進行統計,最終把第個亮度值所對應的像素點個數統計出來,結果將出現一個雙波峰形圖,如圖5所示。這將能較直接地比較出亮度值集中的區域,以兩個波峰的中心位置所在的中點值作為該賽道的二值化閥值。該算法計算的精度較高,能夠找到理想的一個閥值點,雖然它執行的時間較長,但是這只是在賽車未起跑前進行的初始化運算,對賽車起跑后的速度完全沒有影響,因此該方案是可以采用的。
圖像去噪
在車體運動過程中,圖像經過二值化后并不會出現太大的噪聲,只是在局部出現了一小部分的椒鹽噪聲,其典型圖像如圖6所示。在該系統設計中,圖像處理的目的是準確地找到黑線的中心位置。由于圖像中噪聲的面積非常小,并且一般出現在離黑線較遠的地方,處理的方法也比較多,可采用中心坐標遞推法。
由于該賽道的黑線細分為每一行的坐標后,相鄰兩行之間的中心坐標值之差是比較小的,經實驗測試得其差一般不會超過5,具有很好的遞推性。因此可以利用前一行的中心坐標往下遞推來求解,具體步驟如下。
(1)由于攝像頭近處的黑線拍攝效果較好,不僅黑線的寬度比較大,而且基本不會出現任何噪聲,用其作為遞推的基準點是非常好的選擇。由于這是整幅圖像的基準點,因此對其準確性要求比較高,在計算第一行的中心坐標值時采用黑線連續記數法,即只有連續讀取到3個或以上“1”時才算有效的黑線,并記錄黑線的塊數,否則將其清零,最終再查看該行黑線塊數是否為1,若不為1則改用第二行圖像數據作判斷,如此遞增直到找到唯一的黑線為止。
(2)以第一次找到的中心坐標為基準,向上一行搜索分布在其左右兩側各10個點這個區間內的黑線位置,然后同樣利用重心法求出在該區間內的黑點中心坐標值,并把它作為這一行的中心坐標基準點。
(3)按照步驟(2)逐步往上一行遞推,如果遇到全0的行則停止黑線的搜索。圖6所示的圖像經過該算法處理后得到的圖像如圖7所示,可見此方法能夠有效地消除圖像的噪聲。
評論
查看更多