《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 業(yè)界動(dòng)態(tài) > 基于DSP Builder的行車(chē)道檢測(cè)的實(shí)現(xiàn)

基于DSP Builder的行車(chē)道檢測(cè)的實(shí)現(xiàn)

2008-04-18
作者:芮晴波

  摘 要: 介紹了行車(chē)道檢測(cè)系統(tǒng)" title="檢測(cè)系統(tǒng)">檢測(cè)系統(tǒng)的原理、構(gòu)成及基于DSP Builder的實(shí)現(xiàn)方法。利用基于FPGA的現(xiàn)代DSP設(shè)計(jì)方法,對(duì)邊緣檢測(cè)" title="邊緣檢測(cè)">邊緣檢測(cè)電路進(jìn)行了系統(tǒng)模型設(shè)計(jì)。理論分析及仿真實(shí)驗(yàn)證明了該方法的正確性和可行性,滿足了實(shí)際任務(wù)的要求。
  關(guān)鍵詞: 行車(chē)道檢測(cè) Sobel算子 DSP Builder FPGA


  通過(guò)對(duì)攝像頭讀入的道路白線圖像進(jìn)行灰度變換,再檢測(cè)出白線的邊緣,這是實(shí)現(xiàn)智能車(chē)自動(dòng)導(dǎo)航和輔助導(dǎo)航的基礎(chǔ)。行車(chē)道檢測(cè)系統(tǒng)可以應(yīng)用于智能車(chē)的防撞預(yù)警和控制。該系統(tǒng)設(shè)計(jì)重點(diǎn)是邊緣檢測(cè)電路" title="檢測(cè)電路">檢測(cè)電路的設(shè)計(jì)。邊緣檢測(cè)電路包括圖像輸入緩沖電路、垂直方向的邊緣檢測(cè)電路、水平方向的邊緣檢測(cè)電路及對(duì)兩部分檢測(cè)的組合,最終通過(guò)閾值選擇形成二值邊緣圖像。傳統(tǒng)的方案大多采用單片機(jī)電路實(shí)現(xiàn),設(shè)計(jì)流程和系統(tǒng)調(diào)試都比較繁瑣,開(kāi)發(fā)周期長(zhǎng)。在實(shí)時(shí)圖像處理中,由于處理速度要求較高,因此用以前的方法很難達(dá)到要求。實(shí)時(shí)圖像處理常常需要對(duì)圖像進(jìn)行求和、卷積、邊緣提取、圖像分割及特征提取等不同種類、不同層次的處理。對(duì)于一些運(yùn)算結(jié)構(gòu)簡(jiǎn)單,但要處理大量數(shù)據(jù)的算法一般采用FPGA芯片來(lái)實(shí)現(xiàn)。通過(guò)FPGA實(shí)現(xiàn)信號(hào)處理可以取得出色的系統(tǒng)穩(wěn)定性,提高控制精度,還可以大大減少開(kāi)發(fā)周期,使設(shè)計(jì)人員的設(shè)計(jì)自由度加大。本文采用Altera公司的Cyclone EP1C6作為主控芯片,利用Altera公司推出的數(shù)字信號(hào)處理開(kāi)發(fā)工具DSP Builder作為設(shè)計(jì)平臺(tái),通過(guò)DSP Builder SignalCompiler模塊讀取由DSP Builder和MegaCore模塊構(gòu)建的Simulink建模文件(.mdl),生成VHDL文件和工具命令語(yǔ)言(Tcl)腳本,進(jìn)行綜合、硬件實(shí)施和仿真,從而完成對(duì)整個(gè)道路邊緣檢測(cè)系統(tǒng)的設(shè)計(jì)。
