[翻译]基于FPGA的Sobel边沿检测实现

[翻译]基于FPGA的Sobel边沿检测实现

ScienceDirect

1.Introduction

边缘(Edge)是一幅图像上强度发生显著变化的地方。找到边缘可以帮助识别对象的位置和图像中特定实体的边界。在特征提取(Feature Extraction)和模式识别(Pattern Recognition)方面也是大有帮助。因此,边缘检测在计算机视觉方面非常重要。到目前为止,大多数研究人员都选择使用软件实现基本的边缘检测算法和一些变形算法。但是,这些方法已经被确定不是有效的实时应用系统的实现。边缘检测算法在硬件平台上的实现对于实时性更加高效。随着超大规模集成技术的发展,硬件实现为软件中并行处理子程序的实现提供了一种方法。因此,硬件实现相对于软件来说,提供了更快的可替代方法。1994年Boo等人提出了使用VLSI技术在ASIC中使用Sobel算子来进行边沿检测的硬件实现。在过去的几年中,使用FPGA实现边沿检测算法的研究反过促进了实时图像处理的研究。在2009年时设计了实时算法,在FPGA板子上进行边缘检测。使用VLSI技术,在一颗硅片上集成10K-100K的晶体管,任何算法的并行化都有可能实现。所有的嵌入式系统都在ASIC或FPGA上设计与实现。

FPGA是一种具有可配置逻辑块(CLBs)的IC。根据需要的操作,CLB使用硅片上的路由通道进行互联。内部连接可以使用硬件描述语言(HDL)进行配置,比如VHDL或Verilog。如图一所示,硅片由输入/输出端口组成,在边界上提供输入和输出。Abbasi等人在2007年提出了一种在FPGA上实现Sobel边缘检测的架构。在2012年,这个架构被Halder等人证明在空间和时间复杂度方面效率很低。他们提出了一种时间和时间空间复杂度小于Abbasi等人的体系结构。然而,这个架构在像素的冗余存储方面也有缺点,这种架构的精简的实现方法。本文的目的就是克服这些缺点。

目前工作领域的贡献如下:

  • 为了降低卷积过程中的空间复杂度,提出了一种8位结构来检索卷积过程中所涉及像素的地址。

  • 为了降低Sobel边缘检测算法的时间复杂度,通过替换Halder等人提出的体系结构中的一些组件来改进体系结构。

本文的组织如下。第2节简要介绍了Sobel边缘检测算法。第3节提出了传统的Sobel边缘检测算法的改进版本。第4节描述了本文所采用的方法。第5节给出了实验结果和讨论。最后,第6节总结了这项工作。

2.Sobel边沿检测算法

Sobel边缘检测算法是一种基于梯度的边缘检测方法,采用水平掩码(HM)和垂直掩码(VM)进行边缘检测。一个掩模是另一个的转置,如下所示:
\VM=
KaTeX parse error: Expected & or \\ or \cr or \end at position 28: …ix} -1&-2&-1\\\̲ ̲ 0&0&0\\\ 1&2&…
.
KaTeX parse error: Expected & or \\ or \cr or \end at position 31: …rix} -1 &0&1\\\̲ ̲ -2&0&2\\\ -1&…

对于卷积过程,分别使用HM和VM对图像从左到右、从上到下进行扫描。卷积是将图像的每一个强度值与它的局部邻居相乘,用掩模加权的过程。让$ {P}_{3*3}$的成为一幅图像的sub-window,如图2中,分别与HM和VM进行卷积。

由Eqs给出子窗口中心像素(P4)的水平梯度Gx和垂直梯度Gy。(1)和(2)分别。
(1) G x = f 1 − f 2 G_x = f_1- f_2\tag{1} Gx=f1f2(1)

其 中 , f 1 = ( P 6 + 2 × P 7 + P 8 ) , f 2 = ( P 0 + 2 × P 1 + P 2 ) 其中,f_1 = (P_6+2×P_7+P_8),f_2 = (P_0+2×P_1+P_2) f1=(P6+2×P7+P8),f2=(P0+2×P1+P2)

(2) G y = f 3 − f 4 G_y = f_3- f_4\tag{2} Gy=f3f4(2)

其 中 , f 3 = ( P 2 + 2 × P 5 + P 8 ) , f 4 = ( P 0 + 2 × P 3 + P 6 ) 其中,f_3 = (P_2+2×P_5+P_8),f_4 = (P_0+2×P_3+P_6) f3=(P2+2×P5+P8),f4=(P0+2×P3+P6)

子窗口中心像素的合成梯度为:
(3) G = ∣ G x ∣ + ∣ G y ∣ G =|G_x|+|G_y|\tag{3} G=Gx+Gy(3)

