FPGA教学——基于Verilog的“自适应”形态学滤波算法实现
2022-08-17
来源:FPGA之家
一、背景介绍
基于二值图像的滤波算法即形态学滤波,在图像目标采集的预处理中经常被使用到,针对不同的使用场景涉及到腐蚀、膨胀、开闭运算等处理。实际使用中对于不同的分辨率大小以及模板窗口大小,都要进行代码的修改去适应不同的场景,特别是模板窗口比较大时,代码改写工作量就很大。因此,为了减少开发时间,本文实现了一个通用的算法IP,只需要修改模板窗口大小和工作模式(腐蚀or膨胀)参数即可,达到“自适应”目的,避免重复低效的工作。
二、形态学滤波原理
形态学滤波由腐蚀和膨胀两种操作组成。首先,腐蚀(Erosion)的核心思想是图像像素之间进行逻辑与运算,简单来说,当一个包含当前像素的结构单元的像素值都为“1”时输出待处理的的目标像素。
若采用窗口实现腐蚀操作,如图2.1所示:
图2.1腐蚀效果示意图
腐蚀的作用:在形态学中的腐蚀可以去除图像中的物体边界点,清除图像中比结构元素小的毛刺或者小突起,此外,结构元素越大,腐蚀的面积就越大。所以,可以使用腐蚀运算操作小区域的非目标区域区分。
膨胀的核心思想是像素之间进行逻辑或运算,也就是说每个输入像素在输出图像中被替换成结构单元的形状。当结构单元中任何一个像素的灰度值为“1”时,那么输出窗口内的像素都为“1”,此时输出待处理的目标像素。公式可以表示为:
若采用窗口实现膨胀操作,如图2.2所示:
图2.2 膨胀效果示意图
膨胀的作用:膨胀运算可以填充图像中小于结构元素的孔洞以及图像边缘部分的一些小凹陷。对于目标区域腐蚀后再膨胀操作就是所谓的开运算。对所选定的目标区域先进行膨胀操作然后再进行腐蚀操作就是所谓的闭运算。
三、FPGA硬件实现
形态学滤波算法的FPGA硬件实现原理图,如下图所示。算法的输入输出接口信号采用标准的 VGA时序接口,即行场信号、数据和数据使能信号。算法模板输入参数主要有两个,Win_SIZE 表示窗口大小,WORK_MODE 表示工作在腐蚀还是膨胀模式,根据需要配置自己想要的模板大小和工作模式。
由于行缓存是基于RAM的实现的,本文设计的ram的规格大小是为2048x15,
深度2048 表示支持的最大分辨率,数据位宽为15bit表示支持的最大的模板窗口大小为15x15,也可以根据需要修改ram规格,其他逻辑不需要改动。
最后,需要开运算或者闭运算时,只需要把两个算法IP串联起来,配置不同的参数即可。
四、仿真验证
本节主要搭建一个视频流Modelsim仿真平台,在基于FPGA视频图像算法开发过程中,有必要模拟一个视频时序,用来验证算法,并有效的利用Matlab工具把静态图片“打散”保存到txt文本里,供Modesim读取,然后通过Matalb“复现”处理后的文本。
3x3腐蚀仿真结果:
9x9腐蚀仿真结果:
5x5膨胀仿真结果:
15x15膨胀仿真结果:
更多信息可以来这里获取==>>电子技术应用-AET<<