【FPGA/图像处理】局部滤波器-二值形态学滤波

少女dtysky

世界Skill

时刻2015.05.25

图像处理理系列文章基本都是我本科毕设论文同步发布,这个项目以LGPL许可被发布在F-I-L。形态学滤波器是很常用的一种局部滤波器,顾名思义,它针对图像的形态进行操作,关注的是“形状”。形态学滤波一般分为腐蚀和膨胀,而在其之上又可以叠加为开运算和闭运算,它对二值图像、灰度图像均有效,但二者实现的方式不同,一般最常用的是二值形态学滤波,针对灰度的本质上是极大值和极小值排序滤波器,暂时不再赘述。形态学滤波常用于图像细化、骨架提取等[21,22,23,24],可以作为图像识别的一种基本的预处理操作。本节将会说明FPGA的形态学滤波模块实现。
这个IP核的资源在这里:
ErosionDilationBin


3 算法实现

明确了设计和架构,便可以进行算法的实现。本章将会说明如何实现图像处理的算法,以及如何运用它们。

3.13 局部滤波器-二值形态学滤波

形态学滤波器是很常用的一种局部滤波器,顾名思义,它针对图像的形态进行操作,关注的是“形状”。形态学滤波一般分为腐蚀和膨胀,而在其之上又可以叠加为开运算和闭运算,它对二值图像、灰度图像均有效,但二者实现的方式不同,一般最常用的是二值形态学滤波,针对灰度的本质上是极大值和极小值排序滤波器,暂时不再赘述。形态学滤波常用于图像细化、骨架提取等[21,22,23,24],可以作为图像识别的一种基本的预处理操作。本节将会说明FPGA的形态学滤波模块实现。

3.13.1 原理

二值形态学滤波的操作单元与其他局部滤波器一致,都是包含了某一个中心像素点及其邻域的窗口,但比起其他操作,它还有一个作为参照的“模板”,并根据模板和窗口的运算来得到输出。所有的二值图像都可以分为主体像素和背景像素,一般以1为主体像素,0为背景像素,这样最基本的基本的二值形态学操作-腐蚀和膨胀便可以定义为式3-13-1和3-13-2,其中I为输入,T为模板,可见腐蚀是一种收缩的变换,它将窗口与模版进行对比,如果模板中每一个主体像素都落在窗口内,则此时窗口的中心像素置1,否则为0;而膨胀则是一个扩张的变换,只要模板中的任一主体像素落在窗口内,则中心像素置1。腐蚀和膨胀的原理示意如图3-13-1,空心的点表示0,否则表示1。

Q=i,jTI[x+i,y+j]        (3131)Q=\bigwedge_{i,j \in T}I[x + i, y + j]\ \ \ \ \ \ \ \ (3-13-1)

Q=i,jTI[xi,yj]        (3132)Q=\bigvee_{i,j \in T}I[x - i, y - j]\ \ \ \ \ \ \ \ (3-13-2)

图3-13-1 腐蚀膨胀原理
图3-13-1 腐蚀膨胀原理

腐蚀和膨胀还可以结合成开运算(先腐蚀后膨胀)和闭运算(先膨胀再腐蚀),这可以利用两个基本操作的级联来完成。
在FPGA中,腐蚀膨胀可以由基本的逻辑运算来完成,并且可以用同一种结构完成[3],如图3-13-2所示,深色的方块代表窗口,浅色的代表模板,mode用于控制腐蚀和膨胀的模式,0为腐蚀,1为膨胀,Q为输出。如此,服饰和膨胀的逻辑运算形式便可以表示为式3-13-3,Q为输出,I为输入,T为模板,size为窗口宽度。可知,每一个像素点需要进行一次异或运算、一次非运算和一次或运算,之后所有的像素总共要进行NxN次的与运算,考虑FMax,所以选择和3.10一样的分级运算来完成。

Q=modei,j=0sizeI[i,j]modeT[i,j]        (3133)Q=mode \oplus \bigwedge_{i,j = 0}^{size}I[i,j]\oplus{mode}\vee{\overline{T[i,j]}}\ \ \ \ \ \ \ \ (3-13-3)

图3-13-2 腐蚀膨胀逻辑结构
图3-13-2 腐蚀膨胀逻辑结构

3.13.2 设计

根据原理可知,ErosionDilationBin核(以下简称EDB核)还需要一个用于确定与运算级数的配置参数,以及在腐蚀模式和膨胀模式之间选择的端口,还有一个用于输入模板的端口,故一个EDB核需要的配置参数和端口如表3-13-1与表3-13-2。

名字 类型 范围 默认值 说明
work_mode 无符号 0为流水线模式,1为请求响应模式 0 工作模式
window_width 无符号 2 - 15 1 窗口宽度和高度。
pipe_stage 无符号 取决于窗口的宽度,为log2(window_width^2) 3 流水线级数。
表3-13-1 配置参数


