二维码识别方法、装置、电子设备及存储介质与流程

文档序号:24485434发布日期:2021-03-30 21:09阅读:171来源:国知局
二维码识别方法、装置、电子设备及存储介质与流程

本发明涉及图像识别技术领域,具体涉及一种二维码识别方法、装置、电子设备及存储介质。



背景技术:

在生物、医学研究等领域,经常会有大批量的药物试剂或生物样本需要进行分析处理。这些试剂和样本一般保存在试剂管中。将携带有标识信息的二维码刻印于试剂管顶部或底部,利用图像处理与识别技术识别二维码,可以实现样本信息的自动化管理。

现有技术中,通常是对一个或者少数几个二维码进行扫描识别。现有的二维码识别方法,无法实现对二维码进行批量识别,并且识别成功率低。



技术实现要素:

本发明提供一种二维码识别方法、装置、电子设备及存储介质,用以解决现有技术中无法实现对二维码进行批量识别,并且识别成功率低的问题。

本发明提供一种二维码识别方法,包括:

对待识别的二维码阵列图进行分割,得到多个二维码;

基于相邻增强方式,对当前二维码进行识别,得到所述当前二维码的识别结果;

其中,所述相邻增强方式是所述当前二维码在所述二维码阵列图中相邻的二维码识别成功所用的图像增强方式。

根据本发明提供的二维码识别方法,所述基于相邻增强方式,对当前二维码进行识别,得到所述当前二维码的识别结果,包括:

将所述当前二维码在所述相邻增强方式下的图像增强结果,作为待识别图;

对所述待识别图进行二维码识别;

若识别成功,则将二维码识别所得的结果作为所述当前二维码的识别结果,否则将所述当前二维码在其余图像增强方式下的图像增强结果,作为待识别图;

所述其余图像增强方式为除所述相邻增强方式以外的图像增强方式。

根据本发明提供的二维码识别方法,所述基于相邻增强方式,对当前二维码进行识别,得到所述当前二维码的识别结果,之后还包括:

基于至少两个二维码阵列图中各个二维码的识别结果,确定在所述至少两个二维码阵列图中均识别成功的已知二维码;所述至少两个二维码阵列图是对同一二维码阵列采集得到的;

基于所述已知二维码在各个二维码阵列图中的位置,对齐各个二维码阵列图;

融合对齐后的各个二维码阵列图中各个二维码的识别结果,得到所述二维码阵列中各个二维码的识别结果。

根据本发明提供的二维码识别方法,所述基于所述已知二维码在各个二维码阵列图中的位置,对齐各个二维码阵列图,包括:

以任一二维码阵列图为基准图像,确定所述已知二维码在所述基准图像中与基准原点之间的距离;

确定所述已知二维码在其余二维码阵列图中与每一角点之间的距离;

若所述已知二维码与任一角点之间的距离等于所述已知二维码与所述基准原点之间的距离,则将所述任一角点作为所述其余二维码阵列图的基准原点;

基于所述基准图像的基准原点,以及所述其余二维码阵列图的基准原点,对齐各个二维码阵列图。

根据本发明提供的二维码识别方法,所述对待识别的二维码阵列图进行分割,得到多个二维码,包括:

基于二维码的形状特征,对所述二维码阵列图的二值化图像中经腐蚀操作后未闭合的孔洞进行填充,并对填充后的二值化图像进行膨胀操作,得到每一二维码的候选连通区域;

基于每一二维码的候选连通区域,对所述二维码阵列图进行分割,得到多个二维码。

根据本发明提供的二维码识别方法,所述基于每一二维码的候选连通区域,对所述二维码阵列图进行分割,得到多个二维码,包括:

对每一二维码的候选连通区域进行检测,得到每一二维码对应的目标区域;

基于每一二维码对应的目标区域,对所述二维码阵列图进行分割,得到多个二维码。

根据本发明提供的二维码识别方法,所述基于每一二维码对应的目标区域,对所述二维码阵列图进行分割,得到多个二维码,包括:

对所述二维码阵列图中每一二维码对应的目标区域进行像素遍历,确定每一二维码的边界坐标;

基于每一二维码的边界坐标,确定每一二维码的区域大小以及各个二维码之间的间隔;

基于每一二维码的区域大小以及各个二维码之间的间隔,对所述二维码阵列图进行分割,得到多个二维码。

本发明还提供一种二维码识别装置,包括

分割单元,用于对待识别的二维码阵列图进行分割,得到多个二维码;

识别单元,用于基于相邻增强方式,对当前二维码进行识别,得到所述当前二维码的识别结果;

其中,所述相邻增强方式是所述当前二维码在所述二维码阵列图中相邻的二维码识别成功所用的图像增强方式。

本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述二维码识别方法的步骤。

本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述二维码识别方法的步骤。

本发明实施例提供的二维码识别方法、装置、电子设备及存储介质,采用图像增强方式对当前二维码进行识别,提高了环境光照不理想和成像质量不高的情况下对二维码的识别成功率,根据二维码阵列图中相邻的二维码识别成功所用的图像增强方式,对当前二维码进行识别,得到当前二维码的识别结果,实现了对二维码阵列图中所有的二维码进行批量识别,避免了逐个对当前二维码对应的多个图像增强结果进行识别,减少了批量识别二维码过程中的识别时间,减小了识别算法复杂度,提高了二维码批量识别的效率。

附图说明

为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的二维码识别方法的流程示意图;

图2为本发明提供的二维码识别方法中步骤120的实施方式的流程示意图;

图3为本发明提供的采用相邻增强方式识别二维码的算法流程图;

图4为本发明提供的二维码阵列图融合识别方法的流程示意图;

图5为本发明提供的二维码识别方法中步骤140的实施方式的流程示意图;

图6为本发明提供的二维码对齐方法的流程示意图;

