石鑫华视觉论坛

 找回密码
 注册会员
查看: 201|回复: 0

[原创] 断针条码识别

[复制链接]
  • TA的每日心情
    慵懒
    昨天 10:09
  • 签到天数: 3411 天

    连续签到: 13 天

    [LV.Master]2000FPS

     楼主| 发表于 2024-6-14 10:47:51 | 显示全部楼层 |阅读模式 来自:广东省东莞市 电信

    注册登陆后可查看附件和大图,以及购买相关内容

    您需要 登录 才可以下载或查看,没有账号?注册会员

    x
    断针条码识别
    image1.png
    断针条码视频号
    断针条码B
    Label打印比较常见的一种打印机是针式打印机,这些标签通常用在产品的货物信息、物流信息等标识上。这些标签通常会包含文字和条码信息。而对于针式打印机打印的条码,最可怕的问题就是打印机的针断了。断针后条码则会断开。而且这种断开方式,不是和条码的条垂直的,而是和条码的条平行的。这样就会造成本来是一个宽的条,被分割成了两个或多个窄的条,又或者是窄的条的数据就没有了。这样打印出来的条码信息就会出错了。断针对于文字、图案等信息的相对影响要小一些,因为对于文字、图像来说,少一些信息,整体上还是可以识别读取的,至少对于人眼来说并不会有太多影响。但是条码不一样,条码本身人眼不具备直接读取的能力,是需要机器视觉或扫码枪来识别的。但是如果因为断针,条码数据本身就不对了,那就会造成无法读取或读取错误的情况。条码遇到这种问题通常比较难解决,因为条码并不具有校正功能,不像二维码还有校正功能,即使少了部分信息也仍然可以读取。
    image2.jpeg
    断针的物流标签上的条码
    上图就是断针的物流标签,可以看到其中有多处断针的情况:
    image3.png
    断针位置
             其中最左边“塘”字处是断两根针,所以断开的间距更大一些。其他位置都是断一根针的,断开的间距要小一些。从断开的位置来看,上面的最大的条码中,很多个粗的条被分割成了多个细的条,而中间位置的细条则因为断针变得更细更淡,都快要看不到了。
    image4.png
    被断针分割的条码
    这种断针条码实际上是比较难识别的。如果算法上没有什么过人之处,就很难读取到了。当然,如果算法上进行一些优化或针对具体的条码类型进行适配(如code128的条码是3+3空格式编码的,共128ASCII字符),那么也是可以读取的,但是稳定性可能不太理想。对于当前的图像可能能读到,但是如果另外再有一个断针的,如上面图像上,连续断三针、四针的,那么可能一个条直接就没有,这时也再优化可能也不会有结果了。
    image5.png
    NI视觉助手中识别断针的条码
    上面的图像中共有2个条码,编码类型都是Code128类型的。下面一个比较小的条码没有受到断针的影响,断针刚好都在空处,条码能准确识别。而上面的一个比较大的条码则没有这么好运了,多处的条被断针分割开了,这里虽然也识别到了,但是条码类型是错误的,被认为是Codabar条码,读取的结果则是错误的,分数仅有815分。
    对于上面的这种断一根针或两根针的条码,可以考虑使用形态学来处理一下,将条膨胀变大以填充断针的影响,如使用膨胀、或开、适当开等方法来处理。但是这里的膨胀,也只能膨胀刚好能填充断针,而不填充正常的空,如果将正常的空也膨胀填充了,那也是无法读取的。
    image6.png
    提取颜色平面-将彩色图像转为灰度图像
    条码识别函数本身是可以读取彩色图像的,但是形态学函数只有灰度图像和二值图像的,所以这里先将彩色图像转换为灰度图像。
    image7.png
    灰度形态学-
    对灰度图像做形态学开运算,大小是5,结构元素则是六边形。
    image8.png
    读取断针的Code128条码
    形态学后,断针的影响比较小了,再使用条码读取函数来识别条码,这时这个条码就可以读取了。从上面的图像看到,条码类型是Code128,数据也是正常的,分数是1000满分。
    上面的这种效果,也只能是对当前的这个图像勉强可以识别,并不具有普遍适用性,例如将开操作的大小设置为7以上时,则无法正常读取:
    image9.png
    形态学开操作大小7
    形态学大小7时,空被条完全占据,多个条已经连成一个区域,这时是无法读取的:
    image10.png
    形态学开操作大小7时无法读取条码
    对于形态学填充断针的位置,也可以考虑使用滤波器来处理,例如中值滤波器:
    image11.png
    中值滤波器-滤波器大小是7*3
    image12.png
    滤波器方法的条码读取
    因为使用滤波器后,中间的细条已经比较淡了,所以在条码读取时,定位条码功能中的最小边缘强度将默认值的75改为30,这样才能读取到条码,不然无法读取。
    上面的这些方法,仅对当前的图像有作用,如果换一幅图像可能就无法读取了。例如直接改一下图像分辨率,就可能无法读取了。所以不具有通用性,就算当前的图像能读取,其他的图像也不一定能读取,稳定性肯定是不太理想的。所以,对于这种断针的打印机,那还是换个打印头比较理想,不过好像那种好的条码打印机的打印头还不便宜,斑马的打印头要好几千一个。
    断针条码图像和视觉助手脚本(2020版)
    断针条码的识别.7z (335.28 KB, 下载次数: 4)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册会员

    本版积分规则

    LabVIEW HALCON图像处理入门教程(24.09)
    石鑫华机器视觉与LabVIEW Vision图像处理PDF+视频教程11种全套
    《LabVIEW Vision函数实例详解2020-2024》教程-NI Vision所有函数使用方法介绍,基于NI VISION2020,兼容VDM21/22/23/24

    QQ|石鑫华视觉论坛 |网站地图

    GMT+8, 2024-12-22 20:05

    Powered by Discuz! X3.4

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表