基于FPGA的Sobel算子图像边缘检测算法的实现外文翻译资料

 2023-03-01 12:03

基于FPGA的Sobel算子图像边缘检测算法的实现

摘要

实时处理应用程序在时间约束限制下需要对图像大量数据进行处理。FPGA平台具有可重复编程的能力,对于图像处理实时性越来越高的需求,FPGA可以提供一个很好的解决方案,FPGA具有的天然并行性特点可以为图像处理节省时间。另外,FPGA高度并行的系统架构和大量的并行访问式的内部存储器及优化的处理元件使得FPGA成为图像处理的理想系统。边缘检测是许多图像处理应用程序从图像中提取信息的基本处理工具。Sobel算子是基于梯度的一种检测图像边缘信息的边缘检测算子。本文提出一种通过Sobel算子在灰度图像中检测图像边缘信息的方法。所用的软件平台是Xilinx的ISE Design Suite-14,使用VHDL(Very-High-Speed Integrated Circuit Hardware Description Language)硬件描述语言开发设计。MATLAB软件用于帮助从灰度图像中提取图像数据矩阵。结论得出Xilinx Vertex-5相比于Spartan-3和Spartan-6.更适合图像处理操作。

关键词:边缘检测,Sobel算子,FPGA,VHDL,实时图像处理

介绍

图像处理在智能传输系统中具有重要应用,如车辆自动驾驶,导弹自动飞行等。图像可以等效表示为一个二维的函数f(x,y),其中x与y表示图像像素的空间坐标,函数的求值给出此点的强度或灰度大小。函数f(x,y)变化剧烈位置的像素称为边缘像素,边缘像素连接在一起构成边缘。检测像素与相邻像素的变化程度的过程叫做边缘检测,即边缘检测是识别边缘的过程,图像像素急剧变化的地方被认为是图像的边缘。边缘可以用拉普拉斯算子从图像中提取,而本文基于Sobel算子模板,Sobel算子基于一阶导数计算了数字图像的梯度,Sobel与Prewitt算子是图像边缘检测处理中常用的两种工具,在灰度图像中,代表一个灰度需要8个比特,这说明灰度的范围为0到255,其中0代表黑色,低亮度,255代表白色,高亮度。FPGA内部包含可编程逻辑元件,这些可编程逻辑元件可以来实现DSP(数字信号处理)的运算功能,并且FPGA含有大量的可并行访问的内部存储器件,这些优点使得硬件几个时钟周期内能够执行完串行操作处理器成百上千个时钟周期才能处理完的功能。FPGA在较低的时钟频率下工作,而较低的工作频率意味着更低的功耗,所以FPGA开发平台是节能设计的好选择。在图像处理系统中使用FPGA可以快速实现功能原型设计,这样可以最大程度的降低时间影响的上市成本。本篇文章剩下的组织结构为:第二节讲述图像边缘检测的理论概念。第三节主要分为两个模块,Sobel算子的边缘检测操作细节和3x3窗口的像素数据生成。第四节描述测试设计流程,第五节描述实验结果和Xilinx系列如Spartan-3,Spartan-6和Vertex-5系列的FPGA器件的硬件资源利用。

理论概念介绍

图像是对象的空间表示,实时图像处理系获取图像,分析这些图像以获取需要的数据,并运用这些信息达到需要的控制目的。边缘信息反应在频谱上是高频分布,所以可以用高通滤波器来实现边缘检测,边缘的特征在于像素与相邻像素的差异。在现实世界中获取的图像,边缘通常是模糊的,这意味着图像具有坡度的边缘,一阶差分在计算时,具有恒定灰度级的区域梯度计算为0。只有在具有坡度边缘的范围梯度计算为非零值,所以一阶差分可以用于边缘检测。下图为3x3窗口模板的结构及水平和垂直方向的Sobel算子模板。

图1 3x3模板结构

图2 水平方向Sobel算子

图3 垂直方向的Sobel算子

函数f(x,y)在(x,y)位置的梯度定义为一个三维列向量,向量指向函数变化率最快的方向,梯度的定义式为:

(2.1)

Sobel是基于梯度的边缘检测的算法,Sobel算子是线性运算算子,水平卷积内核逐像素逐行扫描图像以检测水平方向的边缘。同理垂直卷积内核逐像素逐行扫描图像以检测垂直方向的边缘。水平卷积内核与输入图像卷积给出分量,垂直卷积内核与输入图像卷积给出分量,与的计算表达式为:

(2.2)

(2.3)

向量的大小可以表示为:

(2.4)

为了更加方便快速的计算,公式(2.4)可以表示为:

(2.5)

公式(2.5)仍然可以表达灰度强度的相对变化,本文运用3x3窗口计算的原因在于更大的窗口意味着FPGA上实现更多的FIFO(First-In-First-Out)队列,所以阶数的增加造成了更多的FPGA资源的消耗。

Sobel边缘检测的系统架构

Xilinx的 ISE Design Suite-14软件平台用来设计边缘检测算法,软件平台使用VHDL硬件描述语言完成算法相关模块的设计,m x n尺寸大小的图像输入图像边缘检测系统,系统输出端获得相同尺寸大小的边缘检测灰度图像结果如下图4表示了模块3 x 3窗口的数据生成和Sobel算子边缘检测系统构成的架构。

图4 边缘检测系统架构图

8位输入图像的像素值作为3x 3模块的输入,3x 3窗口模块包含两个FIFO队列模块和3个移位寄存器。Sobel边缘检测模块包含卷积计算模块,加法模块,阈值比较模块,模块与输入时钟的时序同步,外部单独设置复位线,当复位线处于低电平时,系统开始进入复位设置。

有效的3x3窗口数据生成模块

图5说明了3x3窗口实现的内存架构。由于设计的是3x3窗口模块,所以需要2个FIFO队列和3个移位寄存器用于来对8位的输入像素数据缓冲处理,以达到窗口的数据同时输出。设计的FIFO具有先进先出的特征,每个FIFO队列需要缓冲一行的原图像数据,这里用来测试的图像是256x256的,所以FIFO的大小为256。在时钟的每一个上升沿到来时,输入图像数据存入FIFO队列,并且满足一定条件后,FIFO的数据输出到移位寄存器,这时FIFO开始边读边写的操作,而移位寄存器起列延时的作用,以保证窗口的数据同时输出。

图5 3x3窗口数据同时输出模块架构

图6显示了有效3x3窗口数据输出的模块示意图。

图6 有效的3x3像素数据输出示意图

图7是3x3模块对一个8x8大小的矩阵测试的结果:

图7 3x3模块对一个8x8大小的矩阵测试

0 0 0 0 200 200 200 200

0 0 0 0 200 200 200 200

0 0 0 0 200 200 200 200

0 0 0 0 200 200 200 200

0 0 0 0 200 200 200 200

0 0 0 0 200 200 200 200

0 0 0 0 200 200 200 200

0 0 0 0 200 200 200 200

图8 8x8测试矩阵

从图像可以看出,当移位寄存器都填充了有效的输入图像数据,valid_data信号变高,而在其他情况下,valid_data信号为低。所以可以通过指征有效的信号输出。模块的balck_data端口用于对图像的边缘位置填充0,这使得输出图像的的大小与输入图像的尺寸相同。而行计数器与列计数器用于决定valid_data信号何时为高,何时为低,当然,它也决定了对图像边缘3x3窗口无效位置填充0的时钟控制信号。当valid_data信号为高时,3x3窗口模块输出的数据可以用后后续的卷积模块的计算。

边缘检测的系统架构

图9显示了边缘检测模块的示意图,Sobel算子模块包括卷积运算,阈值比较,加法模块。卷积操作使用加法器,乘法器,分频器来计算卷积的输出。实时性对系统的处理的速度要求更高,而数量更多的运算会使得FPGA的性能下降,于是开发算法更加关注算法的并行性的特点,而算法的并行性的语句都是并行执行的,这可以显著的改善算法的性能。如乘法运算通过位向量移位完成。

图9 Sobel边缘检测模块示意图

Sobel对与 的计算通过水平与垂直的Sobel卷积核与输入图像计算卷积获得,卷积的计算结果可能为正,也可能为负,当得到负数的卷积结果时,计算其绝对值可以通过取其二进制的补码获得,如果计算获得的超过了阈值,则Pixel Data Out输出的值为255,而其他的情况直接取为的计算值,如果black_data的信号为高电平,则Pixel Data Out的输出值为0,通过使用阈值来判断控制,可以有效的减小噪声对于图像的影响,以获得更加理想的边缘检测,图10显示了通过Sobel边缘检测模块来检测测试矩阵的输出值。

图10 Sobel边缘模块检测结果

测试单元架构