图7为本发明提供的二维码识别方法中步骤110的实施方式的流程示意图;

图8为本发明提供的二维码识别方法中步骤112的实施方式的流程示意图;

图9为本发明提供的二维码识别方法中步骤1122的实施方式的流程示意图;

图10为本发明提供的医用试剂管的二维码批量识别方法的流程示意图;

图11为本发明提供的二维码识别装置的结构示意图;

图12为本发明提供的电子设备的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

二维码是一种常见的信息载体,有datamatrix、qrcode、maxicode、pdf417、code49等多种类别,通过内部深色和浅色码元的排列组合,组成计算机内部逻辑基础的“0”、“1”比特流,实现数据文字符号信息的编码和存储,具有编码密度高、信息容量大、容错能力强等特点。例如,datamatrix二维码,可以在仅仅25mm2的面积上可编码30个数字。

现有技术中的二维码识别方法适用于二维码分布相对稀疏,光照条件较为理想,成像质量较高的场景。而对于二维码尺寸较小且排列密集,环境光照复杂,成像质量不高的场景,则已有的二维码识别方法无法进行识别,或者识别效率和准确率均不能达到预期效果。

图1为本发明提供的二维码识别方法的流程示意图,如图1所示,该方法包括:

步骤110,对待识别的二维码阵列图进行分割,得到多个二维码。

具体地,二维码阵列图为对多个按照一定规则排列的二维码进行采集得到的图像。例如,将多个二维码按照线性排列、圆周排列或者纵横排列,可以得到相应的二维码阵列图。又例如,医学领域中,药物试剂一般存放在带有二维码标签的试剂管中,试剂管成批量地被收纳在冻存盒中,冻存盒主要由透明塑料顶盖和不透明塑料承载底部组成,承载体采用网格式卡槽设计,确保试剂管摆放规则且不易歪斜脱落,通常有多种规格和颜色设计,常见的有10*10的100孔和5*10的50孔等。对冻存盒进行图像采集,就可以得到包含二维码阵列的图像,对该图像进行处理,就可以得到二维码阵列图。

对二维码阵列图进行识别,就是要识别出二维码阵列图中每个二维码对应的数据信息。识别之前,可以对二维码阵列图进行分割,从而得到二维码阵列图中的多个二维码。

步骤120,基于相邻增强方式,对当前二维码进行识别,得到当前二维码的识别结果;其中,相邻增强方式是当前二维码在二维码阵列图中相邻的二维码识别成功所用的图像增强方式。

具体地,二维码的识别结果为二维码中包含的数据信息。图像增强,为通过对原始图像添加信息或者进行数据变换,选择性地突出或者抑制图像中的部分特征。图像增强方式可以为对比度提升、亮度提升和亮度压缩等。

例如,可以采用直方图均衡化实现对比度提升。直方图均衡化是图像处理领域中利用图像直方图对图像的对比度进行调整的方法。可以采用对数(log)图像增强实现亮度提升。对数图像增强可以对图像的低灰度值部分进行扩展,显示出低灰度部分更多的细节,对其高灰度值部分进行压缩,减少高灰度值部分的细节,从而达到提升图像亮度,强调图像低灰度部分的目的。可以采用伽马(gamma)图像增强实现亮度压缩。伽马图像增强主要用于图像的校正,将灰度过高或者灰度过低的图片进行修正,实现亮度压缩,增强对比度。采集环境光照复杂,使得二维码阵列图可能存在图像均匀性差、局部高光遮掩等问题,同时,设备本身的成像质量不高,使得二维码阵列图可能存在几何形变、局部成像模糊等问题。上述问题导致对当前二维码进行识别时,可能出现无法识别的现象。可以采用图像增强的方式,得到当前二维码的多个图像增强结果,进行识别后得到当前二维码的识别结果。当二维码阵列图存在大面积光照异常情况时,每个二维码可能都得尝试识别多次才能得出结果,识别效率严重低下。

考虑到当前二维码与相邻的二维码具有相似的光照特性,例如光照偏暗区域内各个二维码一般用亮度提升的图像增强方式能识别成功,光照偏亮区域内各个二维码一般用亮度压缩的图像增强方式能识别成功。

也就是说,在同一二维码阵列图中,如果采用某种图像增强方式能够成功识别相邻的二维码,则相比于采用其他图像增强方式,采用该图像增强方式也很有可能成功识别当前二维码。因此,可以将相邻的二维码识别成功所用的图像增强方式标记为相邻增强方式,用于当前二维码的识别。

采用相邻增强方式,对当前二维码进行识别,得到当前二维码的识别结果,可以避免逐个对当前二维码对应的多个图像增强结果进行识别,减少尝试识别的次数。例如,当前二维码和相邻的二维码处于光照偏暗区域内,相邻的二维码通过亮度提升的图像增强方式识别成功,此时相邻增强方式为亮度提升。对当前二维码进行识别时,可以直接采用相邻增强方式对当前二维码进行识别,若能得到当前二维码的识别结果,则不必采用对比度提升和亮度压缩等方式对当前二维码进行图像增强并识别。

本发明实施例提供的二维码识别方法,采用图像增强方式对当前二维码进行识别,提高了环境光照不理想和成像质量不高的情况下对二维码的识别成功率,根据二维码阵列图中相邻的二维码识别成功所用的图像增强方式,对当前二维码进行识别,得到当前二维码的识别结果,实现了对二维码阵列图中所有的二维码进行批量识别,避免了逐个对当前二维码对应的多个图像增强结果进行识别,减少了批量识别二维码过程中的识别时间,减小了识别算法复杂度,提高了二维码批量识别的效率。

基于上述实施例,图2为本发明提供的二维码识别方法中步骤120的实施方式的流程示意图,如图2所示,步骤120包括:

步骤121,将当前二维码在相邻增强方式下的图像增强结果,作为待识别图;

