英语原文共 8 页,剩余内容已隐藏,支付完成后下载完整资料
一种新的基于FPGA实现Sobel边缘检测算子的结构
T.A.ABBASIy and M.U.ABBASI
国立伊斯兰大学,理工学院,电子与通信工程系,新德里,110025,印度
Virage Logic国际公司,部门-57,诺伊达,201307,印度
摘要:提出了一种新的基于FPGA实现Sobel边缘检测算法的结构。选择Sobel算法是因为其由单核同时提供了差分化以及噪声平滑处理的特性。因此,使用该算法可以减轻基于一阶梯度的运算对于噪声的敏感。在现场可编程门阵列(FPGA)上实现边缘检测算法是因为在现在,大容量的FPGA可以提供一个比可编程数字信号处理芯片(DSP)更好的处理实时算法的平台。本结构可以当作模式识别系统,自主机器人导航的组成模块,也可以作为一种系统为多媒体图像创造丰富多样的效果。本结构以内含的流水化提供了一种可以工作在99.499MHz时钟下的系统,相比于于用可编程DPS芯片实现有显著的提高。
关键词:边缘检测算法;基于一阶梯度的运算;硬件实现;Sobel算子;VLSI
1 引言
边缘被认为是一种最重要的图像属性,它为人的形像感知提供有价值的信息。图像边缘出现在图像灰度显著变化的地方。在一幅图像中有很多种类的灰度变化。通常,边缘检测的目的是定位那些属于有用对象边界的边缘。一般利用数字计算机对图片进行识别或分类都是通过不同区域间的边缘信息来实现。在图像处理,模式识别和机器人技术中,边缘检测被公认为是图像处理中最重要的任务。虽然人眼完成这个任务很容易,但是用机器实现边缘检测是一个困难的任务。因此,一直以来针对这个问题做了大量的努力,提出了大量的边缘检测算法(Jain 1989,Chanda and Dutta Majumdar 2001,Gonzalez and Woods 2002,Bose 2004, Pratt 2004,Heath等 2002)。但是,绝大多数研究都是集中在寻找更好的边缘检测算法,而不是它们的实现问题。
目前,边缘检测算法的实现局限于专用微型计算机—可编程数字信号处理器(DSP)。它们是基于一种由至少一个快速阵列乘法器(例如16*16位至24*24位定点型或32位浮点型)组成的架构为框架的精简指令集(RISC)和一个扩展字宽的累加器。可编程DSP的缺点在于速度,因为它需要一个固定的结构去映射所要求的应用。现在,对于可编程器件的研究已经可以用这些器件实现边缘检测算法,其设计周期在几小时到几天不等。
近几年来,现场可编程门阵列(FGPAs)已经成为可编程逻辑器件的主流形式(Jenkins 1994, Smith 1997, Weste and Eshraghian 2000, Wakerly 2002)。与以前的可编程器件相比如可编程逻辑阵列(PAL)和复杂可编程逻辑器件(CPLD),FPGA可以实现更大型的逻辑功能。FPGA支持充足的逻辑单元来实现完成的系统和子系统。FPGA利用不断提高的集成电路性能给设计者提供可以在特定应用基础上编程的可重构逻辑。这大大提高了在设计过程中,以及最终器件通过板级设计执行许多功能或在其上升级的灵活性。FPGA的表现优于可编程DSP,因为它支持高度并行的架构。尽管对于FPGA解决方案的设计工作要比可编程DSP复杂,但硬件描述语言的应用和灵活的核心组件库(如Xilinx公司的核心工具)显著减少了工作量。此外,嵌入式存储器的增加使高处理器数目不受I/O口,低封装数和灵活性的限制,整个系统可以不受固定内存数的约束重新编程。
在这篇文章中,提出了一种基于FGPA的Sobel边缘检测算法实现。选择Sobel边缘检测算子是因为其结合了边缘检测和平滑算子来提供在噪声环境下的高边缘检测性能。为了增加其运行速率,本设计是基于内部流水运算的并行模块。应用目标是在高速计算机视觉(每秒超过100幅图像)。使用Xilinx公司的Xilinx ISE 7.1i软件平台配合在Modelsim SE 5.8c仿真器上仿真并用Leonardo spectrum 2004综合。该结构在Xilinx的Spartan 3系列的XC3S1500_5FG320型号FPGA上验证。
2 Sobel边缘检测器算法
边缘检测算法基本分为两个步骤。边缘检测的第一步需要求图像灰度的导数值。为了表征不同类型的灰度变化,可能需要不同类型和阶数的导数,还可能要在不同的尺度下。Sobel边缘检测算子是以一阶梯度运算为基础,如图1所示。一阶导数算法和基于一阶差分的算子是最简单的,所以它们被选择在硬件上实现。
图1 Sobel边缘检测算法的运算操作
把u(p,q)认为是一个二维边界部分。我们知道,正交边缘梯度可以通过历经水平方向和垂直方向上的不同像素来构成。它的模值形式被定义为垂直梯度模值与水平梯度模值之和
(1)
平方根形式为
(2)
这里
(3)
(4)
模版为
(5)
(6)
在机器视觉中与在多数数值问题中一样,数据是有噪声的。噪声在光信号传导过程中是不可避免的。传感器噪声的产生有一部分是因为每个传感器每单位时间吸收光子数目的量子波动。这是实时成像的一个基本限制。这里极为重要的一点是对数据进行的数值运算的结果对噪声并不敏感。同时,我们知道,求导运算对噪声很敏感。即使是很少量的噪声也会干扰求导。考虑一个函数和。可能和很接近,但是当很大时,可能与有很大的不同。这表明,基于梯度运算是对噪声高度敏感的,在进一步处理前需要进行噪声平滑处理。Sobel算法通过将差分和平滑运算结合在一个单核中解决这个问题。
以及
对水平和垂直邻域的加权是通过给相邻的像素更高的权重来平滑噪声。选择3times;3的邻域是为了减小算子对噪声的敏感。该算子在一个维度上执行差分运算,在另一个维度上对空间加权平均来得到一个平滑的边缘。
此算法的最后一步是通过将得到的正交边缘梯度与预定阈值进行比较,筛选出非边缘像素的边缘像素。阈值的选择完全由实际应用要求决定。
3 总体结构
提出的结构如图2所示。附加的触发器用于加快处理速率。地址发生器的输入是8位的像素值和写使能位。3times;3的核运算会导致图像的尺度从[M,N]减少到[M-2,N-2]。
图2 Sobel边缘检测算子的实现结构
所以,首先要将图像矩阵的大小从[512,512]增加到[514,514]。为了存储这个图像矩阵,声明了一个514times;38字节的内存。当地址生成器模块的写使能信号有效时,写入内存,存储38行,514列的图像数据。当3行完全写满时,读使能位将变为有效,开始像素值的处理。在38行图像完全填满之后,剩余的行可以开始写入。以同样的方式,将整个图像写入,然后读取进行处理。在读取过程中,3times;3的核以zigzag模式变换赋予模块的输出从内存中读出的8个像素值:
; ;
; ;
; ;
; ;
指针i从0增加到18501。另一个声明的指针k,每当核在水平方向上移动时增加。
当处理完512个像素之后,指针k将3times;3的核向下转移一行。它的代码如下:
always @ (posedge clock)
begin
if (read_enable)
k = k 1rsquo;b1;
else
k = 0;
if (k == 512)
begin
k = 0; i = i 3;
end
else
k = k 1;
end
解码器的输出是12个像素值,下一步将进入不同的加权模块,在那里将1,2,1和-1,-2,-1的权重赋予它们。
一般来说,除法是难以用数字硬件实现的,所以尽可能少的运用除法是比较有利的。我们可以简单的在硬件上实现除2和除4的运算,因为它们可以由数字模块进行移位运算实现。因此,在硬件上实现Sobel算法的问题可以得到进一步简化。在加权之后,把像素值相加,最终,将梯度值与预先设置的阈值进行比较。比较的结果是一个1位的像素值。然后比较器产生一个开始位,作为地址发生器的输入。在这位信号有效之后,地址发生器开始在512times;512位的RAM中存储这些二进制值1rsquo;b1和1rsquo;b0。这个操作的代码如下:
begin
if (start == 1rsquo;b1 amp;amp; m! = 262144)
m = m 10b1;
else
m = 0;
final_ram [m] = edge_pixels;
end
这里的m是一个取值从0到512times;512(即262144)的指针,edge_pixels是0,1形式的二进制图像的像素。这些值可以与255相乘,得出8位形式的图像。
4 结论
本Sobel边缘检测算子的系统由Verlog HDL语言(Smith 1996, Thomas and Moorby 2002, Palnitkar 2003, Bhasker 1999)实现,在Xilinx Spartan 3系列的XC3S1500-5FG320型号的器件上综合实现,并通过mentor图形公司的Modelsim SE 5.8c软件进行仿真。该器件拥有32个18k位的模块,总共72000字节在本结构中使用。
使用512times;512像素的256灰度等级的测试图像。该器件的使用概要在表1中给出。本结构可以在99.499MHz的时钟频率下运行。因此,512times;512像素图像的边缘可以在仅仅2.65ms内完成。
表1 器件利用概要
使用 |
共计 |
FPGA使用率百分比 |
|
片数量 |
328 |
13312 |
2% |
触发器数量 |
306 |
26624 |
1% |
4输入LUT数量 |
517 |
26624 |
1% |
IOB数量 |
19 |
221 |
8% |
BRAM数量 |
32 |
32 |
100% |
GCLK数量 |
1 |
8 |
12% |
图3展示了测试图像和本系统综合仿真后的处理结果。最终综合仿真是在Leonardo Spectrum 2004和Xilinx ISE7.1i软件上进行。对触发器的使用可以进一步减少,可以减少延迟,但是那样系统就不能和现在一样快速。适当的流水式步骤可能会增加延迟,但是时钟平率得到提高。更深入的流水线概念可以测考Weste and Eshraghian(2000)以及Rabaeyd等(2003)。
(a) (b) (c)
(d) (e) (f)
图3 系统验证:(a-c)是原始512times;512测试图像;(d-f)是边缘检测后的图像
5 总结和展望
提出了一种基于FPGA的Sobel边缘检测算法结构。本结构可以通过改变地址发生器和解码器模块和运行频率的微调适应任何分辨率的图像。本系统结构可以在99.499MHz时钟频率下运行,远优于在软件平台上通过C或C 等高级语言处理图像。这样的频率确保了对高分辨率图像(如1024times;1024像素)的边缘检测结果可以在10.5ms内计算出。可以通过在解码器和地址发生级添加更多的流水线级来进一步提高运行速率,但这样做将大大增加硅面积却只能得到很小的提升。采用了Xilinx Spartan 3 XC3S1500-5FG320型的FPGA器件,总的FPGA片内利用率仅有2%,所以可以运用该结构在同一片中等存储容量的FPGA上实现大量的并行处理。不选择更小存储量的器件是因为如果行数小于38,读和写过程可能发生冲突,所以要避免这种冲突,只能令读和写过程在几个时钟周期内同时结束,这将引起更长的总延迟。
参考文献:
J. Bhasker, A Verilog HDL Primer, 2nd ed., India:
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[28977],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。