【FPGA/图像处理】点操作——阈值化

少女dtysky

世界Skill

时刻2015.05.16

图像处理系列文章基本都是我本科毕设论文同步发布,这个项目以LGPL许可被发布在F-I-L。阈值化是另一个基本操作,和灰度化一样,它简单地将图像像素分为两类,主要目的是简化后续的计算成本,以及节省存储空间,不过更为彻底。阈值化有二值阈值化,也有多值阈值化,但运用最多的还是二值阈值化,即“二值化”,经过二值化处理后的图像只有两个值——黑色和白色,这样便可以用最小的代价来表示整幅图像的形态特征。阈值化往往被用作某些操作的预处理,比如某些形态学操作(腐蚀,膨胀)就是基于二值图像的。阈值化的阈值可以有许多种来源,由此可以区分为自动阈值化、局部阈值化等等,但本节只讨论最基本的全局阈值化算法。
这个IP核的资源在这里:
Threshold


3 算法实现

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

3.4 点操作——阈值化

阈值化是另一个基本操作,和灰度化一样,它简单地将图像像素分为两类,主要目的是简化后续的计算成本,以及节省存储空间,不过更为彻底。阈值化有二值阈值化,也有多值阈值化,但运用最多的还是二值阈值化,即“二值化”,经过二值化处理后的图像只有两个值——黑色和白色,这样便可以用最小的代价来表示整幅图像的形态特征。阈值化往往被用作某些操作的预处理,比如某些形态学操作(腐蚀,膨胀)就是基于二值图像的。阈值化的阈值可以有许多种来源,可以为线性的,也可以为非线性的,由此可以区分为自动阈值化、局部阈值化等等,但本节只讨论最基本的全局阈值化算法。

3.4.1 原理

所有的全局阈值化算法都有一个共同的特点,即整张图像都使用同一个阈值,这样做的基本策略是将图像中的每一个像素都与一个固定的阈值进行比较,然后根据比较的结果确定输出。一般的全局阈值化算法原理如式3-4-1,当某个像素的值I大于确定的阈值th时,输出结果Q为1,否则为0。