步骤122,对待识别图进行二维码识别;

步骤123,若识别成功,则将二维码识别所得的结果作为当前二维码的识别结果,否则将当前二维码在其余图像增强方式下的图像增强结果,作为待识别图;其余图像增强方式为除相邻增强方式以外的图像增强方式。

具体地,对当前二维码进行识别时,将当前二维码在相邻增强方式下的图像增强结果作为待识别图进行识别。

例如,相邻增强方式为亮度提升时,表明当前二维码在二维码阵列图中相邻的二维码识别成功所用的图像增强方式为亮度提升。则对于当前二维码,可以直接将亮度提升下的图像增强结果作为待识别图进行识别。若识别成功,则将二维码识别所得的结果作为当前二维码的识别结果,否则将当前二维码在其余图像增强方式下的图像增强结果,作为待识别图,继续进行识别。其余图像增强方式可以选择为除亮度提升之外的方式,例如对比度提升和亮度压缩等。

图3为本发明提供的采用相邻增强方式识别二维码的算法流程图,如图3所示,对二维码阵列图进行分割后得到多个二维码,i为二维码的标号,将多个二维码存入code_image_list中。对于第i个二维码进行识别时,对该二维码进行采用n种图像增强方式进行图像增强后,得到n个图像增强结果,n为正整数。每一图像增强结果对应一种图像增强方式。j为该二维码的图像增强方式。current_j为相邻增强方式。n为二维码i的n个图像增强结果的识别序号。code_image_list为二维码存储文件,code_image_list为二维码识别结果存储文件。

若i=0,则二维码i为识别过程中的第1个二维码,此前未有相邻的二维码进行识别,则可以设置j=0,开始逐一对n个图像增强结果进行识别。

若i不为0,则在对二维码i识别之前,存在识别成功的相邻的二维码,则可以设置j=current_j,即根据相邻增强方式current_j,对二维码i进行识别,如果识别成功,则将识别结果保存至code_info_list中。

若识别失败,则调整二维码i的识别序号n,对其余图像增强方式按照顺序逐一进行识别,即设置n=n+1,j=(j+1)%n。若采用其余图像增强方式识别成功,则将识别结果保存至code_info_list中,此时,设置current_j=j,表示将识别成功的其余图像增强方式j设置为相邻增强方式。

特别地,若采用相邻增强方式和其余图像增强方式均识别失败,则可以将最后一次尝试识别的其余图像增强方式的保存为相邻增强方式,将识别结果设置为未识别。

按照上述方法,对code_image_list中所有的二维码进行识别,将得到的所有二维码的识别结果保存至code_info_list。

本发明实施例提供的二维码识别方法,将当前二维码在相邻增强方式下的图像增强结果作为待识别图,对待识别图进行二维码识别,得到当前二维码的识别结果,避免了逐个对当前二维码对应的多个图像增强结果进行识别,减少了批量识别二维码过程中的识别时间,减小了识别算法复杂度,提高了二维码批量识别的效率。

基于上述任一实施例,图4为本发明提供的二维码阵列图融合识别方法的流程示意图,如图4所示,步骤120之后还包括:

步骤130,基于至少两个二维码阵列图中各个二维码的识别结果,确定在至少两个二维码阵列图中均识别成功的已知二维码;至少两个二维码阵列图是对同一二维码阵列采集得到的;

步骤140,基于已知二维码在各个二维码阵列图中的位置,对齐各个二维码阵列图;

步骤150,融合对齐后的各个二维码阵列图中各个二维码的识别结果,得到二维码阵列中各个二维码的识别结果。

具体地,二维码阵列为多个二维码按照一定的规则排列的形式,表征了各个二维码之间的位置关系,例如冻存盒中各个试剂管的摆放形式,表征了各个试剂管的位置关系,也表征了各个试剂管顶部的二维码之间的位置关系。

不均匀光照原因容易导致二维码阵列图的图像质量不佳,例如,局部高光反射使得部分二维码被遮掩。此外,由于图像采集设备的原因,例如摄像头解像力不足,导致图像边缘模糊,这些原因造成的图像遮挡或污损很难用图像增强的方法进行修复。以此,可以对同一二维码阵列采集得到的多个二维码阵列图,对多个二维码阵列图中各个二维码的识别结果进行复合叠加,提高二维码的识别成功率。

例如,考虑到畸变模糊或高光反射等影响一般是局部存在,通过调整冻存盒的位置和角度,可以将上次成像时被遮掩的部位调整至清晰可见的区域,比如存在高光噪点时将图像进行旋转变换转移噪点影响位置或者成像时尽量将存在模糊的冻存盒边缘角点区域放置于采集设备的镜头中心进行成像。尽管在单个二维码阵列图中有部分二维码是不可识别的,但在其他二维码阵列图中该部分是可能是可识别的,通过记录多个二维码阵列图的识别结果并将结果进行叠加,则可相互补充得到该冻存盒上二维码的整体识别结果。

在得到至少两个二维码阵列图中各个二维码的识别结果后,可以确定在每个二维码阵列图中均识别成功的已知二维码。在选择已知二维码时,尽量避免选择二维码阵列图中心的已知二维码。优先地,选择靠近二维码阵列图的四个角点的已知二维码。已知二维码的选择数量可以为一个或者多个,本发明实施例对此不作具体限定。

确定已知二维码及其位置后,根据已知二维码在各个二维码阵列图中的位置,对齐各个二维码阵列图。对对齐后的各个二维码阵列图的识别结果进行融合,得到二维码阵列中各个二维码的识别结果。

本发明实施例提供的二维码识别方法,根据多个二维码阵列图中均识别成功的已知二维码的位置,对齐多个二维码阵列图,融合各个二维码阵列图的识别结果,提高了环境光照不理想和成像质量不高的情况下对二维码的识别成功率。

