基于FPGA的图像边缘检测
扫描二维码
随时随地手机看文章
引言
图像边缘检测是图像处理的一项基本技术,在工业、医学、航天和军事等领域有着广泛的应用。图像处理的速度一直是一个难题。虽然DSP具备指令流水线特性和很高的处理速度,但其速度仍然很受限制,而利用高速可编程逻辑器件FPGA/CPLD来设计图像边缘检测器可以很好的克服这个问题,是一种全新的解决方案。
1 图像边缘检测算法
用于图像边缘检测的算法很多,诸如Rorberts算子、Sobel算子、Prewitt算子、Laplaceian算子等,由于Sobel算法只涉及到加法操作,并且可以取得很好的效果,所以是最常用的边缘检测算法。由于图像在边缘附近会出现灰度上的突变,所以,Sobel边缘检测方法以原始图像灰度为基础,并通过考察图像每个像素在某个领域内灰度的变化,然后利用边缘邻近的一阶导数最大值来检测边缘,再设置权重来检测水平、垂直、左对角、右对角等各个不同方向上密度幅度的不同来实现边沿检测。图1所示是一个3×3像素的举例,其水平、垂直、左对角和右对角图像上密度幅度的变化可以表示为:
H=(Q0+Q3+Q3+Q6)-(Q2+Q5+Q5+Q8)
V=(Q0+Q1+Q1+Q2)-(Q6+Q7+Q7+Q8)
DR=(Q1+Q0+Q0+Q3)-(Q5+Q8+Q8+Q7)
DL=(Q1+Q2+Q2+Q5)-(Q3+Q6+Q6+Q7)
其中,H、V、DL、DR用于计算梯度的大小和方向,而梯度的大小可由正式给出一个普遍的估计值:
Magnitude=Max(H,V,DR,DL)
这样,通过对图像灰度作直方图分析,便可以给出区分度阀值,如果Magnitude大于这个阀值,则该像素为边界像素,否则为一般像素。
2 系统设计
该边缘检测器以ALTERA公司的FLEX10K20芯片为核心器件。由图像传感器获取的图像经前端处理器处理即可得到3×3像素图形数据,然后送入各个滤波器进行滤波,最后将有关结果送输出处理模块处理后输出,其流程图如图2所示。
边缘检测的关键是求出四个方向的图像梯度数据绝对值的最大值,同时判别最大值出现的方向,其内部结构如图3所示,边缘检测的核心部分包括滤波器FILTER、比较器COMPARE、边界判断器JUDGE和寄存器等。
[!--empirenews.page--]
2.1 滤波器的设计
滤波器(FILTER)的设计可采用两级并行流水线方案,其内部结构如图4所示。图中的QA、QB、QC、QD、QE、QF对应接上Q0、Q3、Q6、Q2、Q5、Q8表示水平方向滤波,其输出则为H_FILTER。垂直方向滤波器、左对角滤波器和右对角滤波与水平方向滤波器类似。为了提高加法运算的速度,加法器的设计可选用超前进位加法器。
2.2 比较器的设计
比较器模块的功能是比较两个输入值以得到其最大值。其VHDL源程序如下:
[!--empirenews.page--]
2.3 边界判断器的设计
边界判断器JUDGE的功能是根据区分度阀值、四个滤波器的输出及其最大值进行边界的判断。其VHDL源程序如下:
3 仿真分析
本设计的系统时序仿真波形如图5所示。事实上,对于图像边缘检测中的sobel算法来说,若使用FPGA来设计,则H、V、DR、DL四个方向的滤波可以全部并行。另外,由于每个方向的滤波器设计时均采用一级四路并行加法器与一级双路并行加法器相串联,因此,算上两级串行比较器。实际上,整个过程只有四级串行结构。
4 结束语
对于本文所设计的系统,假设使用40 MHz的系统时钟,则处理一个像素点的时间约100 ns,也就是说,处理一张800×600的图像所用的时间不到50 ms。由此可见,该设计可大大提高图像边沿检测的处理速度。