Q={0I<=th1I>th .        (341)Q=\begin{cases} 0 && I <= th \\1 & & I > th \ \end{cases}.\ \ \ \ \ \ \ \ (3-4-1)

这样做有一个明显的缺点,就是会造成一些“误分类”,即将一些像素分类到我们所不期望的一侧去,这可以通过调整阈值来确定,但这并不总是有效的。由此,便产生了像是了局部阈值化这样的算法来解决这个问题,但这类算法往往要求比较复杂的前置过程,除了这类算法之外,在一些状况下还有一种简单的算法——等高线阈值化[3]
等高线阈值化的原理如式3-4-2,它要求两个阈值th1和th2,处于二者之间的像素被分类到1,否则为0。之所以称为等高线阈值化,是因为在像素值变化缓慢的图像中,像素的选择就像地图上的等高线一样。一般在选取同样合理的阈值的状况下,等高线阈值化能够比一般的全局阈值化保留更丰富的边界信息,在一些要求情况下也可以直接将其作为边界检测子来使用。

Q={0I<=th11th1<I<=th20I>th2 .        (342)Q=\begin{cases} 0 && I <= th1 \\1 & & th1 < I <= th2 \\ 0 & & I > th2 \ \end{cases}.\ \ \ \ \ \ \ \ (3-4-2)

可见,阈值化运算并不涉及数值计算,只有简单的比较和分类,所以理论上可以直接采用组合逻辑实现。

3.4.2 设计

根据原理可知,由于逻辑比较简单清晰,所以只需要考虑第2章的接口标准外即可,并且可以直接使用组合逻辑实现,但考虑到一个单独的模块采用组合逻辑可能会造成与其他模块组合逻辑的串联,这样会增加整体的路径延迟,降低FMax,故本库中即使是一些简单的操作也会至少使用加一级缓冲,采用一级流水线进行实现。综上,实现一个Threshold核(以下简称TH核)需要配置参数、端口分别如表3-4-1和表3-4-2所示。

名字 类型 范围 默认值 说明
work_mode 无符号 0为流水线模式,1为请求响应模式 0 模块的工作模式。
color_width 无符号 1 - 12 8 色彩位宽。
表3-4-1 配置参数


名字 端口 类型 范围 默认值 说明
clk 输入 无符号 Clock.
rst_n 输入 无符号 复位,低有效。
th_mode input 无符号 0为基本全局阈值化,1为等高线阈值化 操作方法。
th1 input 无符号 color_width - 1 : 0 阈值1,用于两种模式。
th2 input 无符号 color_width - 1 : 0 阈值2,只能用于等高线阈值化模式。
in_enable 输入 无符号 输入数据使能,在流水线模式下,它是另一个复位信号,在请求响应模式下,只有在它有效的时候in_data才会被真正地改变。
in_data 输入 无符号 color_width - 1 : 0 输入数据,必须和in_enable同步输入。
out_ready output 无符号 输出数据有效,在两种模式下,这个信号都会在out_data可以被读取的时候有效。
out_data output 无符号 color_width - 1 : 0 输出数据,将会和out_ready同步输出。
表3-4-2 端口

3.4.3 实现

根据3.4.2的设计便可以实现一个TH核,流水线和请求响应两种模式的实现方式如下:

3.4.3.1 流水线模式

保证地址和数据同步流水化输出,在复位时二者皆输出为0,实现如下:
in_enable或rst_n为低时,out_ready输出为0,即输出无效,系统不工作;否则系统根据th_mode、th1和th2的值进行工作,一个周期后输出第一个数据,并且每一个clk的上升沿都会送入一个数据in_data进行处理,第一个输出数据有效之后,每一个周期都将送出一个有效数据,波形如图3-4-1。

图3-4-1 流水线模式时序
图3-4-1 流水线模式时序

3.4.3.2 请求响应模式

基本同3.4.3.1,但输入数据in_data只有在in_enbale的上升沿才会被送入处理,波形如图3-4-2。

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

3.4.3.3 IP核GUI

完成功能后对TH核进行了封装,封装如图3-4-3,work_mode被设计为键值对的模式,方便用户理解和选择,其它参数都根据实际状况加上了范围限定。

图3-4-3 TH核的GUI
图3-4-3 TH核的GUI

3.4.4 仿真

TH核只对灰度图像有意义,所以我选取了两张灰度模式的图像,并分别设置了两套参数(理论上可以设置任意套参数),对一般全局阈值化和等高线阈值化的模式进行配置,参数如表3-4-3。



mode th1 th2
Base 128 0
Contour 50 200
表3-4-3 仿真参数

其中Base模式为一般全局阈值化,而Contour为等高线阈值化,对每种参数进行流水线和请求响应模式的测试,原始图像如图3-4-4,每一张图像的测试流程如下:

流水线模式conf1 -> 存入*-conf1-pipeline-hdlfun.*内 -> 请求响应模式conf1 -> 存入*-conf1-reqack-hdlfun.*内 -> 流水线模式conf2 -> 存入*-conf2-pipeline-hdlfun.*内 -> 请求响应模式conf2 -> 存入*-conf2-reqack-hdlfun.*内。

图3-4-4 原始测试图像
图3-4-4 原始测试图像

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

图3-4-5 仿真结果
图3-4-5 仿真结果,左侧为请求响应模式下的HDL功能仿真结果,中间为流水线模式下的HDL功能仿真结果,右侧为软件仿真结果

3.4.5 资源和时序

由于两种模式的基本构成大致相同,所以只对第一种模式进行分析,根据Vivado生成的报表,主要资源耗费如表3-4-4。

Slice LUTs* Slice Registers
11 2
表3-4-4 主要资源耗费

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

FMax = 374.39MHz

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

3.4.6 分析与结论

首先分析基本全局阈值化和等高线阈值化的效果,如图3-4-6和3-4-7所示,在给定参数的情况下,等高线阈值化对于边缘的保留的确更为完整,分类更为有效。

图3-4-6 一般全局阈值化结果
图3-4-6 一般全局阈值化结果

图3-4-7 等高线阈值化结果
图3-4-7 等高线阈值化结果

根据仿真结果计算PSNR,得到的数据如表3-4-5。

1-Base-128-0 1-Contour-50-200 2-Base-128-0 2-Contour-50-200 Total
1000000.00 1000000.00 1000000.00 1000000.00 1000000.00
表3-4-5 PSNR

PSNR均值为极大值,可见TH核和软件处理完全等效,同时可以达到不错的FMax,设计成功。


参考文献

[3] Donald G.Bailey.基于FPGA的嵌入式图像处理系统设计[M].原魁,何文浩,肖晗译.北京:电子工业出版社,2013


感谢

仿真图像来源:
H2SO4-蝶
パセリ-Favour

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