通过与预定义的阈值进行比较,进一步利用P4的梯度来确定它是否是边缘像素。如果P4的梯度大于阈值,则将P4视为边缘像素(记为1),否则将P4视为非边缘像素(记为0),如式4所示。
(4) D o p = { 1 i f G > t 0 o t h e r w i s e D_op = \begin{cases} 1 \qquad & if G \gt t \\ 0 \qquad & otherwise \end{cases}\tag{4} Dop={10ifG>totherwise(4)

3.传统Sobel边沿检测算法的简化

传统的Sobel边缘检测算法需要做一些调整,因为在硬件实现上采用了8位架构。Halder等人对传统算法进行了简化,Halder等人提出的算法简化版本做了一些修改。在Eq.(1)中,当子窗口的每个贡献像素都有最大的强度值时,f1和f2的值最大,即255。同样发生在f3,f4 。所以f1,f2,f3,f4 的最大可能值是4×255,因此它需要10位架构实现。为了解决这个问题,f1, f2, f3和f4的值被限制在原来值的四分之一。因此,在计算f1、f2、f3和f4的值之前,每个贡献的像素必须除以4,如Eqs所示。(5)-(8)。

(5) f 1 = 1 4 P 6 + 1 4 P 7 + 1 4 P 8 f_1 = \frac{1}{4}P_6+\frac{1}{4}P_7+\frac{1}{4}P_8\tag{5} f1=41P6+41P7+41P8(5)

(6) f 2 = 1 4 P 0 + 1 4 P 1 + 1 4 P 2 f_2 = \frac{1}{4}P_0+\frac{1}{4}P_1+\frac{1}{4}P_2\tag{6} f2=41P0+41P1+41P2(6)

(7) f 3 = 1 4 P 2 + 1 4 P 5 + 1 4 P 8 f_3 = \frac{1}{4}P_2+\frac{1}{4}P_5+\frac{1}{4}P_8\tag{7} f3=41P2+41P5+41P8(7)

(8) f 4 = 1 4 P 0 + 1 4 P 3 + 1 4 P 6 f_4 = \frac{1}{4}P_0+\frac{1}{4}P_3+\frac{1}{4}P_6\tag{8} f4=41P0+41P3+41P6(8)

由于同样的原因,Gx和Gy必须除以2,G的新方程为:]
(9) G = 1 2 ∣ G x ∣ − 1 2 ∣ G y ∣ G =\frac{1}{2}|G_x|-\frac{1}{2}|G_y|\tag{9} G=21Gx21Gy(9)

公式1~3可以写为:
(10) G x = f 1 − f 2 G_x = f_1- f_2\tag{10} Gx=f1f2(10)

其 中 , f 1 = ( 1 8 P 6 + 1 4 P 7 + 1 8 P 8 ) , f 2 = ( 1 8 P 0 + 1 4 P 1 + 1 8 P 2 ) 其中,f_1 = (\frac{1}{8}P_6+\frac{1}{4}P_7+\frac{1}{8}P_8),f_2 = (\frac{1}{8}P_0+\frac{1}{4}P_1+\frac{1}{8}P_2) f1=(81P6+41P7+81P8),f2=(81P0+41P1+81P2)

(11) G y = f 3 − f 4 G_y = f_3- f_4\tag{11} Gy=f3f4(11)

其 中 , f 3 = ( 1 8 P 2 + 1 4 P 5 + 1 8 P 8 ) , f 4 = ( 1 8 P 0 + 1 4 P 3 + 1 8 P 6 ) 其中,f_3 = (\frac{1}{8}P_2+\frac{1}{4}P_5+\frac{1}{8}P_8),f_4 = (\frac{1}{8}P_0+\frac{1}{4}P_3+\frac{1}{8}P_6) f3=(81P2+41P5+81P8),f4=(81P0+41P3+81P6)

由于Gx和Gy的绝对值是在Eq.(3)中计算出来的,所以需要考虑以下四种情况。

  • Case 1: If both Gx and Gy are positive—— G 1 = f 5 − f 6 G_1 = f_5 - f_6 G1=f5f6
  • Case 2: If Gx is positive and Gy is negative.—— G 2 = f 7 − f 8 G_2 = f_7 - f_8 G2=f7f8
  • Case 3: If Gx is negative and Gy is positive.—— G 3 = f 8 − f 7 G_3 = f_8 - f_7 G3=f8f7
  • Case 4: If Gx and Gy are both negative.—— G 4 = f 6 − f 5 G_4 = f_6 - f_5 G4=f6f5

在特定的时刻,四分之一的情况是正确的,其余的情况是错误的。假设,如果情形1为真,那么f1和f3分别大于或等于f2和f4。因此,在这种情况下,G1是最大的,它被认为是子窗口中心像素(P4)的合成梯度G。这四种情况互不相容。反过来,可以观察到G的值将是4个可能值的最大值,可以用公式(16)表示。
(16) G = m a x ( G 1 , G 2 , G 3 , G 4 ) = m a x ( ∣ f 5 − f 6 ∣ , ∣ f 7 − f 8 ∣ ) = m a x ( f 9 , f 1 0 ) G = max(G_1,G_2,G_3,G_4)=max(|f_5-f_6|,|f_7-f_8|)=max(f_9,f_10)\tag{16} G=max(G1,G2,G3,G4)=max(f5f6,f7f8)=max(f9,f10)(16)

4.方法论

5.实验结果及分析

6.结论

你可能感兴趣的:(FPGA)