以DSP Builder为基础的行车道检测的实现

时间:2011-09-05

  实现智能车自动导航和辅助导航的基础是通过对摄像头读入的道路白线图像进行灰度变换,再检测出白线的边缘。行车道检测系统用于智能车的控制和防撞预警。边缘检测电路的设计是设计该系统的重点。边缘检测电路包括图像输入缓冲电路、水平方向的边缘检测电路、垂直方向的边缘检测电路及对两部分检测的组合,通过阈值选择形成二值边缘图像。传统的方案大多采用单片机电路实现,系统调试和设计流程比较繁琐,开发时间长。在实时图像处理中,由于处理速度要求比较高,因此用以前的方法很难达到满意的要求。实时图像处理常常需要对图像进行卷积、求和、图像分割、边缘提取及特征提取等不同层次、不同种类的处理。通常采用FPGA芯片来完成一些运算结构简单,但要处理大量数据的算法。通过FPGA实现信号处理可以取得出色的系统稳定性,提高控制,从而可以很大的减少开发时间。本文利用Altera公司推出的数字信号处理开发工具DSP Builder作为设计平台,采用Altera公司的Cyclone EP1C6作为主控芯片,通过DSP Builder SignalCompiler模块读取由MegaCore和DSP Builder模块构建的Simulink建模文件,生成VHDL文件和工具命令语言脚本,进行硬件实施、综合和仿真,从而实现对整个道路边缘检测系统的设计。

  1 边缘检测及系统构成原理

  图像中像素灰度有阶跃变化或屋顶状变化的那些像素的集合就叫做边缘。它对图像分析和识别相当有用,边缘能勾勒出目标物体的轮廓,让观察者一目了然。边缘包含了丰富的信息,是图像识别中抽取的重要属性。微分运算有加强高频分量的作用,从而使图像轮廓更为清晰。对于数字图像,微分可用差分近似代替,沿x和y方向的一阶差分可分别表示:

基于DSP Builder的行车道检测的实现

  进行二维卷积操作的sobel边缘检测模块本是系统中的主要模块,它等同于硬件的协处理器。该系统从CF卡((Compact Flash)初是一种用于便携式电子设备的数据存储设备。作为一种存储设备,它革命性的使用了闪存,于1994年首次由SanDisk公司生产并制定了相关规范。当前,它的物理格式已经被多种设备所采用。)读入数据到边缘检测模块,使用Nios II控制数据流,采用DMA控制器在外部存储器之间传递数据,这些外部存储器等同于中间图像数据缓冲器。系统结构如图1所示。


基于DSP Builder的行车道检测的实现

 

以DSP Builder为基础的行车道检测的实现

  梯度幅度具有旋转不变性或各向同性,而且给出了该像素点灰度的变化率。采用微分锐化图像,会使条纹、噪声等得到加强,这在图像处理中会造成伪轮廓和伪边缘,为此对锐化算子进行了各种改善。Sobel算子就是其中一个例子,它在某种程度上克服了上述问题。以待增强图像的任意像素(i,j)为中心,截取一个3×3的像素窗口是Sobel算子的基本思想。分别计算窗口中心像素在x和y方向上的梯度。Sobel算子的表达式:

  Sx=

以DSP Builder为基础的行车道检测的实现

  加强后图像在(i,j)处的灰度值:

以DSP Builder为基础的行车道检测的实现

  2 基于FPGA的DSP Builder设计流程

  Altera DSP Builder将The MathWorks MATLAB和Simulink系统级设计工具的算法开发、仿真和验证功能与VHDL综合、仿真和Altera开发工具整合在一起,实现了这些工具的集成。设计人员可以使用DSP Builder模块迅速生成Simulink系统建模硬件,通过DSP Builder SignalCompiler模块读取由DSP Builder和MegaCore模块构建的Simulink建模文件(。mdl),生成VHDL文件和工具命令语言(Tcl)脚本,进行综合、硬件实施和仿真。

  此系统设计首先用MATLAB建立DSP电路模型。电路模型设计完成后,就开始进行系统功能的仿真,这是属于系统级并且基于算法的仿真,与目标器件无关。然后利用置于Simulink电路模型界面的DSP Builder中的Signal Complier将电路模型文件即Simulink模型文件(。mdl)转化为RTL级的VHDL代码表述和Tcl脚本。一旦获得了VHDL描述,就可以在Simulink中调用Quartus II中的综合器生成网表文件。下一步就是调用Quartus II中的编译器,根据网表文件及设置的优化条件进行布线布局和优化设计的适配操作,同时生成用于Moldelsim的时序仿真文件。将生成的Programmer Object File(。pof)对目标器件进行编程配置,即可在硬件上形成DSP系统。

  3 边缘检测系统的Simulink模型设计

  Sobel边缘检测模块包括独立且并行的水平检测和垂直检测两部分。输入缓冲通过一组延时线路转换输入的像素值。线路缓冲器的缓冲级数由图像的宽度决定。本设计采用的图像宽度是640。缓冲器的个数取决于卷积核的大小,本设计采用3×3的Sobel卷积核。垂直和水平方向的边缘检测几乎是相同的,两者之间的区别只在于从输入缓冲器流过的数据流。将两部分组合并通过阈值选择形成一幅经过边缘检测的二值图像。Sobel边缘检测是流水线操作,在每一个时钟周期都计算得到一个像素值,如图2所示。图中,Z-640是指本设计输入的图像像素宽度是640,右上角的加法模块实现的是垂直方向的边缘检测,右下角的加法模块实现的是水平方向的边缘检测。对于一般的灰度图像, 其像素的灰度值一般用8位表示,考虑到计算过程中可能出现负数和溢出问题。因此,数据在开始计算前先在位补零,使数据宽度变为10 位,计算完成后可再裁剪为8 位。

  在DSP Builder中设计的Sobel边缘检测系统如图3所示。

 

  4 仿真结果

  建立了。mdl文件之后,在Simulink中对其进行系统算法级仿真。设置Matlab各项参数和Simulink仿真参数,因为本设计采用图片的像素是640×480,所以设置仿真时间为307 201s(所有的像素数量加1)。

  测试表明,仿真结果符合要求,整个系统算法级设计是正确的。图4为原始的彩色图像,图5为经过水平边缘检测和垂直边缘检测后没有经过阈值选取的图像,图6为经过阈值选取后的二值图像。Sobel算子不像普通梯度算子那样用两个像素的差值,而是采用两列或两行像素灰度加权和的差值来表示,因此有以下两个优点[4]。

  (1)由于引入了平均因素,因而对图像中的随机噪声有一定的平滑作用。

  (2)由于它是相隔两行或两列之差分,故边缘两侧的元素得到了增强,边缘显得粗而亮。

  使用Modelsim进行功能仿真,主要是调用。tcl 文件对RTL 级的VHDL 代码仿真。由于Simulink 的仿真是算法级的,而此仿真是针对硬件结构的,两者之间可能存在软件理解上的差异,所以对RTL 级VHDL 代码的仿真是必要的。仿真结果和系统级仿真一致。编译生成。pof 文件,到目标芯片中,从而完成整个边缘检测模块的设计。


  
上一篇:一种UMTS Turbo MAP 解码器设计与实现
下一篇:一种基于CBIR技术的手机人脸识别系统设计应用

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料