基于上述任一实施例,图5为本发明提供的二维码识别方法中步骤140的实施方式的流程示意图,如图5所示,步骤140包括:

步骤141,以任一二维码阵列图为基准图像,确定已知二维码在基准图像中与基准原点之间的距离;

步骤142,确定已知二维码在其余二维码阵列图中与每一角点之间的距离;

步骤143,若已知二维码与任一角点之间的距离等于已知二维码与所述基准原点之间的距离,则将该角点作为其余二维码阵列图的基准原点;

步骤144,基于基准图像的基准原点,以及其余二维码阵列图的基准原点,对齐各个二维码阵列图。

具体地,各个二维码阵列图都是对同一二维码阵列采集得到的,只要能够确定各个二维码阵列图的基准原点,就可以对各个二维码阵列图进行对齐,将对齐后的各个二维码阵列图相同位置的二维码作为同一二维码。

可以在至少两个二维码阵列图,以任一二维码阵列图为基准图像。对于该基准图像,可以选择该基准图像的左上角点为基准原点。在该基准图像中标记已知二维码的位置,确定已知二维码与基准原点之间的距离。对于其余二维码阵列图,其基准原点需要确定,因此,可以通过计算已知二维码在其余二维码阵列图中与每一角点之间的距离来确定。

下面以对齐两个二维码阵列图为例来说明,二维码阵列图中二维码呈行列式分布。图6为本发明提供的二维码对齐方法的流程示意图,如图6所示,在基准图像中,基准原点o的行号和列号可以表示为(0,0)。已知二维码a分布的行号m和列号n,表示为(m,n)。则已知二维码a在基准图像中与基准原点o之间的距离l可以表示为:

在其余二维码阵列图中,已知二维码a分布的行号p和列号q,表示为(p,q)。分别计算已知二维码a与其余二维码阵列图的左上、右上、左下、右下四个角点的距离,分别为:

式中,l1为已知二维码a与左上角点之间的距离,l2为已知二维码a与右上角点之间的距离,l3为已知二维码a与左下角点之间的距离,l4为已知二维码a与右下角点之间的距离,m为其余二维码阵列图中每一行的二维码数量,n为其余二维码阵列图中每一列的二维码数量。

由于二维码阵列图是对同一二维码阵列采集得到的,l1、l2、l3、l4四个距离中必然有一个值等于已知二维码a到基准图像中基准原点的距离l,所对应的角点即为其余二维码阵列图的基准原点。

确定其余二维码阵列图的基准原点后,就可以对齐各个二维码阵列图,即对其余二维码阵列图的识别结果中各二维码的行列号进行更新。

对于其余二维码阵列图,若基准原点为左上角点,则各二维码的行列号保持不变;若基准原点为右上角点,则各二维码的行列号更新为(p’,q’)=(n-q,p);若基准原点为左下角点,则各二维码的行列号更新为(p’,q’)=(q,m-p);若基准原点为右下角点,则各二维码的行列号更新为(p’,q’)=(m-q,n-p)。

本发明实施例提供的二维码识别方法,通过计算已知二维码在基准图像中与基准原点之间的距离,以及已知二维码在其余二维码阵列图中与每一角点之间的距离,确定其余二维码阵列图的基准原点,从而对齐各个二维码阵列图,计算方法简单易行,减少了批量识别二维码过程中的识别时间,减小了识别算法复杂度,提高了二维码批量识别的效率。

基于上述任一实施例,图7为本发明提供的二维码识别方法中步骤110的实施方式的流程示意图,如图7所示,步骤110包括:

步骤111,基于二维码的形状特征,对二维码阵列图的二值化图像中经腐蚀操作后未闭合的孔洞进行填充,并对填充后的二值化图像进行膨胀操作,得到每一二维码的候选连通区域;

步骤112,基于每一二维码的候选连通区域,对二维码阵列图进行分割,得到多个二维码。

具体地,由于二维码尺寸小且存在高光遮掩和噪声的影响,利用角点或霍夫直线检测算法等检测二维码中的线段和角点时,检测的准确性较低,甚至有可能检测不到。此外,采集得到的二维码阵列图可能还包含了背景特征,并且二维码排列比较密集,如果采用特征聚类方法进行二维码的区域定位和区域分割,邻近的二维码和背景容易相互干扰导致聚类组合错误,使得二维码区域定位不准,可能出现分割后得到的二维码包含背景等干扰,或者可能出现分割后得到的二维码残缺不全。

可以对二维码阵列图进行二值化,使图像中数据量大为减少,从而凸显出二维码的轮廓。然后,基于连通域标记的思路进行二维码候选连通区域的分割提取。候选连通区域为二值图像中属于同一个二维码的像素点组成的图像区域。

为了获取候选连通区域,一般需要进行腐蚀和膨胀形态学运算,腐蚀操作可以收缩图像边界,消除小且无意义的目标物,膨胀操作使得目标边界向外扩张,可填补目标区域中某些空洞并消除包含在目标区域中的小颗粒噪声,具体可表示为:

其中,x和y为二值图中像素点的坐标,a为输入图像、b为结构元素。此处的结构元素可设置为矩形、十字形、椭圆形等多种形状,二维码一般为矩形形状,相应地,结构元素设置为矩形即可。

二值图像中,二维码一般是白底黑码形式。膨胀和腐蚀是针对白色区域而言的,膨胀操作使得二维码黑色码元收缩,腐蚀操作使得黑色码元扩张。现有技术中,对二值化图像先进行腐蚀操作将二维码内部分离的黑色码元连通在一起,再进行膨胀操作将二维码边界上的背景干扰消除,从而分离出二维码所在的候选连通区域。

