双边滤波算法在给手背静脉图像进行去噪、平滑的同时可以保持静脉血管的边缘细节。基于FPGA的双边滤波算法,可以利用FPGA的并行和流水线计算的特点,加快算法的计算速度,在满足手背静脉显像系统对于实时性要求的同时,增强手背静脉图像,为后续的血管分割和提取奠定基础。 The bilateral filter algorithm reduces noise in hand vein image while preserving edge details of vein. By implementing the bilateral filter algorithm on FPGA, features of FPGA such as parallel and pipeline processing can boost the calculation speed of the algorithm. While satisfying the real-time requirements of hand vein imaging system, this implementation can enhance the hand vein image for subsequent segmentation and extraction of vein.
梁岳青,崔笑宇*
东北大学,中荷生物医学与信息工程学院,辽宁 沈阳
收稿日期:2019年6月12日;录用日期:2019年6月29日;发布日期:2019年7月5日
双边滤波算法在给手背静脉图像进行去噪、平滑的同时可以保持静脉血管的边缘细节。基于FPGA的双边滤波算法,可以利用FPGA的并行和流水线计算的特点,加快算法的计算速度,在满足手背静脉显像系统对于实时性要求的同时,增强手背静脉图像,为后续的血管分割和提取奠定基础。
关键词 :双边滤波,FPGA,手背静脉,图像处理
Copyright © 2019 by author(s) and Hans Publishers Inc.
This work is licensed under the Creative Commons Attribution International License (CC BY).
http://creativecommons.org/licenses/by/4.0/
皮下静脉穿刺是常见的医疗手段之一,在静脉采血、输血、注射药物之前都需要对患者进行皮下静脉的穿刺。但是,许多因素会影响到皮下静脉穿刺的成功率,如儿童静脉纤细、深色皮肤等。手背静脉显像技术可以帮助医护人员找到血管,提高皮下静脉穿刺的成功率。主流的手背静脉成像技术基于近红外成像技术,利用了静脉血管中的血红蛋白对于700 nm~900 nm的近红外光的吸收率高于水、脂肪等周围的皮肤组织的特性 [
双边滤波是一种结合了空间邻近关系和亮度相似度的滤波器。空间邻近度滤波器通过平均滤波器窗口中心点邻域的像素值,起到低通滤波器的作用,对图像进行平滑。而亮度相似度滤波器只允许平均相似的像素值,假如滤波器窗口内的像素与中心像素的像素值相差较大,该像素则会被忽略,起到保持边缘的作用。因此,双边滤波器既平滑了图像,又保持了图像的边缘。
双边滤波由下式定义:
ϕ ¯ ( m 0 ¯ ) = 1 k ( m 0 ) ∑ m ∈ F ϕ ( m ) ⋅ s ( ϕ ( m 0 ) , ϕ ( m ) ) ⋅ c ( m 0 , m ) (1)
定义m = (x, y)代表像素的坐标,m0 = (x0, y0)和 m 0 ¯ = ( x 0 ¯ , y 0 ¯ ) 分别代表滤波前后中心像素的坐标。因此,式中 ϕ ¯ ( m 0 ¯ ) 为滤波后中心像素的像素值, ϕ ( m ) 和 ϕ ( m 0 ) 分别为滤波窗口F中邻域像素和中心像素的像素值。
s ( ϕ ( m 0 ) , ϕ ( m ) ) = e − 1 2 ( ‖ ϕ ( m 0 ) − ϕ ( m ) ‖ σ p h ) 2 (2)
c ( m 0 , m ) = e − 1 2 ( ‖ m 0 − m ‖ σ c ) 2 (3)
式(2)和(3)分别称之为亮度相似度算子和空域邻近度算子 [
k ( m 0 ) = ∑ m ∈ F S ( ϕ ( m 0 ) , ϕ ( m ) ) ⋅ c ( m 0 , m ) (4)
式(4)对加权后的像素值进行归一化,保证滤波后的图像灰度级保持在原来的范围。
双边滤波算法实现的总体框图如图1所示,图像逐个像素从SDRAM中读入。为了形成N × N大小的窗口,输入的像素需要先经过N − 1个图像宽度的行缓存,再逐列输出到N × N的窗口寄存器中。窗口寄存器中的每个像素点分别输入到各自的亮度相似度算子,并行计算出亮度相似度权重系数,并与已知的空域邻近度权重系数相乘。计算出权重系数后,每个像素与相应权重系数相乘,然后分别对加权像素值与权重系数求和,二者相除得到双边滤波后的图像。
图1. 算法处理步骤流程图
根据式(2),计算亮度相似度权重系数需要复杂的指数运算。在FPGA中实现指数运算的常用函数有CORDIC算法、分段线性逼近法等,然而其计算范围小、精度差,而且需要耗费大量硬件资源和运算周期 [
根据式(2),两个像素值的差值可以作为查找表中的相应权重系数的查找地址,且权重系数的数量是有限的,并受到下列三个参数的影响:
1) 像素值的位宽N;
2) 参数σph;
3) 权重系数的位宽W;
提升图像的像素值位宽,会导致像素值差值的数量增多,预先存入查找表中的权重系数的数量会增加。参数σph会决定高斯曲线的陡峭程度,与权重系数的位宽共同影响计算精度。根据指数的性质,亮度相似度权重与空间邻近度权重的取值范围为 0 < s ( ϕ ( m 0 ) , ϕ ( m ) ) < 1 与 0 < c ( m 0 , m ) < 1 ,因此使用定点数代替浮点数来表示权重系数。当像素值差值越大,负指数向零收敛,此时只有有限数量的权重系数大于零。在权重系数的位宽W下,对权重系数采取四舍五入,并将最后一个大于0的权重系数所对应的像素值差值定为极限值。假设像素值位宽N = 8,像素值差值的可取0~255,权重系数总共有256个值,查找表深度为256,权重系数位宽W = 8,消耗256 × 8 bit的存储器资源。如图2所示,此时像素值差值90为极限值,只有90个权重系数会被存储到查找表,消耗的存储器资源随之减少。
图2. 数量有限的权重系数
亮度相似度权重系数计算步骤如图3所示,窗口寄存器中的邻域像素 ϕ ( m ) 中心像素 ϕ ( m 0 ) 相减,得到像素值差值来查找基于特定σph计算出的亮度相似度权重系数表,得到像素m对应的亮度相似度权重系数p(m)。若像素值差值超过极限值,将跳过查表,输出结果0。
图3. 亮度相似度算子
根据式(3),计算空间邻近度权重系数与亮度相似度权重系数相似,需要进行复杂的指数运算。空间邻近度权重系数对于特定大小的窗口是恒定的,而且在水平和垂直方向上对称,可预先计算好结果。如图4所示,对于3 × 3大小的窗口,只需计算空间距离为0、1、2的权重系数,根据像素的空间位置直接查表可得相应的空间邻近度权重系数g(m),并与上一步的亮度相似度权重系数相乘得到每个像素的综合权重系数w(m)。
根据式(1)和式(4),加权后的像素值和权重系数分别需要进行累加,二者相除进行归一化。如图5与图6所示,采用累加树的形式对加权像素值和权重系数分别累加,对于3 × 3大小的窗口,需要消耗4个时钟周期得到累加结果,最后二者相除得到双边滤波后的像素值。
图4. 空间邻近度算子
图5. 累加树结构
图6. 加权像素值的归一化
采用Intel Cyclone IV E系列的EP4CE22F17C8芯片实现算法,在752 × 480的图像分辨率,及5 × 5窗口大小的参数下,双边滤波模块总共消耗了3038个逻辑寄存器,79440位RAM存储资源,及72个乘法器资源。使用Matlab对8位的752 × 480分辨率大小的手背静脉图像添加σnoise = 0.5的高斯噪声,用ModelSim对图像进行双边滤波仿真,双边滤波器中参数分别为:σph = 25,σc = 25,W = 8,另使用相同参数的高斯滤波对噪声图像进行处理作为比较。实验结果如图7所示,经过双边滤波后图像得到平滑,双边滤波的去噪效果良好,且相较于高斯滤波这一常见的图像去噪方法,保持了手背静脉血管的结构和边缘。由于流水线设计的特点,在25 MHz的时钟频率下,FPGA计算一帧图像需要耗费14 ms,每秒能计算超过60帧图像,保证了系统的实时性。
图7. 双边滤波与高斯滤波处理后图像
本文采用双边滤波算法对手背静脉图像进行滤波,与传统的高斯滤波方法相比,能滤除图像中噪声的同时保持了血管的结构和边缘,为后续的静脉血管分割和提取奠定良好基础。在FPGA上实现的双边滤波算法,利用FPGA并行和流水线计算的优点,提升了算法运算速度,满足了手背静脉显像系统实时性的需求,并提高了图像的清晰度。该算法能广泛应用于图像处理领域,具有良好的应用前景。
不足之处在于,目前本文在FPGA上实现的双边滤波算法不能动态地调节参数,只能作算法的验证,未来需要加入窗口大小以及权重系数结果进行动态调整。
非常感谢2018国家级大学生创新创业计划资助项目(2018101450201)对本文的资助。
梁岳青,崔笑宇. 基于FPGA的静脉图像双边滤波算法Bilateral Filter Algorithm of Vein Image Based on FPGA[J]. 图像与信号处理, 2019, 08(03): 130-135. https://doi.org/10.12677/JISP.2019.83018