基于基于FPGA的的Sobel边缘检测应用边缘检测应用
针对目前数字图像处理速度慢的问题, 提出了一种基于 FPGA器件的 Sobel 边缘检测实现方案。Sobel 边缘检测
分别在FPGA和MATLAB上仿真实现,仿真结果表明,该方案可以大幅提高Sobel 边缘检测的速度,并且获得了
很好的边缘检测效果。最后列举了一个基于FPGA器件的Sobel边缘检测的应用实例。
1 Sobel边缘检测算法边缘检测算法
Sobel算法是一种较成熟的微分边缘检测算法,它计算简单,且能产生较好的检测效果, 对噪声具有平滑作用, 可以提供较为
精确的边缘方向信息[2]。
Sobel 边缘检测算子使用两个方向算子(垂直算子和水平算子),如图1所示。其原理是分别用这两个算子对图像进行卷积运
算,得到两个矩阵,再求这两个矩阵对应位置的两个数的均方根,得到一个新的矩阵,即为灰度图像矩阵中各个像素点的梯度
值。最后将梯度值与门限T进行比较,当梯度值≥T时,规定该点的灰度值为255,反之为0。
根据Sobel算子边缘检测的原理可得出如图2所示的Sobel边缘检测算法框图。对一幅图像进行Sobel边缘检测时,首先要利
用Sobel算子计算出水平梯度和垂直梯度,这涉及到卷积运算。然后再把两个方向的梯度结合起来,这就涉及到均方根运算,
最后进行门限处理来判断图像边缘并输出边缘检测结果,这部分可通过编写Verilog HDL代码实现[3]。
2 Sobel 边缘检测的硬件实现边缘检测的硬件实现
Sobel边缘检测的硬件实现系统应包含梯度计算模块和门限处理模块,其中梯度计算模块可分为图像行缓冲模块和卷积计算
模块。此外,各个模块功能的实现可通过调用 Quartus II软件提供的各种宏功能模块(Megafunctions)来实现,如图3所示。
2.1 图像行缓冲模块器图像行缓冲模块器
梯度计算模块主要完成两个Sobel算子分别与图像像素矩阵(3×3窗口)的卷积运算。首先要构造3×3图像像素矩
阵,要完成这个功能,必须引入一个容量足够大的存储单元来缓冲串行输入的图像数据流, 并把串行图像数据转化为并行的3
行图像数据,这样在3个像素时钟后就可以得到3×3图像像素矩阵。以往常使用先入先出栈(FIFO)作为图像数据的缓冲器
[4],但对 FIFO的读写操作较为复杂。本文通过调用Quartus II软件提供的基于RAM移位寄存器宏模块altshift_taps也能实现同
样功能。
altshift_taps宏模块是一个可配置的、具有抽头(Taps)输出的移位寄存器,每个抽头在移位寄存器链的指定位置输出数据。
对MATLAB常用的256×256图像进行Sobel边缘检测,altshift_taps模块参数设置为8 bit输入/8 bit输出、3抽头,相邻两
个抽头相距256个寄存器,如图4所示。其中相邻两个抽头的距离是根据图像的大小来设置的,例如在硬件下载仿真
上,TRDB-LTM液晶屏能正常显示的图像大小是800×480,此时抽头距离应设置为800。
2.2 卷积计算模块卷积计算模块
卷积计算模块是为了得到水平、垂直两个方向的梯度值,要实现卷积运算需要做大量的乘法和加法运算。如果采用以往分
评论5
最新资源