由于二维码阵列图中的二维码分布密集,容易受到背景的干扰。例如对冻存盒采集得到的图像中,网格背景与二维码边缘间隙小,采用腐蚀操作在连通二维码内部码元的同时,很容易使二维码与网格背景发生粘连,成为一体,导致无法精确筛选出二维码所在的候选连通区域。

虽然可以采用颜色特征区分二维码和背景,但实际处理过程中,由于背景颜色复杂,或者光照不均匀导致无法提取稳定的颜色特征,很难通过颜色特征来剔除二维码阵列图中背景的干扰。

二维码内部黑色码元间的平均间隔较小,例如datamatrix二维码边界是由l形定位实边和黑白交替的两条虚边组成,其边界码元间的间隔肯定比内部孔洞要小。

优先考虑在二维码不粘连背景的情况下进行腐蚀操作,例如,根据二维码的尺寸,设置结构元素的大小,使得腐蚀操作后的二维码阵列图对应的二值图中,二维码不粘连冻存盒中的网格背景。

此时,二维码内部仍可能存在部分未闭合的孔洞,若直接进行膨胀操作,将会导致二维码的内部码元不能充分闭合,得到的候选连通区域包含孔洞,导致候选连通区域的检测失败。

此时,可以根据二维码的形状特征,对二维码阵列图的二值化图像中经腐蚀操作后未闭合的孔洞进行填充。

在膨胀操作之前,可以对二值图中二维码所在的区域先进行轮廓检测,并根据检测得到的轮廓区域的形状和面积进行孔洞筛选。

例如,根据二维码的面积,设置面积阈值t0,当检测出轮廓区域的面积contourarea小于t0时,则认为该轮廓区域存在孔洞。又例如,可以根据二维码的形状,设置面积阈值t1和形状阈值t2,当检测出轮廓区域的面积contourarea小于t1并且max(contourwidth,contourheight)小于min(contourwidth,contourheight)*t2时,则认为该轮廓区域存在孔洞。

上式中,contourarea为轮廓区域的面积,contourwidth为轮廓区域的宽度,contourheight为轮廓区域的高度,面积阈值t0、面积阈值t1和形状阈值t2可以根据二维码的形状特征进行设置和调整。

将检测出的包含孔洞的区域作为掩膜(mask),然后将掩膜叠加到二维码阵列图的二值化图像进行腐蚀操作后得到的图像上,填补检测出的那些未闭合的内部孔洞,然后对填充后的二值化图像进行膨胀操作,消除边缘锯齿,得到边界平滑的每一二维码的候选连通区域。

本发明实施例提供的二维码识别方法,根据二维码的形状特征,对二维码阵列图的二值化图像进行腐蚀操作后未闭合的孔洞进行填充,并对填充后的二值化图像进行膨胀操作,得到每一二维码的候选连通区域,使得每一二维码的候选连通区域的内部码元充分闭合,不受二维码阵列图中背景的干扰,提高了二维码分割的准确率。

基于上述任一实施例,图8为本发明提供的二维码识别方法中步骤112的实施方式的流程示意图,如图8所示,步骤112包括:

步骤1121,对每一二维码的候选连通区域进行检测,得到每一二维码对应的目标区域;

步骤1122,基于每一二维码对应的目标区域,对所述二维码阵列图进行分割,得到多个二维码。

具体地,每一二维码的候选连通区域对应的可能是真实的二维码,也有可能是由于图像噪声形成的假性目标,因此需要对这些候选连通区域进行特征分析筛选出有效的目标区域,即每一二维码对应的目标区域。

特征分析的方式包括面积分析和形状分析等。例如,可以对每一二维码的候选连通区域进行canny边缘检测和轮廓检测,并获取各候选连通区域的最小外接矩形。根据检测到的轮廓区域计算候选连通区域的平均面积,用公式表示为:

式中,avg_area为候选连通区域的平均面积,∑region_area为候选连通区域的总面积,n_region为候选连通区域的数量,region_area为任一候选连通区域的面积,可以根据检测到的轮廓区域计算得到。

若任一候选连通区域的面积region_area不满足如下关系式:

avg_area*α≤region_area≤avg_area*β

式中,α和β为面积浮动系数;

则该候选连通区域可能是假性目标所在区域,应该被剔除。

此外,候选连通区域的面积与其最小外接矩形的面积之间的比值越大,则候选连通区域的形状越接近矩形。因此,若任一候选连通区域的面积region_area与其最小外接矩形的面积rect_area之间的比值不满足如下关系式:

式中,μ为形状系数,一般不大于0.5;

则该候选连通区域可能是假性目标所在区域,应该被剔除。

进一步地,计算剩余各个候选连通区域的最小外接矩形的长宽比。此处,由于是对图像数据进行处理,用图像数据得到的宽高比代替长宽比。最小外接矩形的宽高比用公式表示为:

式中,rect_width为图像中最小外接矩形的宽,rect_height为图像中最小外接矩形的高。

若最小外接矩形的宽高比体大,则相应的候选连通区域可能是假性目标所在区域,应该被剔除。例如,若比值大于1.5,则认为该候选连通区域不可能是正方形二维码区域。

通过对每一二维码的候选连通区域进行检测,得到候选连通区域的面积和形状等特征,进行特征分析后剔除假性目标所在的区域,得到每一二维码对应的目标区域。

本发明实施例提供的二维码识别方法,对每一二维码的候选连通区域进行检测,得到每一二维码对应的目标区域,剔除了图像噪声形成的假性目标,提高了二维码分割的准确率。

基于上述任一实施例,图9为本发明提供的二维码识别方法中步骤1122的实施方式的流程示意图,如图9所示,步骤1122包括:

步骤11221,对二维码阵列图中每一二维码对应的目标区域进行像素遍历,确定每一二维码的边界坐标;

步骤11222,基于每一二维码的边界坐标,确定每一二维码的区域大小以及各个二维码之间的间隔;

