1. 引言
生物样本库是一种集生物样本、信息和数据于一体的资源,对疾病预测、诊断、物种保护和作物改良等具有重要意义[1] [2]。目前,转化医学和再生医学的发展都离不开生物样本资源库的理论基础和临床研究[3]-[5]。生物样本资源库发展于1970年代,欧洲国家首次开展与生物样本保存有关的工作,大约20年后,生物样本库在数量上出现了大幅增加的趋势[6] [7]。从十二五期间开始,我国逐渐增加了对人类遗传资源样本库的投资,到现在为止,已经在全国范围内相继建立了一批大型的人类遗传资源样本库[8]。因此,实现对生物样本资源库的高效管理成为人们关注的焦点。
其中,二维码技术在生物样本存储与管理中得到广泛应用,成为机器视觉的热点[9]。目前,二维码的研究主要分为QR Code (二维码Quick Response Code)和Data Matrix两种,生物样本存储主要采用Data Matrix二维码格式。针对Date Matrix二维码识别目前已经有很多算法可以识别,例如应用于方阵式DM码定位的图像分割技术[10],以及Matuszczyk等人提出在制造背景下直接识别DM二维码[11],Karrach Ladislav等人提出DM二维码识别方法[12]等。但一般情况下,由于光照不均匀或者二维码打印质量不高等原因,导致识别率不高,限制了其应用。
为了解决上述问题,本文以树莓派为核心,CSI摄像头为图像采集模块,采用传统的图像处理算法对二维码图像实现预处理,提高生物样本二维码识别的准确率。
2. 系统总体方案设计与主要硬件组成
针对生物样本库二维码识别,我们设计了树莓派采集系统,硬件系统如图1所示,当生物样本二维码放置在设备上后,在计算机的上位机软件界面点击拍照,树莓派会收到拍照指令,打开光源,并启动摄像头,通过CSI摄像头拍摄一张生物样本二维码图像,并通过http协议无线传输到上位机软件上并显示,最后点击识别图像,拍摄得到的二维码图像会经过一系列的图像处理算法,得到清晰的二维码灰度图像,将处理后的图像放入ZXing库中,识别得到生物样本二维码所对应的信息。
Figure 1. Image acquisition system based on Raspberry Pi
图1. 基于树莓派的图像采集系统
树莓派负责执行上位机传达的指令,直接与硬件设备交互,执行具体的操作任务。在本文中,下位机是一个基于Flask框架的PythonWeb应用程序,它涉及树莓派picamera2库调用树莓派上的摄像头捕捉具有特定像素要求的二维码图像,以及通过GPIO (通用输入输出)接口控制硬件。它还包括一个多线程任务队列来处理并发请求,并且使用了UDP广播来广播设备信息。硬件结构主要模块由四个部分组成,分别是:树莓派4B主控模块、图像采集模块、设备外壳、平行光源。
2.1. 树莓派4B主控模块
系统的核心硬件是树莓派 4B 型微型计算机,其提供了卓越的计算性能和高效的数据处理能力。树莓派主要通过CSI端口与图像采集模块连接。在系统发出采集图像指令时,树莓派通过控制图像采集模块采集外壳上的生物样本二维码图像,并将其通过http协议无线到上位机软件上,实现生物样本二维码图像的采集与传输。
2.2. 图像采集模块
该设计采用树莓派Camera Module 3摄像头模块,Camera Module 3摄像头使用了索尼IMX708传感器,其具有1200万像素,最高可拍摄1080P @50帧的视频、新模块支持高动态范围(HDR)摄影和自动对焦,并且可以输出RAW10文件格式。采用该摄像头模块能够让摄像头采集图像更加精准。
2.3. 设备外壳与平行光源
设备外壳由实验室利用SolidWorks三维设计软件与3D打印机独立设计并打印出来,如图2所示。平行光源采用24V平行光源,放置于外壳底部,其相对于线性光源具有很好的光照均匀性与方向性,具体地,主要通过将光打在生物样本二维码基板上,使图像采集模块得到清晰的图像。
Figure 2. Device shell
图2. 设备外壳
3. 图像处理算法
3.1. 二维码图像处理算法设计
在本文的设计中,图像处理算法在计算机上完成,采用C#编程,计算机通过与树莓派建立连接,获取树莓派采集到的图像信息,并经过一系列的图像处理算法得到二维码及其轮廓,以便后续识别。在图像算法方面,采用边缘检测、二值化、形态学处理等算法,加强二维码图像信息,并使用ZXing库进行二维码识别,如图3为二维码识别算法流程图。
3.2. 图像二值化处理
图像二值化是一种图像处理技术,它将图像中的每个像素值转换为两种颜色之一:黑色或白色。这个过程通常涉及选择一个阈值,将像素值与阈值进行比较,并根据比较结果将像素值设置为黑色或白色。图像二值化可以简化图像,提高对比度,减少数据量,并用于文字识别、物体检测和图像分割等应用。图像二值化处理方法主要分为全局阈值分割、自适应阈值分割、局部阈值分割等。在生物样本库二维码识别过程中,光照环境对识别结果影响较大,为了减少光照对识别结果的影响,本文选择自适应高斯阈值分割。
Figure 3. The flow chart of two-dimensional bar code recognition algorithms
图3. 二维码识别算法流程图
自适应高斯阈值分割是基于图像局部区域的统计特性来计算阈值,该方法假设图像中的每个局部区域服从高斯分布,并利用这一假设来动态确定每个像素点的阈值。自适应高斯阈值分割特别适用于图像中存在不同光照条件或不同灰度级别的区域。自适应高斯阈值的计算公式如下:
(1)
其中,
是在位置
处计算出的自适应高斯阈值,
是位置
处邻域内像素的灰度均值,
是位置
处邻域内像素的灰度标准差,k是一个常数,用于调整阈值相对于均值和标准差的敏感度。
最后将每个像素的灰度值与其自适应高斯阈值
进行比较,如果像素值大于或等于阈值,则将该像素设置为前景(通常是白色或255),否则设置为背景(通常是黑色或0)。
本设计中,将二维码图像二值化是二维码图像识别的重要步骤,图像自适应高斯阈值分割可以去除图像中的噪声、提高图像对比度并去除二维码图像中的干扰信息,提高二维码识别的准确率。如图4为二维码原图像与图像自适应高斯阈值分割后的图像。
3.3. 形态学闭运算
图像形态学闭运算通过先进行膨胀操作,再进行腐蚀操作,来填充图像中的小孔和裂缝,并平滑图像的边缘。此过程可以增强图像中的连通区域,并减少图像中不必要的细节信息,从而提高图像的鲁棒性。形态学闭运算计算过程如下:
先膨胀:
(2)
再腐蚀:
(3)
最后进行闭运算:
(4)
其中,
表示A被结构元素B膨胀的结果,
表示A被结构元素B腐蚀的结果,
表示A经过闭运算后的结果。
Figure 4. The original image of the two-dimensional bar code and the binary image
图4. 二维码原图像与图像二值化后的图像
本设计中,图像形态学闭运算主要填充二维码二值化图像中的小孔和裂缝,并平滑图像,消除图像噪声点对图像识别的影响,如图5为图像形态学闭运算后的图像。
Figure 5. Image after morphology closing operation
图5. 图像形态学闭运算后的图像
3.4. 图像区域增长
图像区域增长是一种基于种子点的图像分割方法,它从种子点开始,逐像素地判断周围像素是否满足特定的条件,并将满足条件的像素添加到区域中,从而逐步扩大区域范围,直至达到图像分割目标。增长过程如下:
设S是种子点的集合,T是当前区域,N是像素p的邻域。
初始化:
(初始区域包含所有种子点)
增长过程:对于T中的每个像素p,计算其邻域
中的每个像素q的相似性:
(5)
其中,
和
分别是像素q和p的灰度值。如果
小于某个阈值
,则将q添加到区域T中:
(6)
重复上述过程,直到没有新的像素可以添加到区域T中。
本设计中,图像区域增长主要用于消除图像中二维码以外的区域与比较分散的噪声点,提高图像识别率,本文种子点选取20个种子点,分布于图像中心区域,如图6为图像区域增长后的图像。
Figure 6. Image after the image region growth algorithm
图6. 图像区域增长后的图像
3.5. 图像边缘检测
图像边缘检测通过识别图像中亮度或颜色发生显著变化的像素点,来提取图像的边缘信息。边缘检测可以帮助我们识别图像中的物体轮廓、纹理边界等特征,从而进行图像分割、目标识别等后续处理。本设计中,图像边缘检测使用Canny边缘检测算法,主要用于提取二维码轮廓信息,便于后续的图像填充与图像运算。如图7为边缘检测后的图像。
Canny边缘检测算法通常包括五个步骤:滤除噪声、计算梯度、非极大值抑制、双阈值、边缘跟踪和滞后阈值。
滤除噪声,使用高斯滤波器平滑图像以减少噪声的影响。高斯滤波器是一种加权平均滤波器,其权重由高斯函数确定:
(7)
其中,
是高斯分布的标准差,它控制着平滑的程度。
计算梯度,计算图像中每个像素点的梯度大小和方向。通常使用Sobel算子来近似图像的梯度:
(8)
(9)
梯度的大小M和方向
可以通过以下公式计算:
(10)
(11)
其中,
是计算从x轴到点
的向量角度的函数。
非极大值抑制,每个像素点与其梯度方向上相邻的像素点进行比较。如果该像素点的梯度不是局部最大值,则将其抑制(即设置为0)。这是通过比较当前像素点的梯度大小与其梯度方向上的相邻像素点的梯度大小来完成的。
双阈值,经过非极大抑制后图像中仍然有很多噪声点。Canny算法中应用了一种叫双阈值的技术。即设定一个阈值上界和阈值下界,图像中的像素点如果大于阈值上界则认为必然是边界(称为强边界),小于阈值下界则认为必然不是边界,两者之间的则认为是候选项(称为弱边界),需进行进一步处理。
边缘跟踪和滞后阈值,只有当弱边缘连接到强边缘时,弱边缘才被认为是真正的边缘。这个过程可以确保边缘是连续的,并且减少了假边缘的出现。
Figure 7. Image after edge detection algorithm canny
图7. 边缘检测后的图像
3.6. 图像填充与图像运算
图像填充涉及将特定颜色或图案填充到图像的指定区域中,这个过程通常通过算法来确定填充区域的边界,并确保填充不会超出这些边界,常用于图像编辑、增强和预处理步骤中,以改善视觉效果或为后续处理做准备。
图像运算是通过对图像中的像素值执行数学运算来生成新图像或修改现有图像的过程,这些运算包括加法、减法、乘法、除法以及更复杂的算术和逻辑运算,用于实现图像增强、滤波、合成、对比度调整等多种图像处理效果。其中,图像按位与运算过程如下:
对于图像中的每个像素
和
,按位与运算的公式可以表示为:
(12)
其中,
是输出图像的像素值,
是按位与运算符。
本设计中图像填充主要用于填充整个二维码图像便于后续提取二维码轮廓信息;图像运算主要用于将填充后的图像与形态学闭运算后的图像实现按位与运算,得到完整的二维码图像,如图8为填充后的图像与形态学闭运算后的图像。
Figure 8. The image after filling and the image after morphological closure operation
图8. 填充后的图像与形态学闭运算后的图像
3.7. 二维码识别结果
ZXing (“Zebra Crossing”的缩写)是一个开源的、多语言支持的条码处理库,它提供了在多种平台上识别和生成一维码(如UPC、Code 128)和二维码(如QR Code、Data Matrix)的功能,通过其核心API进行图像预处理、条码检测和解码,同时支持多种编程语言,包括Java、C#、PHP、Python等,使得开发者能够在应用程序中轻松集成条码扫描和生成功能。ZXing广泛应用于移动支付、产品追踪、信息获取、文档管理等领域。如图9为经过图像处理与Zxing库识别后的二维码识别结果图。由图9可以看出,算法可以实现48孔生物样本二维码识别。
Figure 9. Diagram of two-dimensional bar code’s recognition result
图9. 二维码识别结果图
4. 结果讨论与分析
本文构建了基于树莓派的二维码识别系统,将树莓派与个人计算机连接在同一个局域网上,并通过http协议连接。通过上位机控制树莓派采集生物样本二维码图像,并传输到上位机,接着经过一系列的图像处理算法,得到二维码轮廓并将其传输到ZXing库中进行识别,最后得到生物样本二维码图像信息。
为了解决光照等因素对二维码识别率的影响,在图像处理算法方面,选择了图像二值化处理、形态学运算、区域增长等算法,消除了图像中的干扰信息,其中形态学运算可以提取图像边缘,区域增长算法从图像中心区域选取多个种子点,提取了二维码区域,而将文字部分排除。然后通过图像边缘检测找到二维码的两个长边,通过填充图像区域,得到了二维码的准确位置。最终将提取得到的二维码图像导入ZXing库,实现了生物样本二维码的识别通过上述的图像处理方法,大大提高了二维码图像识别的准确率。测试了多个生物样本SBS板架,均可识别所有的二维码。
基金项目
辽宁省教育厅面上项目(JYTMS20231205)。
NOTES
*通讯作者。