(zxing.net)二维码Data Matrix的简介、实现与解码

摘要:
数据矩阵二维条码是一种矩阵二维条码。DataMatrix符号由规则排列的深色和浅色方形模块组成。每个正方形模块都是一个基本单元,每个基本单元都被编码为一位数据。暗模块表示“1”,亮模块表示“0”,然后使用一串特殊排列的暗模块来描述码字信息,然后将其排列成矩阵符号,最终形成DataMatrix条形码。DataMatrix条形码编码是将物品信息转换为数据码字流,由二维条形码符号表示和实现。DataMatrix二维条码图像识别主要包括图像预处理、条码定位、采样和解码。

一、简介

Data Matrix 二维条码原名Datacode,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于1989年发明。Data-Matrix二维条码是一种矩阵式二维条码。

Data Matrix符号由规则排列的深浅色正方形模块构成,每个正方形模块就是一个基本单元,每个基本单元又被编码为一比特的数据。数据区的四周是探测图形,用于条码符号定位和确定条码结构信息。探测图形的四周是空白区,用以将条码符号与背景分离。

探测图形是一个模块的宽度,是数据区的边界,其中全部由深色模块组成的两条邻边构成了一个“L”形实线边缘,“L”对面由交替的深浅模块组成的两条邻边又构成了虚线边缘。探测图形主要用于限定符号的单元结构,也可用于确定符号的物理尺寸,以及解决符号定位和失真等问题。

数据区是由多个正方形深浅模块所组成的正方形区域,信息储存方式是深浅模块的不同排列组合.以二进制码方式来编码数据,因此计算机可直接读取。深色模块代表“1”,浅色模块代表“0”,再利用成串的特定排列的深浅模块来描述码字信息,再排列成一个矩阵式符号,最终形成Data Matrix条码。

因此,任意Data Matrix符号可以由四个部分构成:探测图形中“L”形的两条实线边缘、探测图形中“L”形对面的两条虚线边缘、被探测图形包围的数据区、条码符号四周的一个模块宽度的空白区。

Data Matrix条码编码是将物品信息转化成为数据码字流,用二维条码符号来表示实现。允许输入数据信息多样,可以是数字和字母,可以是常规的文字、字符信息,还可以是多媒体信息,如声音、图片、指纹等。

Data Matrix分为ECC 000-140和ECC 200两个大类,ECC 000-140具有四个等级的卷积纠错功能,ECC 200则通过Reed—Solomon纠错算法计算纠错码,根据符号的不同尺寸得到不同的纠错码。两类符号的外形区别在于,ECC 000-140符号的右上角为深色模块(仅为奇数),尺寸从9*9至49*49。ECC 200符号的右上角为浅色模块(仅为偶数),尺寸从10*10至144*144,若为长方形则从8*18至16*48。ECC 200应用较多。

Data Matrix编码包括三个部分:一是将数据信息流通过最优的编码规则转换成数据码字;二是根据Reed-Solomon算法以及响应的纠错要求,在数据码字的基础上生成纠错码字,数据码字加上纠错码字及可能需要的若干填充字符,构成编码后的码字流;三是将按照标准模板将单元模块放置到矩阵中,并加入探测图形,生成Data Matrix二维矩阵码符号。

Data Matrix二维条码图像的识别主要包括图像预处理、条码定位、采样解码。

Data Matrix条码图像预处理:首先对采集到的彩色图像灰度化;然后对灰度图像进行滤波去噪;选取适当的阈值进行图像二值化;最后进行边缘提取。

条码定位:区域初定位、边缘检测、旋转校正、精确提取、条码分割(网格)。