为了测试VHDL描述的硬件结构的正确性,可以运用一种特殊的测试激励代码Test Bench来测试功能的完整。Xilinx平台提供了转为仿真提供的功能,这个仿真功能提供有效的输入,并且显示它在FPGA实现的硬件上如何的工作。为了模拟这个设计,测试中设备DUT(Device Under Test)和被测试装置UUT(Unit Under Test),加上测试需要的由测试单元提供的信号激励是被需要的。它们整体组成了一个完整的测试单元。通常情况下,写测试激励单元的硬件描述语言与被测单元的实体所用的硬件描述语言是相同的,及如果实体用的是VHDL,则测试单元也用VHDL,如果实体用的是Verilog语言,则测试激励单元也用Verilog来完成。测试单元主要有3个目的,首先产生仿真需要的外部信号激励,用于提供给被测设备工作需要。第二步,将该激励输入被测试的模块,使被测模块在该信号激励下工作。最后收集被测试模块反馈输出的响应,以判断被测模块实现的电路逻辑是否准确。写VHDL测试激励时,它允许从一个文本文件中读取数据作为应用,也允许将某些值写入到一个文本文件保存。为了获取原始图像数据用来处理,可以获取MATLAB的帮助,这里可以写一个MATLAB的程序,它读取一副图像的数据,并将图像的像素信息写入一个文本文档中,对于一个m*n尺寸大小的灰度图像可以获得一个m*n大小的矩阵,通过MATLAB可以将这个m*n的矩阵写入一个输入文本中,以供利用。这里像素信息写入文本中的是以整数的类型。FPGA程序项目从输入文本中读取像素的数据信息,并转化整数类型为一个8比特的单位向量,用作测试单元用来测试边缘检测过程的原始数据。被测单元测试的输出同样是8比特长度的单位向量,它可以用来构建边缘检测的图像。可以通过测试激励单元将这个8比特的单位向量转化为整数类型输出。模拟仿真测试的数据存储在一个文本文档中,这个文本中的数据和边缘检测的数据格式及顺序相关的,且文本中为一个整数矩阵。这里为了将文本中的数据矩阵转化为对应着的灰度图像,可以通过matlab软件从文本文档加载边缘检测输出的检测数据,并将之转化成一副灰度图像,及边缘检测图像。图11显示了边缘检测的设计流程,所用的开发硬件描述语言为VHDL。设计流程检测了开发平台实现的边缘检测算法功能的正确性与完整性。

图11 边缘检测设计流程图

实验结果

在本文中大小为640x480的的灰度图像将用于实验测试,其中行数为480,列数为640, FPGA硬件器件为Xilinx生产的Vertex-5系列的Vertex-5和Spartan-6系列XC6SLX25,XC3 S400系列Spartan-3,它们被用来当作目标设备进行测试。为了满足对于实时性的要求,FPGA的对于一桢数据的处理需要在期望的规定的时间内完成。 对于典型的CMOS数字传感器相机maXllllum,它的帧速率大约为每秒30帧,像素数据输出有效的最大像素时钟频率为48MHz,单帧像素数据处理在7.696毫秒内完成。像素时钟为40MHZ时,单帧像素数据处理在6.412毫秒内完成。这里40MHZ和48MHZ的像素时钟分别能满足实时性处理的要求。边缘检测图像在水平方向的检测结果为水平Sobel卷积核与输入的像素数据进行卷积运算,卷积运算的结果和设置的阈值作比较,得到水平方向的边缘检测信息。同样的是,边缘检测图像在垂直方向的检测结果为垂直Sobel卷积核与输入的像素数据进行卷积运算,卷积运算的结果和设置的阈值作比较,得到垂直方向的边缘检测信息。图12,13,14显示了实现图像边缘检测算法来处理640*480图像所需要消耗的硬件资源利用情况,最新的一代FPGA器件如vertex-5系列内部包含DSP48E系列的数字信号处理芯片,这个芯片支持25位*18位的乘法运算,加上3路输入的48位加法器,它可以用来实现一个高效的加法器链,这样可以更有效的实现一个高性能的滤波器架构。vertex-5系列的FPGA器件在实现一些数字信号处理常见的数学运算操作上更加的高效,这都使得它相比于SPARTAN-3系列和 SPARTAN-6 系列的产品在实现数字图像处理算法方面更有优势。

图12 SPARTAN-3系列设备XC3S400资源利用率概要

图13 SPARTAN-6 系列设备 XC6SLX25资源利用率概要

图14 VERTEX-5 系列设备 XC5VLX50资源利用率概要

通过资源利用率的比

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[137676],资料为PDF文档或Word文档,PDF文档可免费转换为Word

您需要先支付 30元 才能查看全部内容!立即支付

课题毕业论文、文献综述、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找。