灰度投影算法的安检图像判读及FPGA实现方法*

2018-12-07 08:31,,,,
单片机与嵌入式系统应用 2018年11期
关键词:分块投影灰度

,,,,

(1.北华航天工业学院 电子与控制工程学院,廊坊 065000;2.北京航星机器制造公司)

引 言

X射线检查仪是安全检查工作中被广泛应用的装置,操作人员通过对安检图像中被检物品的形状、颜色等进行辨识,不需要打开包裹就可以将其中的违禁物品检查出来[1],其准确度取决于安检员的经验、素质以及是否视觉疲劳等因素,存在一定的安全隐患[2]。因此,对安检图像中危险品进行智能判断,预先将危险品标注在安检图像上,能够辅助安检人员的工作,使安全检查更加智能、高效、准确。

由于X射线穿透不同有效原子序数的物体具有不同的衰减率,因此在安检图像上表现出不同的灰度级[3]。针对这一特性,便可区分出原子序数较大的金属危险品和其他物品。通过FPGA将采集到的安检图像数据进行预处理,找到并标记出疑似危险品所在位置,不仅能够满足危险品智能判读的需求,还可以充分发挥FPGA的实时性和高效的并行处理能力,使安检图像更快地显示在安检人员面前。

1 算法概述

X射线安检机的原始图像数据噪声特点显著,采用中值滤波的方法来对安检图像进行去噪处理,同时保护图像的边缘[4-5]。为了减小采集到的安检图像的边框对处理结果产生影响,在进行中值滤波前,首先对安检图像进行截取,去除了灰度值较高的外围区域。为解决寻找安检图像中灰度值较小区域的问题,运用了两种灰度投影算法来寻找图像中灰度值最小的区域:分块灰度投影算法和灰度积分投影算法。对这两种方法找到的疑似存在危险品的图像区域进行评价,选取更好的处理结果呈现在安检人员的面前。算法的处理流程如图1所示。

图1 算法处理流程图

1.1 分块灰度投影算法概述

首先分块灰度投影算法需要对经过中值滤波处理后的安检图像实行子区域的划分。子区域按照阵列的形式进行排列,以子区域为单位计算每个子区域中灰度值的均值。考虑到安检图像的大小、子区域内灰度信息的丰富程度以及子区域数量等因素,根据经验判断选取了大小为40×40的子区域[6]。然后对各个子区域的均值进行排列,求出均值最小的区域所在阵列的地址,通过对这个地址分别进行行列方向的扩展,得到安检X光机图像中灰度值最小的区域。

1.2 灰度积分投影算法概述

灰度积分投影算法是根据图像在水平和垂直方向上的投影分布特征,并结合安检图像特征对灰度值较小的区域进行定位。首先对滤波后的安检图像分别进行水平和垂直方向的投影,得到两个方向上的像素灰度值的累加结果,然后根据投影结果中波峰波谷的分布及安检图像的特征定位灰度值较小的区域。

2 FPGA设计与实现

由于FPGA具有运行速度快、并行运行的优势,能够更多更好地集成安检机中的图像处理算法,因此选用FPGA来设计实现。为增强代码的可移植性与可读性,对中值滤波算法、分块灰度投影算法和灰度积分投影算法进行了模块化设计。

2.1 分块灰度投影算法的硬件实现

该模块的功能为通过分块灰度投影算法寻找安检图像中灰度值最小的区域,主要分为划分子区域模块和最小值模块。

划分子区域模块的功能是将安检图像划分为若干个40×40的子区域,对每个区域中的像素值进行累加并求出每个区域中像素值的均值。该模块采用循环型除法器来进行除法操作。循环型的除法器是典型的硬件除法器,在本次设计中除数和被除数的位宽为11位,除法器需要循环11次完成除法操作,并取得11位商和11位余数,将取得的商输出给最小值模块。

最小值模块的功能是根据划分子区域模块的输出结果找到最小值及最小值所在的地址,然后对最小值所在地址分别进行行列方向的扩展,得到灰度值最小的区域,完成定位。

MATLAB求子区域均值的结果如图2所示,FPGA的划分子区域模块仿真结果如图3所示。通过验证比较,两者对子区域求均值的结果是相同的,说明划分子区域模块的设计在FPGA上是正确的。

图2 MATLAB求子区域均值结果

图3 划分子区域模块仿真结果

2.2 灰度积分投影算法的硬件实现

该模块的功能为通过灰度积分投影算法在安检X光机图像中寻找灰度值最小的区域,主要分为横向投影模块、纵向投影模块和寻找峰值模块。

2.2.1 横向投影模块

该模块的功能为对图像进行水平方向的投影,即将图像阵列的行数据的灰度值进行累加。因为X射线安检机是由线阵式探测器来采集图像数据的,即一行一行传递图像数据[7]。所以可以直接对数据进行累加,只需将每一行的数据累加完成后进行复位即可。将每一行的数据累加结果输出给寻找峰值模块。

2.2.2 纵向投影模块

该模块的功能是对图像进行垂直方向的投影,即将图像阵列的列数据的灰度值进行累加。由于FPGA不能直接进行纵向的求和,因此需要调用一个RAM来存储每次求和的结果。纵向投影模块的主要实现步骤为:首先将第一行数据写入RAM中,当第二行数据到来时,拉高读数据有效信号,读出之前存入RAM中的第一行数据,并将两行数据进行累加,将累加结果再次存入RAM中,替换上一次的累加结果,当最后一行数据读完时,RAM中写入的便是纵向投影的最终结果。为了减少资源的消耗,横向投影模块和纵向投影模块需要复用寻找峰值模块,因此纵向投影的最终结果要在横向投影寻找峰值之后再读出。

图像第191列至第208列的MATLAB纵向投影结果如图4所示,FPGA纵向投影模块仿真结果如图5所示。通过验证比较,两者进行纵向投影后的结果是相同的,说明纵向投影模块的设计在FPGA上是正确的。

图4 MATLAB 纵向投影结果

图5 纵向投影模块仿真结果

2.2.3 寻找峰值模块

该模块的功能为实现MATLAB中的寻找峰值函数。由于MATLAB算法中对横纵投影结果进行寻找峰值,最终确定一个峰值,因此该算法可以简化为寻找横纵投影结果中的最小值,从而可以调用分块灰度投影算法中的寻找最小值模块。最后对最小值所在地址分别进行行列方向的扩展,从而定位到灰度值最小的区域。

3 仿真与验证

通过对比MATLAB和FPGA对同一幅安检图像进行预处理后的像素值,来验证算法在FPGA上的设计是正确的。通过编写测试文件将FPGA处理后的数据输出到文本文件中,再由MATLAB形成图像,由此便可观察FPGA处理后的图像效果。得到正确的仿真波形后,经过综合、布局布线,可以得到资源利用情况,如表1所列。

表1 资源利用情况

图6为利用FPGA对安检图像进行处理后的效果,白色方框内即为最终找到安检图像中灰度值最小的区域。

图6 FPGA处理图像前后对比

结 语

猜你喜欢
分块投影灰度
采用改进导重法的拓扑结构灰度单元过滤技术
基于灰度拉伸的图像水位识别方法研究
解变分不等式的一种二次投影算法
基于最大相关熵的簇稀疏仿射投影算法
分块矩阵在线性代数中的应用
找投影
找投影
基于最大加权投影求解的彩色图像灰度化对比度保留算法
基于灰度线性建模的亚像素图像抖动量计算
反三角分块矩阵Drazin逆新的表示