基于FPGA的图像实时处理系统设计(2)
基于FPGA的图像实时处理系统设计(2)2.2.3中值滤波算子模块
中值滤波的原理是把图像中某一点的像素值用该点的一个邻域中各点像素值的中值代替,让该点像素值更加接近真实值,从而消除孤立的噪声点的滤波方法。在本系统中,选用3×3中值滤波模块,其具体算法为将图像某一点及其周围8个点的像素按照大小排列顺序,取9个像素值的中间值作为当前点的像素值,依次滤除整帧图像的杂散信号。
通过FPGA实现9个数大小的排序,为了节省处理时间和芯片片上资源,利用快速中值滤波算法,结合流水线结构,分级排序来选取图像像素的中间值。排序步骤如下:首先对3×3阵列进行列排序,然后行排序,最后副对角线排序,得到滤波中值。下图4为快速中值滤波示意图,图中的C代表三输入排序器,所用比较器为assign结构,可以节约大量比较所用时间,提高系统的实时性。
图4快速中值滤波算法示意图
2.3阈值分割
由于实时图像系统的刷新频率较快(BT656格式每秒刷新25帧图像),每帧图像之间像素灰度均值差别很小,因此,我们可以利用上一帧图像的统计值来计算阈值,为下一帧图像二值化提供阈值,以适应测试环境变化所引起的阈值变化,阈值统计采用直方图的方式。
利用FPGA的IP核生成一个256×9位的DPRAM,用以作为直方图的计数器。以该DPRAM的地址作为图像的像素值,而以DPRAM的内部存储值,作为该帧图像中该像素值的个数,每读出一位相应的像素,对应地址的内部寄存器加1,以此完成整帧图像的像素统计。
整帧图像像素统计完成以后,按照地址从小到大的顺序,依此累加DPRAM中的值,当累加和不小于整帧图像像素数的0.7时,该DPRAM地址,即为直方图法得到的阈值,然后利用该阈值,为下一帧图像做阈值分割。
2.4边缘检测
边缘检测在图像处理中占有很重要的地位,好的边缘检测,可以提高图像的定位精度,减少图像后续处理中的数据量。综合考虑各种滤波算法的优缺点,由于Sobel算法对噪声容抗较大,并且较易在FPGA上实现,因此,选取Sobel算法作为该系统的边缘检测算法。
边缘检测模块类似于滤波模块,同样也包括3个主要部分:乒乓结构存储模块、3×3阵列生成模块和Sobel边缘检测算子模块。前两个部分不再赘述,本文主要介绍Sobel算子模块。
该算子包含两组3×3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。
利用FPGA在硬件并行结构和流水线结构的特点,我们将整个Sobel算子分为4级,第一、二级分别将首、末行和首、末列按照算子模板参数相加并输出结果,第三级将上级所得到的行列结果分别相减,第四级比较上级所得两个值的绝对值,取绝对值较小的值作为Sobel检测结果。如此,每个时钟周期每级都执行各自相应的加减法运算,并在下个时钟上升沿将所得数据级级传递,即可完成3×3阵列的Sobel算法,该模块的流水线结构如图5所示。这样,在每个时钟周期,都会输出1个Sobel检测值,即处理每一行图像数据,仅需要n+4个时钟周期的时间,处理整帧图像所需最少时间为(n+4)×m×T,其中n为每行像素点个数,m为行数,T为时钟周期。
图5 Sobel算法的流水线结构
3实验结果分析
根据系统硬件结构搭建的实验平台,连接各模块接口,编译并下载程序,运行系统。在实验室环境下采集图像,并进行滤波和边缘检测等处理,在CCS3.3的view/graph菜单下观测处理图像效果图,实验结果与原图对比如图6所示。由于实验室光线环境较为稳定,图像噪声较少,滤波效果不明显,但是通过图6(c)可以明显看到图像边缘检测效果较好,可以满足图像预处理要求。
针对系统图像预处理速度的评估,我们以Sobel边缘检测算法作为参考。首先利用CCS3.3的计时函数,运行得到DSP对一帧720×576像素的图像边缘提取所用时间为254.83ms,然后通过上文所列公式计算FPGA图像边缘提取所用最少时间为15.445ms.通过两种处理方式所用时间的比较,可以明显得出FPGA在图像预处理时的速度优势,完全可以满足图像实时处理的要求,具有很强的实用性。
图6图像处理结果
基于FPGA的图像实时处理系统设计(2) ~~~~~~~~~~~~~~~~ 基于FPGA的图像实时处理系统设计(2) 基于FPGA的图像实时处理系统设计(2) 基于FPGA的图像实时处理系统设计(2)
页:
[1]