步骤11223,基于每一二维码的区域大小以及各个二维码之间的间隔,对二维码阵列图进行分割,得到多个二维码。

具体地,由于二维码阵列图中的二维码的数量以及二维码的分布很难提前确定,因此也就无法预先得知各个二维码的大小和各个二维码之间的间隔,也就无法直接分割得到多个二维码。

因此,可以采用像素遍历的方法确定每一二维码的区域大小以及各个二维码之间的间隔,进而对二维码阵列图进行分割。

首先,对二维码阵列图中每一二维码对应的目标区域进行像素遍历,确定每一二维码的边界坐标。边界坐标包括上下边界坐标和左右边界坐标。

例如,在对二维码阵列图中的像素进行遍历之前,可以对二维码阵列图进行取反和归一化操作,即(255-image)/255处理,此处image为二维码阵列图。采用取反和归一化操作的目的是为了减少计算量。处理后,二维码阵列图中背景为黑色,并且只剩下二维码对应的目标区域内像素值为1。将处理后的二维码阵列图分别向水平方向和竖直方向进行投影,统计各行和各列中非0像素的个数,分别用数组表示为row_static、col_static。

然后设置top_y、bottom_y、left_x、right_x四个容器,分别用于存储各行及各列区域块的上、下、左、右边界坐标。逐元素遍历数组row_static,当满足row_static[i]==0且row_static[i+1]>0时,说明该行为二维码区域上边界,将该行坐标索引i存入top_y容器中,当满足row_static[i]>0且row_static[i+1]==0时,说明该行为二维码区域下边界,将该行坐标索引i存入bottom_y容器中;同理遍历col_static数组,当满足col_static[j]==0且col_static[j+1]>0时,说明该列为二维码区域左边界,将该列坐标索引j存入left_x容器中,当满足col_static[j]>0且col_static[j+1]==0时,说明该列为二维码区域右边界,将该列坐标索引j存入right_x容器中。top_y与bottom_y长度一致,对应位置的元素定义的是二维码阵列图中某二维码区域块的上下边界坐标,left_x与right_x长度一致,对应位置的元素定义的是二维码阵列图中某二维码区域块的左右边界坐标。

其次,对二维码阵列图进行分割时,需要得到的是每一二维码在二维码阵列图中的行列位置,而不是具体像素坐标值。因此,可以根据每一二维码的边界坐标,确定每一二维码的区域大小以及各个二维码之间的间隔。

例如,各个二维码之间的间隔可以用每一二维码的区域之间的缺省的行列数来表示。用n_absent_row和n_absent_col数列分别表示检测到的二维码区域块间缺省的行列数,其中也包括首行列之前及末尾行列之后缺省的行列数,则其维度大小分别为len(top_y)+1、len(left_x)+1。计算检测到的二维码的平均尺寸:

avg_code_lengh=(∑(bottom_y[i]-top_y[i])+∑(right_x[j]-left_x[j]))/(len(top_y)+len(left_x))

然后逐个计算检测到的二维码中当前行二维码上边界与上一行二维码的下边界之间的间隔值interval=top_y[i]–bottom_y[i-1],则检测到的两行二维码之间缺省的行数可表示为n_absent_row[i]=(interval+avg_code_lengh)/avg_code_lengh*σ+bias-1,其中len(top_y)≥i≥1,avg_code_lengh*σ表示的是二维码阵列图中两相邻二维码中心之间的距离,用σ系数和二维码的平均尺寸表示该距离值时可避免由于图像缩放或尺寸原因造成的距离值不确定问题,例如,若二维码阵列图是基于冻存盒采集得到的,σ值可近似取值为2,bias参数是为了弥补平均尺寸avg_code_lengh计算偏差及σ经验偏差的影响,其取值可表示为bias=0.2+interval/image_height*0.3,当interval越大时可容忍的偏差越大。

同理,可逐个计算检测到的二维码中当前列二维码左边界与前一列二维码的右边界之间的间隔值interval=left_x[j]–right_x[j-1],两列之间缺省的二维码列数则为n_absent_col[j]=(interval+avg_code_lengh)avg_code_lengh*σ+bias–1;初始行和初始列之前缺省的二维码行列数可表示为n_absent_row[0]=top_y[0]/avg_code_lengh*σ+bias0,n_absent_col[0]=left_x[0]/avg_code_lengh*σ+_bias,_bias根据经验取0.3左右即可;同理末尾缺省的行列数可以表示为:

n_absent_row[-1]=(image_height-bottom_y[-1])/avg_code_lengh*σ+_bias,n_absent_col[-1]=(image_width-right_x[-1])/avg_code_lengh*σ+_bias。

再次,根据每一二维码的区域大小以及各个二维码之间的间隔,对二维码阵列图进行分割,得到多个二维码。

例如,对n_absent_row,n_absent_col逐元素进行累加,即

则检测到的某二维码区域块(range(top_y[i],bottom_y[i]),range(left_x[j],right_x[j]))所对应的行列号(m,n)为m=n_absent_row[i]+i,n=n_absent_col[j]+j,m、n索引值从0开始,二维码阵列图的总行列数(m,n)为:

m=n_absent_row[-1]+len(top_y)

n=n_absent_col[-1]+len(left_x)

按顺序依次组合各上、下、左、右边界坐标(range(top_y[i],bottom_y[i]),range(left_x[j],right_x[j])),从二维码阵列图中分割出该局部块作为掩码块,当该掩码块存在非0前景元素时,说明该区域为二维码目标区域,则从二维码阵列图中分割出该掩码块对应的前景部分作为二维码图像,并根据掩码块的最小外接矩形的旋转角度计算旋转矩,对二维码图像进行仿射变换将其旋转至正放角度,作为最终的待识别的二维码图像,将各待识别的二维码图像和对应的行列号坐标(m,n)一次分别存入code_image_list文件中和code_index_list文件中。

