齐凤莲, 李 旭
(沈阳建筑大学 机械工程学院, 辽宁 沈阳 110168)
在数字图像处理过程中, 不可避免的会引入一些噪声,尤其是干扰噪声和椒盐噪声,噪声的存在会严重影响到图像处理的结果, 尤其是在边缘检测算法处理的过程中。 中值滤波算法是一种基于排序统计理论的非线性平滑计数算法,它能够有效地平滑噪声,对椒盐噪声有较好的滤除作用,且能够保护图像的边缘信息,所以被广泛的应用于数字图像处理的边缘提取中。
FPGA 即现场可编程门阵列, 它是在PAL、GAL、CPLD 等可编程器件的基础上进一步发展的产物。 它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编辑器件门电路数有限的缺点。
由于数字图像处理过程一般要求有较高的实时性和快速性, 所以用FPGA 来实现中值滤波算法再适合不过。采用流水线结构和并行性的特点, 能最大限度的提升中值滤波算法的运行速度, 满足了当前数字图像处理领域中的越来越高的实时性和快速性的要求。
中值滤波算法的基本原理是把数字图像或数字序列中的一点的值用于该邻域内所有点的中值来代替, 其数学表达式如式(1)所示。
其中f(x,y)是目标图像的像素点,g(x,y)为滤波后图像的像素点,为待处理的图像模板。 在实际应用中,较为常用的实现方法是利用模板3×3、5×5 或其他规格的模板对像素进行处理,本文选取3×3 的模板矩阵,用邻近的像素点组成3×3 的模板, 对模板中所有的像素点对比排出大小, 并且求取中值, 最后把原像素的值用刚刚求取的中值来代替。 如图1 所示是该算法的实现流程。
图1 中值滤波算法模板流程图
(1)对模板窗口内的每行像素按照降序排序,排序后能得到每行其中的最大值、中间值和最小值。
(2)把每行中排序出来的的最小值进行比较,取其中的最大值。
(3)把每行中排序出来的最大值相进行比较,取其中的最小值。
(4)把每行的中间值相比较,再取一次中间值。
(5)把前面得到的三个值再做一次排序,获得的中值即该窗口的中值,比较得出中值后,用其代替滤波模板窗口中间位置的值,即此点处的滤波完成。 滑动模板,对数字图像中的每一个像素点进行以上操作。
对于椒盐噪声来说, 最有效的滤除方法就是中值滤波,而且不会造成信号边缘模糊,这种方法比线性滤波方法更有优势。 中值滤波的算法容易理解, 易于用硬件实现,应用简单,所以在实际种应用较多,其既能保留图像边缘的效果,又能有效的抑制噪声的影响。但是由于中值滤波影响了图像的基本信息, 所以对于高斯白噪声的抑制效果并不理想,其更适合减小椒盐噪声。中值滤波算法在Matlab 平台下实现的的效果图如图2 所示。
中值滤波算法在FPGA 上的实现过程主要分为三个部分:滤波器窗口的生成模块、行列计数器模块和滤波算法模块。 滤波器窗口生成模块主要是将存储在内存中的数字图像像素数据按行取出, 并且生成实现算法所需的3×3 窗口。 行列计数器模块主要用于计算整幅图像的行列值,可以控制滤波算法何时开始且何时停止。滤波算法模块主要对每个像素点进行中值滤波算法处理。
图像的预处理算法大多数都是针对邻域内的像素点操作的, 本文以3×3 的窗口为模板, 利用3 个位宽为24bit 的FIFO 和9 个寄存器操作, 对数据的行列进行存储和计算,设计的滤波窗口生成流程如图3 所示。
图3 滤波窗口生成力流程图
每个FIFO 的深度为图像每行的行数, 即一个FIFO单元存储一个像素数据,9 个寄存器分别存储FIFO 中读出的像素数据,生成滤波窗口,等待计算最终滤波值。
对二维图像进行邻域操作时,随着窗口的滑动,中心像素将运动到图像的边缘,但是边缘点不存在邻域,故此时滤波窗口输出的邻域数据是无效的,没有实际意义。这个时候就需要行列计数器计算出什么时刻的数据是没有意义的,将没有意义的数据进行特殊处理,其处理办法是将其滤波模板窗口缺失的数据补齐, 其值由该行最后一个有效数据决定。这样虽然牺牲了一部分精度,但是很好的保存了图像边界的信息。
对于3×3 窗口的中值滤波, 采用图1 所示的图解输出中值,输入数据为图3 所示的生成窗口的数据。第一季比较电路由三个三输入比较器组成, 每个比较器的输出数据依序排列。 将三组比较结果中最小的三个数放在一起,中间的三个数放在一起,最大的三个数放在一起,参与第二次比较。第二级比较电路的原理与第一级类似,输出输入数据的最大值最小值,将其舍去。第三次比较的方法类似于前两次,以此类推,最终将得到最终要计算的数据中值,即中值算法完成。
本文设计的图像滤波模块采用了Xilinx 公司的xc7a100t 作为主控芯片, 该系列芯片具有速度高、 资源足、应用成熟等特点,同时具备多个DSP 模块和PLL 模块,完全满足本文设计要求。
图4 是中值滤波算法的Matlab 仿真图, 从波形可以看出,经过时钟上升沿的稳定采样后,在数据到来的低六个时钟周期输出了最终的中值结果。 这种流水线操作和并行的计算方法,极大的提高了算法的处理速度,非常时候实时性要求高的图像处理领域。
图4 中值滤波算法仿真图
将事先准备好的添加了椒盐噪声的图片分别用Matlab 和本文实现的中值滤波算法进行处理,处理后的结果如图5 所示。不难看出, 中值滤波算法对椒盐噪声具有良好的滤除作用特别是在滤除噪声的同时, 能够保护图像信号的边缘,使之不被模糊。通过实验对比, 本文实现的中值滤波算法要比Matlab 实现的中值滤波算法效果更佳明显, 对加盐噪声的抑制和滤除作用要优于Matlab 处理后的结果。
图5 算法处理结果对比图
数字图像处理包括很多种算法,例如噪声处理、边缘检测和运动木匾检测与识别等。而为了有效的去除噪声,应根据噪声的不同种类来选择不同的去噪算法。 本文提出的基于FPGA 实现的中值滤波算法适用于被椒盐噪声污染的图像的滤波。 本文首先分析了中值滤波算法的原理与实现过程, 接着将软件算法转换为适合于FPGA 实现的方法来实行, 然后对设计好的FPGA 程序进行软件仿真,验证了其正确性,最后通过实验验证与结果对比,证实了本文所实现算法的可行性。 本文所提出的方法可以应用于其他的图像算法如边缘检测等, 在高处理速度和高实时性的前提下,具有很高的应用价值。