均值滤波FPGA的实现方法
线性滤波实现简单,十分适合用FPGA来实现。一般情况下,FPGA在前端捕获到视频数据之后首先需对图像数据做一个简单的预处理,然后根据噪声的来源,针对椒盐噪声进行中值滤波处理,针对高斯噪声进行高斯滤波处理,均值滤波在预处理中也十分常见。同时,边缘提取及梯度计算也是许多复杂处理算法的基础。
再把均值滤波的数学表达式列出如下:
由上述公式列出求图像均值的步骤:
- 获得当前窗口所有像素。
- 计算当前窗口所有像素之和。
- 将第(2)步结果除以当前窗口数据总数。
滑动窗口到下一个窗口,直到遍历完整幅图像。
滤波采用滑动窗口方法来实现整幅图像的遍历,因此,采用流水线结构来设计是再也合适不过的了。对于流水线结构来说,每个像素的运算方法是一致的,所需考虑的只是边界像素的处理问题。
一般情况下,任何二维的计算步骤都可以化为一维的操作。由于行方向的数据流是连续的,因此在流水线操作中,常常会首先进行行方向的操作。
假定现在已经完成了第一行的求和操作,接下来需要“等”下一行的求和完成。如何进行等待?在FPGA中,等待的实现方法就是进行缓存。
接下来的问题是,如何进行一维向量求和操作?对于1×5的向量求和而言,当前数据需要“等到”下4个数据到来之后才能得到连续5个数据,并执行加法操作。可以预期的是,还是需要把前几个数据单独缓存起来,一个指定位宽的寄存器即可满足要求。同步5个连续的输入数据并完成求和的流图如图4-8所示。