本发明实施例提供的二维码识别方法,对二维码阵列图中每一二维码对应的目标区域进行像素遍历,确定每一二维码的区域大小以及各个二维码之间的间隔,进而对二维码阵列图进行分割,得到多个二维码,分割算法简便,提高了二维码批量识别的效率。

基于上述任一实施例,图10为本发明提供的医用试剂管的二维码批量识别方法的流程示意图,如图10所示,该方法包括:

步骤一、采集图像

在医学研究领域,药物试剂一般存放在带有二维码标签的试剂管中,试剂管成批量地被收纳在冻存盒中,对冻存盒进行图像采集,就可以得到包含二维码阵列的图像。

图像采集的设备包括高拍仪、扫描仪和移动终端等。医学研究领域中,通常采用高拍仪进行图像采集。高拍仪采取从上向下的成像方式,在对镜头下方物体成像的过程中,十分容易受顶部及四周各个方向环境光照的干扰,并且塑料材质的冻存盒很容易产生局部高反光导致部分二维码不清晰或不可见。此外,由于高拍仪镜头支架高度限制只能短距离成像,受透镜物理特性以及镜片组结构影响,广角视场下成像很容易出现桶形畸变,导致中心锐度高边缘锐度低,出现边缘模糊现象。

步骤二、对图像进行预处理并定位提取冻存盒区域

受成像环境和成像设备质量影响,图像可能存在偏色、几何畸变、对比度不足等问题,采用灰度世界法等白平衡算法对图像进行偏色校正、通过标定相机获取相机内参cameramatrix和畸变系数distcoeffs对图像进行畸变矫正、采用直方图均衡化图像增强算法提升图像对比度。由于图像中冻存盒相较于其他背景杂物目标面积更大且具有规则矩形形状,因此可以简单地以轮廓面积和形状特征为依据从图像中定位出矩形冻存盒区域。

具体地,可以将图像转化为灰度图并进行二值化,然后进行canny边缘检测和轮廓提取,计算各轮廓区域面积contourarea以及对应的最小外接矩形面积rectarea,当满足contourarea/rectarea>0.9时说明该轮廓贴合矩形形状,保留这部分轮廓并取其中面积最大的区域max(rectarea)作为冻存盒目标区域。然后,根据其最小外接矩形的旋转角度rotation_angle计算旋转矩阵rotate_mat并进行仿射变换warpaffine,将冻存盒目标区域对应的图像旋转至正放位置,转至正放位置是为了便于后续定位各个二维码位置。最小外接矩形的旋转角rotation_angle是指x轴沿逆时针旋转至最邻近边时所对应的旋转角,满足0<|rotation_angle|<=90度。

为了使冻存盒尽量旋转至最接近的平放状态,当|rotation_angle|<45度时取rotation_angle_t=|rotation_angle|*(-1),当|rotation_angle|>=45度时取rotation_angle_t=90-|rotation_angle|,rotation_angle_t为正时表示逆时针旋转。确定旋转角度后则可计算旋转矩阵:rotate_mat=getrotationmatrix2d(centerpoint,rotation_angle_t,scale),其中centerpoint为旋转图像的中心点,取centerpoint=point(width/2,height/2)即可,scale为缩放比例,取1即可。

获取的旋转矩阵表示为利用该矩阵对二维向量做仿射变换时为

获得冻存盒区域后,为了将二维码前景和背景部分分离,需进行二值化处理。考虑到在不均匀光照影响下冻存盒目标图像内部不同区域的亮度存在较大差异,如果采用全局阈值法进行二值化,很难用单一阈值同时将多个不同亮度区域内的二维码和背景分离开,因此这里主要采用局部阈值法进行处理。局部阈值法将图像划分为多个局部块blockm×n。此处,m和n分别表示图像中横向局部块的数量和纵向局部块的数量。优选地,m=4,n=4。

计算各局部区域内的亮度加权均值,如利用高斯分布函数分配权重,计算加权平均值,然后各局部块分别以对应的均值为依据进行二值化,这使得不同的图像区域可根据亮度不同自适应采用不同阈值进行二值化,可以有效提取出二维码前景部分。

得到冻存盒目标图像后对图像进行局部二值化处理,这主要是考虑到在不均匀光照影响下图像内部不同区域的亮度存在较大差异,如果采用otsu大津法等全局阈值法进行二值化,很难用单一阈值同时将多个不同亮度区域内的前景和背景分离开,采用局部域值法时根据各局部邻域内亮度不同采用不同阈值进行二值化,可以有效保留各局部区域内二维码的细节。局部域值法可表示为adaptivethreshold(src,dst,255,adaptivemethod,thresholdtype,block_size,c),其中src为冻存盒目标图像,dst为处理后的二值化图,adaptivemethod为计算各邻域内阈值所采用的算法,可选择adaptive_thresh_mean_c或daptive_thresh_gaussian_c等方法,分别以邻域内平均值和高斯均值减去偏移值调整量c后作为邻域阈值,邻域块的大小由block_size参数控制,thresholdtype为阈值类型。

步骤三、连通域标记

基于试剂管上二维码的形状特征,对冻存盒目标图像的二值化图像进行腐蚀操作后未闭合的孔洞进行填充,并对填充后的二值化图像进行膨胀操作,得到每一二维码的连通区域。

步骤四、对连通域进行特征分析,筛选二维码目标区域每一二维码的连通区域对应的可能是真实的二维码,也有可能是由于图像噪声形成的假性目标,因此需要对这些连通区域进行特征分析筛选出有效的目标区域,即每一二维码对应的目标区域。特征分析的方式包括面积分析和形状分析等。

步骤五、对二维码目标区域进行定位分割,得到各个二维码