1 系統(tǒng)構(gòu)成及邊緣檢測(cè)原理
  本系統(tǒng)中的主要模塊是進(jìn)行二維卷積操作的sobel邊緣檢測(cè)模塊,它相當(dāng)于硬件的協(xié)處理器。該系統(tǒng)從CF卡讀入數(shù)據(jù)到邊緣檢測(cè)模塊,使用Nios II控制數(shù)據(jù)流,采用DMA控制器在外部存儲(chǔ)器(SDRAM和SRAM)之間傳遞數(shù)據(jù),這些外部存儲(chǔ)器相當(dāng)于中間圖像數(shù)據(jù)緩沖器。系統(tǒng)結(jié)構(gòu)如圖1所示。


  邊緣是指圖像中像素灰度有階躍變化或屋頂狀變化的那些像素的集合。它對(duì)圖像識(shí)別和分析十分有用,邊緣能勾劃出目標(biāo)物體輪廓,使觀察者一目了然。邊緣包含了豐富的信息(如方向、階躍性質(zhì) 、形狀等),是圖像識(shí)別中抽取的重要屬性[1]。微分運(yùn)算有加強(qiáng)高頻分量的作用,從而使圖像輪廓更清晰。對(duì)于數(shù)字圖像,微分可用差分" title="差分">差分近似代替,沿x和y方向的一階差分可分別表示如下:
  
  一階差分增強(qiáng)是有方向性的。為了增強(qiáng)圖像中間任何方向伸展的邊緣和輪廓,希望對(duì)圖像的某種導(dǎo)數(shù)運(yùn)算是各向同性的,而梯度運(yùn)算恰具有各向同性特性。對(duì)于圖像f(x,y)點(diǎn)上的梯度可定義為矢量:
  
  梯度幅度具有各向同性或旋轉(zhuǎn)不變性,而且給出了該像素點(diǎn)灰度的最大變化率。采用微分銳化圖像,會(huì)使噪聲、條紋等得到增強(qiáng),這在圖像處理中會(huì)造成偽邊緣和偽輪廓,為此對(duì)銳化算子進(jìn)行了各種改進(jìn)。Sobel算子就是其中一例,它在一定程度上克服了上述問(wèn)題。Sobel算子的基本思想是:以待增強(qiáng)圖像的任意像素(i,j)為中心,截取一個(gè)3×3的像素窗口。分別計(jì)算窗口中心像素在x和y方向上的梯度[2]。Sobel算子的表達(dá)式如下:
Sx=
  增強(qiáng)后圖像在(i,j)處的灰度值為:
  
2 基于FPGA的DSP Builder設(shè)計(jì)流程
  Altera DSP Builder將The MathWorks MATLAB和Simulink系統(tǒng)級(jí)設(shè)計(jì)工具的算法開(kāi)發(fā)、仿真和驗(yàn)證功能與VHDL綜合、仿真和Altera開(kāi)發(fā)工具整合在一起,實(shí)現(xiàn)了這些工具的集成。設(shè)計(jì)人員可以使用DSP Builder模塊迅速生成Simulink系統(tǒng)建模硬件,通過(guò)DSP Builder SignalCompiler模塊讀取由DSP Builder和MegaCore模塊構(gòu)建的Simulink建模文件(.mdl),生成VHDL文件和工具命令語(yǔ)言(Tcl)腳本,進(jìn)行綜合、硬件實(shí)施和仿真。
  此系統(tǒng)設(shè)計(jì)首先用MATLAB建立DSP電路模型" title="電路模型">電路模型。電路模型設(shè)計(jì)完成后,就開(kāi)始進(jìn)行系統(tǒng)功能的仿真,這是屬于系統(tǒng)級(jí)并且基于算法的仿真,與目標(biāo)器件無(wú)關(guān)。然后利用置于Simulink電路模型界面的DSP Builder中的Signal Complier將電路模型文件即Simulink模型文件(.mdl)轉(zhuǎn)化為RTL級(jí)的VHDL代碼表述和Tcl腳本。一旦獲得了VHDL描述,就可以在Simulink中調(diào)用Quartus II中的綜合器生成網(wǎng)表文件。下一步就是調(diào)用Quartus II中的編譯器,根據(jù)網(wǎng)表文件及設(shè)置的優(yōu)化條件進(jìn)行布線布局和優(yōu)化設(shè)計(jì)的適配操作,同時(shí)生成用于Moldelsim的時(shí)序仿真文件。將最后生成的Programmer Object File(.pof)對(duì)目標(biāo)器件進(jìn)行編程配置,即可在硬件上形成DSP系統(tǒng)。
