Just so so
5/27
2017

Data Matrix 解析算法

Data Matrix

Data Matrix 是二维码的一种编码格式,原名Data code,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于1989年发明。

Data Matrix二维条码的外观是一个由许多小方格所组成的正方形或长方形符号,以二位元码(Binary-code)方式来编码。深色代表“1”,浅色代表“0”。

定位图形是资料区域的一个周界,为一个模组宽度。其中两条邻边为暗实线,主要用于限定物理尺寸;定位和符号失真。另两条邻边由交替的深色和浅色模组组成,主要用于限定符号的单元结构,但也能帮助确定物理尺寸及失真。

datamatrix

Data Matrix 检测算法

之前文章我们已经介绍过二维码的解码流程,本篇文章主要介绍Data Matrix Detect 算法,也就是如何从一幅图片中找出符号码的部分。

Data Matrix 不同于有显示定位符的二维码,例如 QR 码。所以定位符号图像的方式较为低效,即从图像中心向四周搜索,直到框住整个符号图像。这种检测方式也限定了图像中心区域必须为符号图像,否则则会检测失败。

检测步骤分为如下几步:

  1. 大致划出符号图像的位置。从图像中间画一个小矩形框,然后依次向四边推行,检测四边上是否有黑色的点,直到每一边都没有黑色的点为止。

    最终检测完四条边就会得到符号图像的大致位置。
    datamatrix2

  2. 找寻符号图像四个顶点。大致范围确定以后就需要确定符号图像四个角的顶点,有了四个角的顶点就可以进行透视变换,符号码图像也就能够取出。首先在大检测框的四个角用斜45度的直线去检测,如下图所示:

    datamatrix3

  3. 确定顶点方位和纬度。
    DataMatrix符号图像边缘的一圈成两个L形,一个L是实线,一个L是虚线。搜索的方法就是沿4条边的直线进行黑白变换次数的检测。黑白变换次数少的就是实线的边,多的就是虚线的边,再去找两个L形的交点,就确定了左下角和右上角这两点,然后再经过两点间距离的比较确定出四个顶点。

    datamatrix4

    纬度就是符号的一边上有多少个模块,计算方法就是去找虚线定位符那一边有多少次黑白变换(DataMatrix的纬度都是偶数,所以要进行误差修正)。纬度计算出来了就可以知道每个模块的宽度,再由此就可以计算出四条边分别有多少个模块。这样就可以计算出符号的长宽比,就能够确定是长方形还是正方形。