查看原文
其他

干货|二维码工作原理及美化设计基本要义

JZCreative 2022-07-02

除了干货,其它什么也没有

职场

数据

新媒体

设计

极客

高级二维码定制:021 37218818

(GIF 演示 QR 码识别原理)



昨天我们在《<头号玩家>里有个二维码彩蛋你看到了吗?》文中谈到了一个神秘二维码,很多读者表示为什么长按识别没有用?因为二维码无论生成、复原、美化都需要遵循其本身工作原理。已经模糊的二维码,只有经过专业处理才能还原。



我们也知道,一部分读者尝试过二维码美化,但是也正如昨天《随笔|不会做技术的新媒体人将被陆续淘汰》提到,如果本身你没有深入了解过二维码的技术原理,硬要在像素点上逐个进行加工,那只能“死磕”二维码,浪费大量宝贵的时间。



那么今天不妨跟随我们读一篇非常适合入门的硕士论文。其作者是电子科技大学的一位研究生,全文算法代码我们不粘贴在文章中,如需阅读原论文,下载方式在文末。




二维码识别流程图


一个二维码被识别,其基本流程是这样的





天呐,所以在例如你的微信“滴”的一瞬间,竟然发生了这么多事情!



1.首先,设备要寻像图形识别组件,我们来了解其设计与实现。

1.1确定寻像图形方位

1) 选择图象的反射率最大值与最小值之间的中值确定阈值,使用阈值将图象转化为一系列深色与浅色像素(这就是为什么 JZ 在讲座里一直说,二维码是采用了灰度识别)


2) 确定寻象图形,在 QR 码中的寻象图形由位于符号的 4 个角中的 3 个角上的 3 个相同的位置探测图形组成。每一位置探测图形的模块序列由一个深色—浅色—深色—浅色—深色次序构成,各元素的相对宽度的比例是 1∶1∶3∶1∶1。对本译码算法,每一元素宽度的允许偏差为 0.5(即单个模块的方块的尺寸允许范围为 0.5~1.5,3 个模块宽度的方块的宽度允许尺寸范围为 2.5~3.5)。


a. 当探测到预选区时,注意图像中一行像素与位置探测图形的外边缘相遇的第一点和最后一点 A 和 B(图 3-3)。对该图像中的相邻象素行重复探测,直到在中心方块 X 轴方向所有穿过位置探测图形的直线被全部识别。


b. 重复步骤 a,在图象的 Y 轴方向,识别穿过位置探测图形中心方块的所有象素行。




1.2.确定寻像图形中心直线及探测中心

1) 确定探测图形中心,通过在 X 轴方向穿过位置探测图形中心块的最外层的象素线上 A、B 两点连线的中点连一直线,用同样方法在另一垂直方向上划一直线,两条直线的交点就是位置探测图形的中心。


2) 重复步骤 1,确定其它两个位置探测图形的中心位置。



2.然后,我们来理解一下格式信息探测组件的设计与实现。



如上图,通过位置探测图形找到格式信息可以分为一下几步进行:选择探测图形左上角顶点(x,y)为起点,首先在 X 轴上移动到探测图形中点位置。

1) 通过移动 Y 轴探测得出第一个带状黑色区域长度 d1

2) 继续移动 Y 轴探测得出第一个带状白色区域长度 m1

3) 继续移动 Y 轴探测得出第二个带状黑色区域长度 d2

4) 继续移动 Y 轴探测得出第二个带状白色区域长度 m2


通过计算(x+m1+m2+2*d1+d2,y+m1+m2+(int)(1.5*d1)+d2到定位图形距离(颜色固定为黑白黑)得出第三个带状白色区域长度 m3。


所以格式信息理论 X 坐标为 x+m1+m2+2*d1+d2+m3。格式信息填充规则如图3-3,由于在实际读取中会发生偏差,理论值有可能未达到格式信息区域,而仍旧处于格式信息前面的空白区域,所以通过加上校正偏差值 adjust 校正结果,具体做法为顺序读取格式信息数组如果都为浅色,则通过递增 adjust 值(首次值为 0),重新计算格式信息 X 坐标 x+m1+m2+2*d1+d2+m3+adjust。




3.但日常生活中的二维码, 并不一定是正放的,所以图形符号方位校正组件就有了重大意义,现在我们来理解其设计与实现。


通过符号方位探测算法,主要是解决识别同一图片旋转后的问题。识别后的三个中心点坐标顺序应该为以下为参考的坐上角,右上角和右下角并以此确定符号的方位。这个逻辑比较简单,而且不涉及我们的后期美化问题,所以就不展开了。





4.现在,设备才算刚刚“识别到这里有个二维码”,接下去信息解码组件的设计与实现非常重要。

4.1图形版本尺寸解码。

1) 确定:

a) 距离 D,是左上角位置探测图形中心与右上角位置探测图形中心之间的距离,

b) 两个探测图形的宽度,WulWur



2) 计算符号的名义模块宽度尺寸 X

X=(WUL+WUR)/14


3) 初步确定符号的版本

V = [(D/X) - 10] / 4


4) 如果初步确定的符号版本等于或小于 6,那么该计算值即为版本号。如果初步确定的符号版本等于或大于 7,那么版本信息应按下列步骤译码:

a) 用 7 除以右上角位置探测图形的宽度尺寸 WUR,得到模块尺寸 CPUR

CPUR=WUR/7


b) 见图 3-13, 由 A,B 和 C 找出通过三个位置探测图形中心的导向线 AC、AB。根据与导向线相平行的直线、位置探测图形的中心坐标和模块尺寸 CPUR 确定在版本信息 1 区域中每一模块中心的取样网格。二进制值 0 和 1 根据采样网格上的深色浅色的图形来确定。


c) 通过检测并纠错确定版本,如果有错,根据 BCH 纠错原理,对版本信息模块出现的错误进行纠错。因为纠错编码我们采用 BCH(18,6)编码,具体信息请参考纠错算法的设计与实现一节。用 BCH(18,6)码进行纠错。用数据位作系数的多项式除以生成多项式 G(x)=X12+x11+x10+x9+x8+x5+x2+1。将剩余多项式的系数串附加到数据位串后形成(18,6)BCH 码串。



4.2除此以外,如果干扰较大的话,设备还需要校正图形中心和采样网格,随后才能恢复数据和纠错码字。


网格的每一交点上的图象象素取样,并根据阈值确定是深色块还是浅色块,构造一个位图,用二进制的“1”表示深色的象素,用二进制的“0”表示浅色的象素。译码的顺序则如本文开头 GIF 动态图所描述的顺序逆序进行。



显然


在了解了二维码的真正编码和解码逻辑后,我们发现一个二维码中有多数区域是不允许被改动。通俗所谓的容错率,并不平均分布在二维码的点阵当中。所以当设计师需要美化二维码时,应该记住:


1)将二维码恢复为点阵图状态;

2)无论探测图形如何设计,必需满足两个轴向的标准比例;

3)格式信息探测组件的灰度关系不可更改;

4)版本核对区不可更改;



如果你需要阅读原论文,请点击文末“阅读原文”按钮。



相信以后各位读者在制作艺术化二维码时就可以更好避开雷区了。而美观的二维码,对于新媒体而言可以显著提升用户关注率。最后,我们来欣赏一部分品牌企业的艺术二维码吧,其中一部分是 JZ 设计的。如需定制高级艺术二维码,你也可以致电:


(021)37218818










高级二维码定制:021 37218818


其他你会感兴趣的内容

回复 data下载数据挖掘专业电子书

回复 python了解机器学习热门语言

回复 GitHub看七大顶级生产力工具

回复 红包学习微信红包的并发算法

回复 EXCEL看图表设计的重要原则


H5、平面、视频等数字营销服务请致电

TEL:(021)3721 8818


客户案例:APEC 峰会 | 中国航天科技集团 | 香奈儿 | 肯德基(湖南) | 中国国际航空 | 湖北省电视台 | 河南卫视 | 浙江省人民广播电台 | 三生制药 | 交通银行 | 建设银行 | 真格基金 | 南方周末 | 上海闵行教育学院 | 牛津大学出版社 | 新东方集团 | 伟巴斯特 | 雪佛兰汽车 | 观致汽车 | 雷诺汽车 | TNS 新华信 | 高力国际|第一太平戴维斯|德国莱茵|盖茨基金会|追星集团



抱歉,除了干货,其他什么也没有。



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存