名字 端口 类型 范围 默认值 说明
clk 输入 无符号 Clock.
rst_n 输入 无符号 复位,低有效。
mode 输入 无符号 0为腐蚀,1为膨胀。 操作模式。
template 输入 无符号 window_width * window_width - 1 : 0 用于操作的模板。
in_enable 输入 无符号 输入数据使能,在流水线模式下,它是另一个复位信号,在请求响应模式下,只有在它有效的时候in_data才会被真正地改变。
in_data 输入 无符号 color_width * in_window_width * in_window_width - 1 : 0 输入数据,必须和in_enable同步输入。
out_ready output 无符号 输出数据有效,在两种模式下,这个信号都会在out_data可以被读取的时候有效。
out_data output 无符号 color_width - 1 : 0 输出数据,将会和out_ready同步输出。
表3-13-2 端口

3.13.3 实现

根据3.13.2的设计便可以实现一个EDB核,流水线模式和请求响应模式实现如下。

3.13.3.1 流水线模式

输入使能后pipe_stage个周期第一个结果被输出,开始流水化工作,波形如图3-13-3。

图3-13-3 流水线模式时序
图3-13-3 流水线模式时序

3.13.3.2 请求响应模式

基本与3.13.3.1一致,但只有in_enable的上升沿时才会有窗口被输入,波形如图3-13-4。

图3-13-4 请求响应模式时序
图3-13-4 请求响应模式时序

3.13.3.3 IP核GUI

完成功能后对EDB核进行了封装,封装如图3-13-5。

图3-13-5 EDB核的GUI
图3-13-5 EDB核的GUI

3.13.4 仿真

EDB核只对二值图像有意义,我选取了两张二值图像作为仿真源,分别测试了对腐蚀和膨胀操作配置了两套模版,原始图像如图3-13-6。

图3-13-6 原始测试图像
图3-13-6 原始测试图像

使用HDL功能仿真和软件仿真的结果进行PSNR的计算,仿真结果如图3-13-7所示。

图3-13-7 仿真结果
图3-13-7 仿真结果,从左上依次为流水线模式下的HDL功能仿真结果,请求响应模式下的HDL功能仿真结果,软件仿真结果

仿真结果的清晰图像如图3-13-8,可见膨胀的确有扩张的功能,腐蚀的确有收缩细化的功能。同时也对开运算和闭运算做了实验,结果如图3-13-9所示,开运算可以将一些原本断续的线条“打开”,使图像零散化,而闭运算则是将线条闭合,使图像连续化。

图3-13-8 部分仿真结果
图3-13-8 部分仿真结果,左侧为膨胀,右侧为腐蚀

图3-13-9 开闭运算结果
图3-13-9 开闭运算结果,左侧为开运算,右侧为闭运算

3.13.5 资源和时序

最终实现与窗口大小关系很大,此处只对窗口为3x3的状况分析,根据Vivado生成的报表,主要资源耗费如表3-13-3。

Slice LUTs* Slice Registers
12 9
表3-13-3 主要资源耗费

同时根据时序报告,最大的Data Path Delay(数据路径延迟)为2.529ns,即:

FMax = 395.41MHz

即说明,EDB核在流水线模式下,理论上在处理1080p全高清图像时可以达到190帧。
由于数据路径延迟和应用的最终约束设置强相关,所以仅供参考。

3.13.6 分析与结论

PSNR如表3-13-5。

1-Dilation-110110000 1-Dilation-111111000 1-Erosion-110110000 1-Erosion-111111000 2-Dilation-110110000 2-Dilation-111111000 2-Erosion-110110000 2-Erosion-111111000 Total
1000000.00 1000000.00 1000000.00 1000000.00 1000000.00 1000000.00 1000000.00 1000000.00 1000000.00
表3-13-5 PSNR

PSNR均值为最大值,EDB核与软件等效,同时可以达到不错的FMax,设计成功。


参考文献

[3] Donald G.Bailey.基于FPGA的嵌入式图像处理系统设计[M].原魁,何文浩,肖晗译.北京:电子工业出版社,2013.
[21] 施启乐,王从军,黄树槐等.数学形态学图像细化算法在RE中的应用研究[J].华中科技大学学报(自然科学版),2004,32(7):37-39.DOI:10.3321/j.issn:1671-4512.2004.07.013.
[22] 王怀群.二值图象的细化[J].无锡轻工大学学报,2001,20(3):315-318.DOI:10.3321/j.issn:1673-1689.2001.03.021.
[23] 李娜. 基于FPGA的图像实时检测系统识别系统设计[D].长春理工大学,2013.
[24] 曹玉龙. 线划图像的细化算法研究[D].长安大学,2011.


感谢

仿真图像来源:
LM7-アイカツ
ぜろきち-Blue star

如果不是自己的创作,少女是会标识出来的,所以要告诉别人是少女写的哦。