3 邊緣檢測(cè)系統(tǒng)的Simulink模型設(shè)計(jì)
  Sobel邊緣檢測(cè)模塊包括獨(dú)立且并行的水平檢測(cè)和垂直檢測(cè)兩部分。輸入緩沖通過(guò)一組延時(shí)線路轉(zhuǎn)換輸入的像素值。線路緩沖器的緩沖級(jí)數(shù)由圖像的寬度決定。本設(shè)計(jì)采用的圖像寬度是640。緩沖器的個(gè)數(shù)取決于卷積核的大小,本設(shè)計(jì)采用3×3的Sobel卷積核。垂直和水平方向的邊緣檢測(cè)幾乎是相同的,兩者之間的區(qū)別只在于從輸入緩沖器流過(guò)的數(shù)據(jù)流。最后將兩部分組合并通過(guò)閾值選擇形成一幅經(jīng)過(guò)邊緣檢測(cè)的二值圖像。Sobel邊緣檢測(cè)是流水線操作,在每一個(gè)時(shí)鐘周期都計(jì)算得到一個(gè)像素值,如圖2所示。圖中,Z-640是指本設(shè)計(jì)輸入的圖像像素寬度是640,右上角的加法模塊實(shí)現(xiàn)的是垂直方向的邊緣檢測(cè),右下角的加法模塊實(shí)現(xiàn)的是水平方向的邊緣檢測(cè)。對(duì)于一般的灰度圖像, 其像素的灰度值一般用8位表示,考慮到計(jì)算過(guò)程中可能出現(xiàn)負(fù)數(shù)和溢出問(wèn)題。因此,數(shù)據(jù)在開(kāi)始計(jì)算前先在最高位補(bǔ)零,使數(shù)據(jù)寬度變?yōu)?0 位,計(jì)算完成后可再裁剪為8 位。

?


  在DSP Builder中設(shè)計(jì)的Sobel邊緣檢測(cè)系統(tǒng)如圖3所示。
4 仿真結(jié)果
  建立了.mdl文件之后,在Simulink中對(duì)其進(jìn)行系統(tǒng)算法級(jí)仿真。設(shè)置Matlab各項(xiàng)參數(shù)和Simulink仿真參數(shù),因?yàn)楸驹O(shè)計(jì)采用圖片的像素是640×480,所以設(shè)置仿真時(shí)間為307 201s(所有的像素?cái)?shù)量加1)。


  測(cè)試表明,仿真結(jié)果符合要求,整個(gè)系統(tǒng)算法級(jí)設(shè)計(jì)是正確的。圖4為原始的彩色圖像,圖5為經(jīng)過(guò)水平邊緣檢測(cè)和垂直邊緣檢測(cè)后沒(méi)有經(jīng)過(guò)閾值選取的圖像,圖6為經(jīng)過(guò)閾值選取后的二值圖像。Sobel算子不像普通梯度算子那樣用兩個(gè)像素的差值,而是采用兩列或兩行像素灰度加權(quán)和的差值來(lái)表示,因此有以下兩個(gè)優(yōu)點(diǎn)[4]。
  (1)由于引入了平均因素,因而對(duì)圖像中的隨機(jī)噪聲有一定的平滑作用。
  (2)由于它是相隔兩行或兩列之差分,故邊緣兩側(cè)的元素得到了增強(qiáng),邊緣顯得粗而亮。
  使用Modelsim進(jìn)行功能仿真,主要是調(diào)用.tcl 文件對(duì)RTL 級(jí)的VHDL 代碼仿真。由于Simulink 的仿真是算法級(jí)的,而此仿真是針對(duì)硬件結(jié)構(gòu)的,兩者之間可能存在軟件理解上的差異,所以對(duì)RTL 級(jí)VHDL 代碼的仿真是必要的。仿真結(jié)果和系統(tǒng)級(jí)仿真一致。編譯生成.pof 文件,下載到目標(biāo)芯片中,從而完成整個(gè)邊緣檢測(cè)模塊的設(shè)計(jì)。
參考文獻(xiàn)
[1] 賈永紅.計(jì)算機(jī)圖像處理與分析[M].武漢:武漢大學(xué)出版社,2002.
[2] 李弼程,彭天強(qiáng),彭波.智能圖像處理技術(shù)[M].北京:電子工業(yè)出版社,2004.
[3] 潘松,黃繼業(yè),王國(guó)棟.現(xiàn)代DSP技術(shù)[M].西安:西安電子科技大學(xué)出版社,2003.
[4] 劉禾.數(shù)字圖像處理及應(yīng)用[M].北京:中國(guó)電力出版社,2005.

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。