

英语原文共 14 页,剩余内容已隐藏,支付完成后下载完整资料
一种低成本且鲁棒性强的Canny边缘检测算法FPGA实现
摘要
在目前现有的计算机视觉算法中,Canny边缘检测算法明显优于许多边缘检测技术。但是,Canny边缘检测算法实现复杂,计算耗时长且资源占用高。为了克服这些问题,本文提出了一种新颖的Canny边缘检测算法,该算法在硬件层级上以相同的精度检测边缘。它使用Sobel算子,并使用近似法来计算梯度值和方向,降低算法的复杂度并以此降低硬件资源的使用,以实现非极大值抑制,自适应阈值的和现有的双阈值门限法。引入流水线级操作以减少延迟。该算法在Xilinx Virtex-5 FPGA上实现,与帧级Canny边缘检测算法相比,具有更好的性能。与现有的分布式Canny边缘检测算法相比,该合成架构将运算时间减少了6.8%,并能利用更少的资源来实现512times;512图像的边缘检测。
1引言
在计算机视觉,机器视觉,图像处理和应用中,边缘检测作为预处理步骤发挥着至关重要的作用。边缘定义的是图像内的对象边界,当像素值中存在不连续性时,则将该类性质定义为边缘。光照条件多样性,噪声干扰以及处理速度较慢使得边缘检测算法的实现具有很大的挑战性。这些挑战使边缘检测更加不可靠且充满困难。
许多研究人员提出了多种边缘检测技术。现有的各项边缘检测技术包括Roberts算子,Prewitt算子,Sobel算子,Laplace of Gaussian 算子和Canny算子等。在这些边缘检测技术中,Canny边缘检测算法能够克服所有其他边缘检测器的一些局限性来提供更好的性能,从而在锐利边缘的检测和抗噪性方面取得了更大的提升。但在实际应用中,Canny边缘检测算法的计算成本和时间成本很高。为了克服这些缺点,本次设计即基于Canny边缘检测算法的基于现场可编程门阵列(FPGA)的硬件实现。
针对实时应用的基于FPGA的Canny边缘检测算法已有几项研究。在FPGA实现Canny边缘检测算法过程中利用系统级硬件和软件协同设计工具进行,由于高延迟而导致性能下降。为了减少延迟,引入的并行实现模型对像素并行处理,与参考文献中实现方法相比,增加了内存访问。在现有的硬件实现方法中,磁滞阈值法使用恒定的低阈值和高阈值来降低软件复杂度,但会降低性能。引入的自适应阈值计算可通过增加延迟来提高性能。具有低延迟和计算复杂度适当的阈值计算方法是Canny边缘检测算法中的重要部分。最近的工作试图通过采用绝对运算来减少计算复杂度和延迟,却会导致性能下降。为了实现高吞吐量,文献中引入了鲁棒的阈值计算方法,即分布式Canny边缘检测算法,该算法将图像划分为多个块,然后将Canny边缘检测算法并行应用于每个块以减少延迟。并行实现利用更多资源,增加了计算复杂性。基于块的Canny边缘检测算法比基于帧的技术更有效。基于块的方法基于每个块的局部属性计算低阈值和高阈值,有助于抑制平滑区域中的过多边缘,并保留大量细节区域中的明显边缘。参考文献中在FPGA上实现的边缘检测算法由于使用了大量的乘法器,却导致检测边缘的过程中产生了较高延迟。
参考文献中所提到另外一组人所做的工作,就是将按照Canny算法得出的Deriche滤波器移植到到基于ASIC的平台。使用具有四个处理器的Canny-Deriche滤波器网络在6 s内检测到256times;256图像的边缘,延迟很高。使用片外SRAM存储器并使用后进先出的(LIFO)堆栈数据格式后,Canny-Deriche滤波器实现以33 MHz的速度以每秒25帧/秒的速度进行处理,但与前一种实现方式相比,增加了硬件开销。为了减少存储器大小和计算成本,在零一参考文献中提出了新的Canny-Deriche过滤器架构。但是,处理时间随图像大小而增加,并且每个像素实现的时钟周期数随处理图像的大小而变化。
最近开发的通用图形处理单元(GPGPU)为图像处理应用程序提供了并行计算平台。对GPGPU上的Canny边缘检测实现进行了研究。该方式实现的边缘检测算法表现出较差的检测性能,因为它对所有图像使用固定的高阈值和低阈值,但与所有其他实现方式相比,具有更好的时效性能。
当Canny边缘检测硬件实现应用于最终用户时,应降低硬件成本。在以前的实现方式中,通过采用粗略的计算来避免复杂的操作,从而降低了硬件成本,并且减少了输入数据以满足实时应用的要求,从而导致精度降低。因此,需要在硬件成本和准确性之间进行权衡。为了克服这些问题,开发了一种新颖的Canny边缘检测算法,该算法具有足够的精度并降低了计算复杂度。为了提高精度并降低硬件成本,边缘检测系统采用了近似方法,并为了减少等待时间,采用了流水线技术。将该系统的性能与分布式Canny边缘检测算法进行了比较。比较表明,新开发的Canny边缘检测系统使用的硬件较少,且逻辑单元数量的减少提高了数据吞吐量。主要的设计策略如下。
(1)使用近似方法计算梯度幅值和方向。
(2)块分类技术。
(3)每个块的自适应阈值计算。
利用上述策略,可以有效地提高边缘检测算法的性能。本论文的组织如下, 第2节概述了常规Canny边缘检测算法以及FPGA上Canny边缘检测算法的建议逻辑架构。建议的逻辑架构的性能在第3节中进行了评估。最后,第4节给出了结论和未来研究的进一步的方向。
2设计方法
2.1常规Canny边缘检测算法
参考文献中介绍了传统的基于帧的Canny边缘检测的概述。图1总结了大小为Mtimes;M,每个n位的输入图像的Canny边缘检测算法流程。下面说明实现Canny边缘检测算法的基本步骤。
图1 Canny边缘检测算法的实现流程
(1)水平和垂直方向上的梯度,与。分别针对每个像素通过将图像与梯度蒙版进行卷积。
(2)计算每个像素的大小和方向。大小和方向定义每个像素处边缘的强度和方向。
(3)非极大值抑制(NMS):通过抑制梯度图像中的最小值(保留局部最大值)来将图像的模糊边缘转换为锐利边缘。
(4)阈值的计算:潜在边缘由高和低阈值确定,并基于整个图像的梯度幅值直方图进行计算。
(5)滞后阈值:通过将每个像素的梯度幅度值与低阈值和高阈值进行比较,来创建连续边缘图。它消除了由于噪声和光照变化而导致的边缘像素。
图2a中所示的原始Lena图像是常规Canny边缘检测算法的输入。图2b,c分别展示的是图像内的平滑区域和边缘区域的放大块。图2d显示了常规Canny边缘检测算法的结果。图2e,f分别示出了更平滑区域和边缘区域的放大块的边缘图。可以观察到,即使没有不连续性,在平滑区域中也会存在过多的边缘,并且边缘区域中的重要边缘也会丢失。这是由于传统的Canny边缘检测算法是根据整个图像的统计数据计算低阈值和高阈值而导致的。
图2
a. 大小为512 times; 512的原始Lena图像;b. 平滑区域的放大部分;
c. 边缘区域的放大部分;d. Lena图像的边缘检测结果图;
e. 平滑区域的放大部分的边缘检测结果图;f. 边缘区域的放大部分的边缘检测结果图。
2.2改进的Canny边缘检测算法
通过采用基于块的技术而非基于帧的技术,可以提高参考文献中常规Canny边缘检测的性能。在基于块的Canny边缘检测算法中,大小为M times; M的原始图像被分为大小为m times; m的N times; N个非重叠块,每个块都有n位。在每个不重叠的块中检测到边缘会导致区块效应。非重叠块沿顶部,底部,左侧和右侧边界延伸特定像素,以创建重叠块,目的是消除区块效应。这导致ktimes;k个重叠块,其中k = m 2。改进的Canny算法的步骤1、3和步骤5与常规Canny算法相同,唯一的区别是这些步骤应用于块级。对步骤2中的梯度幅度和方向计算进行了近似,以降低的硬件成本。修改了步骤4(称为自适应阈值计算的高低阈值计算),以通过利用局部块统计信息来提高性能。从数据库中了解图像的局部块统计信息。对于数据库中的每个图像,通过使用有效的分类技术,将不重叠的块构造并分类为:(a)光滑区域(b)纹理(c)普通边缘(d)明显边缘。这种分类技术利用每个像素梯度幅度的局部均值,使用以当前像素为中心的3times;3的矩阵将其标记为均匀,纹理和边缘像素。然后,根据边缘像素的总数对每个块进行分类。根据梯度幅值的中值从数据库图像研究低阈值和高阈值。使用均匀量化的梯度幅度直方图计算每个块的中值,并以滑动窗口算法实现,从而以更少的硬件提高阈值的准确性。自适应阈值计算有助于抑制均匀区域中的过多边缘,并发现边缘区域中的显著边缘。图3所展示的即为改进的Canny边缘检测设计策略的概述。下面给出了改进的Canny边缘检测算法的详细描述。
图3 改进的Canny边缘检测算法流程
a. Sobel算子x方向上的核函数 b. Sobel算子y方向上的核函数
图4 Sobel算子
基于Sobel算子的梯度计算
Sobel算子被用作梯度蒙版。参考文献中采用Sobel算子而不是其他运算符的重要原因,就是它结合了差分运算和高斯平滑。更多的权重分配给边缘周围的像素强度。图4显示了水平(x)方向和垂直(y)方向上的Sobel算子的核函数。对于每个像素,使用公式(1)和公式(2)计算由与所表示的x与y负方向上的梯度。
(1)
(2)
其中,、、、、、、、。
在实践中,Sobel算子无法高精度地识别边缘。如式(1)和(2)所示,使用两个补码减法来计算梯度。溢出位()用于标识结果数据的符号。如果发生溢出,则将其视为正值,否则视为负值。其中负值用二进制补码表示。图5所示是对与进行计算的逻辑架构,在提出的的Canny边缘检测算法实现中,通过使用两个补码减法和基于移位的乘法运算来降低逻辑资源的使用。
图5 计算与的逻辑架构
2.2.2梯度幅值和方向计算
2.2.2.1梯度幅值计算
像素的灰度值决定了像素的边缘强度。公式(3)中给出的是单个像素的幅值计算方法,需要进行两次平方和一次开方运算。使用公式(3)计算单个像素的梯度幅值。
(3)
通过在硬件中实现公式(3)所需要占用的逻辑资源很多。在提出的设计方法中中,采用了参考文献中建议的低硬件资源实现技术,即平方根近似,来计算幅度。其计算公式如下。
(4)
其中,,。在公式(4)中,乘法运算通过移位执行,加法器计算两个输入的相加。图6所示为平方根逼近的逻辑架构,其中CMP块比较输入值并得到最大值和最小值并将其作为输出。
图6 平方根近似的逻辑架构
2.2.2.2梯度方向计算
像素定义特定像素的边缘方向。方向在公式(5)中给出。
(5)
每个像素的方向n介于0°到180°之间。每个角度的计算都会增加硬件成本。在较早的硬件实现中,使用坐标旋转数字计算(CORDIC)模块通过旋转矢量来计算三角函数。坐标转换是使用一系列的移位和加法操作执行的。CORDIC模块的缺点是最终需要更多的迭代次数,并导致使用更多的硬件来达到可接受的精度。
为了降低硬件资源的使用,将方向均匀地分割成9个区域,如图7所示。
图7 九个梯度方向的区域
为得到所属的区域,将定义为,并在两个角度值之间定义一个特定的区域。为了简化起见,可以将公式(5)重写为:
(6)
为了降低硬件资源使用,采用了基于移位的方向定位方法。表1列出了基于移位运算的近似值。
表1基于移位运算的近似值
表中的值显示方向tan 0°至tan 90°位于第一象限,而其他方向直到tan 180°位于第二象限。第二象限和第一象限的tan值相同,但极性不同。使用象限标志找到象限。象限标志计算过程如图8所示,其中的输入和在图5中加以描述。
图8 象限标志计算结构
的值通过公式(7)计算得出。
(7)
将公式(7)重新推导得到公式(8),
(8)
从公式(8)得出的条件在公式(9)中给出,
(9)
通过满足等式(9)中给出的条件来计算各区域的值。由于条件中的包含乘法运算,因此等效于将移位特定值,如表1中的近似计算所示。图9展示了用于计算的体系结构,图10展示了用于定位区域的逻辑结构。该条件由比较器(CMP)进行检查,如果满足等式(9)中提到的条件,则根据象限标志值计算得出定位区域。
图9 计算的逻辑架构
图10 计算分区的逻辑架构
2.2.3块分类
块分类方法利用局部块统计来标记类型为边缘,纹理,中边缘和强边缘块。它分两个阶段执行:像素分
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[236763],资料为PDF文档或Word文档,PDF文档可免费转换为Word