对冻存盒目标图像中每一二维码对应的目标区域进行像素遍历,确定每一二维码的边界坐标,进而确定每一二维码的区域大小以及各个二维码之间的间隔。根据每一二维码的区域大小以及各个二维码之间的间隔,对冻存盒目标图像进行分割,得到多个二维码。

步骤六、识别各个二维码

在识别过程中,针对环境光照和成像质量原因导致的二维码识别困难问题,对各局部二维码图像进行多种图像增强,根据相邻的二维码识别成功所用的图像增强方式对当前二维码进行识别。同时,还采用对多次识别结果进行复合叠加的方案,使得噪声干扰下的二维码也能取得识别信息,有效提升了整体识别成功率。

基于上述任一实施例,图11为本发明提供的二维码识别装置的结构示意图,如图11所示,该装置包括:

分割单元1110,用于对待识别的二维码阵列图进行分割,得到多个二维码;

识别单元1120,用于基于相邻增强方式,对当前二维码进行识别,得到当前二维码的识别结果;

其中,相邻增强方式是当前二维码在二维码阵列图中相邻的二维码识别成功所用的图像增强方式。

具体地,分割单元1110用于对待识别的二维码阵列图进行分割,得到多个二维码。识别单元1120用于根据当前二维码在二维码阵列图中相邻的二维码识别成功所用的图像增强方式,对当前二维码进行识别,得到当前二维码的识别结果。

本发明实施例提供的二维码识别装置,采用图像增强方式对当前二维码进行识别,提高了环境光照不理想和成像质量不高的情况下对二维码的识别成功率,根据二维码阵列图中相邻的二维码识别成功所用的图像增强方式,对当前二维码进行识别,得到当前二维码的识别结果,实现了对二维码阵列图中所有的二维码进行批量识别,避免了逐个对当前二维码对应的多个图像增强结果进行识别,减少了批量识别二维码过程中的识别时间,减小了识别算法复杂度,提高了二维码批量识别的效率。

基于上述任一实施例,识别单元1120包括:

待识别图确定子单元,用于将当前二维码在相邻增强方式下的图像增强结果,作为待识别图;

识别子单元,用于对待识别图进行二维码识别;

待识别图切换子单元,用于若识别成功,则将二维码识别所得的结果作为当前二维码的识别结果,否则将当前二维码在其余图像增强方式下的图像增强结果,作为待识别图;其余图像增强方式为除相邻增强方式以外的图像增强方式。

基于上述任一实施例,该装置还包括融合识别单元,融合识别单元包括:

已知二维码确定子单元,用于基于至少两个二维码阵列图中各个二维码的识别结果,确定在至少两个二维码阵列图中均识别成功的已知二维码;至少两个二维码阵列图是对同一二维码阵列采集得到的;

阵列图对齐子单元,用于基于已知二维码在各个二维码阵列图中的位置,对齐各个二维码阵列图;

阵列图融合子单元,用于融合对齐后的各个二维码阵列图中各个二维码的识别结果,得到二维码阵列中各个二维码的识别结果。

基于上述任一实施例,阵列图对齐子单元包括:

第一距离确定模块,用于以任一二维码阵列图为基准图像,确定已知二维码在基准图像中与基准原点之间的距离;

第二距离确定模块,用于确定已知二维码在其余二维码阵列图中与每一角点之间的距离;

基准原点确定模块,用于若已知二维码与任一角点之间的距离等于已知二维码与基准原点之间的距离,则将任一角点作为其余二维码阵列图的基准原点;

阵列图对齐模块,用于基于基准图像的基准原点,以及其余二维码阵列图的基准原点,对齐各个二维码阵列图。

基于上述任一实施例,分割单元1110包括:

孔洞填充子单元,用于基于二维码的形状特征,对二维码阵列图的二值化图像中经腐蚀操作后未闭合的孔洞进行填充,并对填充后的二值化图像进行膨胀操作,得到每一二维码的候选连通区域;

阵列图分割子单元,用于基于每一二维码的候选连通区域,对二维码阵列图进行分割,得到多个二维码。

基于上述任一实施例,阵列图分割子单元包括:

目标区域确定模块,用于对每一二维码的候选连通区域进行检测,得到每一二维码对应的目标区域;

二维码确定模块,用于基于每一二维码对应的目标区域,对二维码阵列图进行分割,得到多个二维码。

基于上述任一实施例,二维码确定模块包括:

边界坐标确定子模块,用于对二维码阵列图中每一二维码对应的目标区域进行像素遍历,确定每一二维码的边界坐标;

区域间隔确定子模块,用于基于每一二维码的边界坐标,确定每一二维码的区域大小以及各个二维码之间的间隔;

分割子模块,用于基于每一二维码的区域大小以及各个二维码之间的间隔,对二维码阵列图进行分割,得到多个二维码。

基于上述任一实施例,图12为本发明提供的电子设备的结构示意图,如图12所示,该电子设备可以包括:处理器(processor)1210、通信接口(communicationsinterface)1220、存储器(memory)1230和通信总线(communicationsbus)1240,其中,处理器1210,通信接口1220,存储器1230通过通信总线1240完成相互间的通信。处理器1210可以调用存储器1230中的逻辑命令,以执行如下方法:

对待识别的二维码阵列图进行分割,得到多个二维码;基于相邻增强方式,对当前二维码进行识别,得到当前二维码的识别结果;其中,相邻增强方式是当前二维码在二维码阵列图中相邻的二维码识别成功所用的图像增强方式。

此外,上述的存储器1230中的逻辑命令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干命令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的方法,例如包括:

对待识别的二维码阵列图进行分割,得到多个二维码;基于相邻增强方式,对当前二维码进行识别,得到当前二维码的识别结果;其中,相邻增强方式是当前二维码在二维码阵列图中相邻的二维码识别成功所用的图像增强方式。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干命令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1