Data Matrix条码解码识别:根据采样网格,将深浅模块转换为“1”、“0”矩阵;去除探测图形,提取出数据区,并得到条码尺寸和版本信息;调用模块放置矩阵恢复正确顺序的码字流;再确定数据码字和纠错码字,并进行条码数据的检错纠错;最终恢复原始数据,正确解码输出。
二、实现

        public ActionResult DATA_MATRIX()
        {
            DatamatrixEncodingOptions options = new DatamatrixEncodingOptions();
            options.DefaultEncodation = Encodation.ASCII; /*指定默认编码确保内容符合编码值,否则将抛出异常。 标准值:Encodation.ASCII*/
            //options.MinSize = new Dimension(100, 100);  //指定最小条形码大小 当SymbolShapeHint.FORCE_NONE时 有效
            //options.MaxSize = new Dimension(150, 120); //指定最大条形码大小 当SymbolShapeHint.FORCE_NONE时 有效
            options.SymbolShape = SymbolShapeHint.FORCE_SQUARE; //条码形状
            options.GS1Format = true;    //是否符合GS1 不会用
            options.Width = 150;    //图片宽度
            options.Height = 150;    //图片高度

            BarcodeWriter writer = new BarcodeWriter();
            writer.Format = BarcodeFormat.DATA_MATRIX;
            writer.Options = options;

            //如需设置图片为其它颜色,使用此段代码
            //BitmapRenderer renderer = new BitmapRenderer();
            //renderer.Foreground = Color.Black;
            //renderer.Background = Color.White;
            //writer.Renderer = renderer;

            Bitmap bmp = writer.Write("123456789");
            MemoryStream ms = new MemoryStream();
            bmp.Save(ms, ImageFormat.Png);
            ms.Flush();
            ms.Position = 0;
            return File(ms, "application/x-png");
        }

测试图像如下:

   (zxing.net)二维码Data Matrix的简介、实现与解码第1张

三、解码

点击查看

免责声明:文章转载自《(zxing.net)二维码Data Matrix的简介、实现与解码》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ZYNQ 7020学习笔记之PL侧普通信号中断PS的实验Android开发学习路线图下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

利用栈实现四则运算表达式求值----先将中缀表达式转换成后缀表达式,然后再求后缀表达式的值

利用栈实现四则运算表达式求值,附Python代码中缀表达式和后缀表达式 平时用到的标准的四则运算表达式就叫做中缀表达式,例如“9 +(3 - 1) * 3 + 10 / 2)”,特点是运算符在数字中间; 后缀表达式就是一种把运算符放在数字后面的形式,“9 3 1 - 3 * + 10 2 / +”即为上例中缀表达式对应的后缀表达式形式,后缀表达式还有一个特...

OFDM通信系统的MATLAB仿真(2)

关于OFDM系统的MATLAB仿真实现的第二篇随笔,在第一篇中,我们讨论的是信号经过AWGN信道的情况,只用添加固定噪声功率的高斯白噪声就好了。但在实际无线信道中,信道干扰常常是加性噪声、多径衰落的结合。今天我们准备再进一步,让信号经过多径瑞利衰落信道。在这种信道条件下,信号具体是怎么怎么变化的呢?下面将讲解系统仿真的各个部分以及实现多径衰落的方法。 注意...

使用 matplotlib 绘制条形码

使用 matplotlib 绘制条形码 源码及参考链接 效果图 代码 import numpy as np import matplotlib.pyplot as plt code = np.array([ 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1,...

Opencv+Zbar二维码识别(标准条形码/二维码识别)

使用Opencv+Zbar组合可以很容易的识别图片中的二维码,特别是标准的二维码,这里标准指的是二维码成像清晰,图片中二维码的空间占比在40%~100%之间,这样标准的图片,Zbar识别起来很容易,不需要Opencv额外的处理。 下边这个例程演示两者配合对条形码和二维码的识别: #include "zbar.h" #include "cv.h"...

SymPy-符号运算好帮手

SymPy-符号运算好帮手 SymPy是Python的数学符号计算库,用它可以进行数学公式的符号推导。为了调用方便,下面所有的实例程序都假设事先从sympy库导入了所有内容: >>> from sympy import * 4.1 封面上的经典公式 本书的封面上的公式: 叫做欧拉恒等式,其中e是自然指数的底,i是虚数单位,是圆周...

用C#实现的条形码和二维码编码解码器

本篇介绍可以在C#中使用的1D/2D编码解码器。条形码的应用已经非常普遍,几乎所有超市里面的商品上面都印有条形码;二维码也开始应用到很多场合,如火车票有二维码识别、网易的首页有二维码图标,用户只需要用手机扫描一下就可以看到手机版网易的网址,免去了输入长串字符的麻烦。 条形码的标准: 条形码的标准有ENA条形码、UPC条形码、二五条形码、交叉二五条形码、库德...