1.SOBEL图像边缘检测器的设计
边缘可定义为图像中灰度发生急剧变化的区域边界,它是图像最基本的特征。边缘检测主要就是(图像的)灰度变化的度量、检测和定位,它是图像分析和模式识别的主要特征提取手段,它在计算机视觉、图像分析等应用中起着重要的作用,是图像分析与处理中研究的热点问题。在过去的20年里产生了许多边缘检测器,而Sobel算法只涉及加法操作,但却可以得到很好的划分效果,因而是图像处理系统中最常用的边缘检测算法。
Sobel算法包括带4个3×3掩码的输入图像数据,即Sobel算子,它设置权重来检测水平、垂直、左对角、右对角各个不同方向上密度幅度的不同。这个过程通常被称为过滤。我们来看像素窗口(3×3),如图2所示。水平、垂直、左对角、右对角各图像方向上密度幅度的变化可以用如下算子进行计算:
Q0 |
Q3 |
Q6 |
Q1 |
[i,j] |
Q7 |
Q2 |
Q5 |
Q8 |
H=(Q0+2Q3+Q6)-(Q2+2Q5+Q8);V=(Q0+2Q1+Q2)-(Q6+2Q7+Q8);
DR=(Q1+2Q0+Q3)-(Q5+2Q8+Q7);DL=(Q1+2Q2+Q5)-(Q3+2Q6+Q7);
H,V,DL,DR这四个参数用于计算梯度大小和方向。
对梯度大小的一个普遍估计值为:Magnitude=Max(H,V,DR,DL)。
我们通过对图像灰度作直方图分析后,便可以给出区分度阀值
Threshold,区分度阀值往往要借助一定的经验并需要反复调整。如果Magnitude大于Threshold,则该像素被声明为边界像素,否则为一般像素。
本课题就是要求使用LPM兆功能块设计和VHDL程序设计相结合的方式或全部采用VHDL程序设计方式,用FPGA/CPLD实现Sobel算法。
2 . 算法实现
Sobel的滤波函数为:
H=(Q0+2Q3+Q6)-(Q2+2Q5+Q8);
V=(Q0+2Q1+Q2)-(Q6+2Q7+Q8);
DR=(Q1+2Q0+Q3)-(Q5+2Q8+Q7);
DL=(Q1+2Q2+Q5)-(Q3+2Q6+Q7);
Magnitude=Max(H,V,DR,DL)
为了减少设计的复杂度,可将Sobel的滤波函数中的乘法运算可以改写成加法运算:
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);
对于以上数据的处理,我们先估算一下分别使用单片机、DSP、CPLD/FPGA所需的时间。
(1)如果使用12M的单片机:完成一次Sobel滤波操作需要的时间至少为:(24×2+20+2×3+2)×1us=72us。对于一幅600×800像素的图像,总共的时间为:600×800×72us=32s。
(2)若使用40M六级流水的DSP,他们的处理时间大概为 32s/24=1.4s。
(3)如果使用CPLD/FPGA进行自行设计,通过采用并行流水线技术假设使用50M的系统时钟,处理完一个像素点的时间为 4×1/(50M)=80ns,处理完一帧图像的时间为 800×600×80ns=38.4ms,结果处理速度比DSP高了大约两个数量级。
从上可以看出,使用CPLD/FPGA进行自行设计有关图像处理模块,对整个系统速度的改善是很非常明显的。
3 . 总体设计方案
整个系统的实现可划分为四个大的模块,总体结构如图3所示,其中:
帧窗口接收模块(FIFO):负责接收DSP传送过来的一个帧窗口的数据,其本质为一个双端口先入先出栈FIFO,其数据宽度为8,深度等于一个帧窗口内的像素点个数(600×3=1800)。
串入并出模块(SIPO):负责把FIFO内的数据转换成为像素处理窗口的列像素向量,便于像素处理窗口的数据刷新处理。
像素窗口刷新模块(REFRESH):实现对需要处理的像素数据的刷新。
数据处理模块(PROCESSOR):它是本图形边缘处理器的核心部分,主要是实现Sobel算法,其性能的好坏对整个设计的成败有着关键的作用。本模块拟采用全硬件并行算法实现,因只有五级串行结构,所以相当于在5个时钟周期内就能完成一个像素点的边界判别。
图3.图像边缘检测器总体结构图
3.1主要模块的设计思想
- 帧窗口接收模块FIFO
由于高速设备与慢速设备之间处理速度的差别,本系统数据传输选择了帧同步方式。存储器的类型拟选用FIFO,堆栈空时向主机发出准备好信号,主机检测到它的数据传输请求时,传送一帧数据,由于FIFO的大小与一帧图像的大小是一致的,所以接收完毕后,堆栈满,Sobel处理器启动边缘检测进程,处理完一帧数据后,堆栈重新变为空,为下一帧数据处理作准备。
2.串入并出模块SIPO
串入并出模块的主要功能是负责一列像素的刷新,也就是把主处理器传送过来的像素值转换成3×3像素窗口的一列。该模块的实现主要是通过六个D触发器和一个三进制的计数器组成,当计数器产生进位溢出时,串行输入的三个像素点并行输出。
3.像素窗口刷新模块REFRESH
像素刷新窗口的主要功能是接收串入并出模块的3个并行像素,把窗口中原有的第二列像素推入第三列,第一列推入第二列,新到的并行像素填入第一列。其本质为一个移位寄存器。