QR 二维码在不影响扫码的情况下,哪些部分可以删除?

论坛 期权论坛 期权     
匿名用户1024   2021-5-15 09:06   6150   5
问题是这样遇到的,在某大神的项目网站上,看到他的头像是以下图片:

我查阅了一些关于QR码原理的资料,大概了解了一下是如何QR码是如何编码的,还有掩码之类的也看了一些。
我做了个小实验,擦去QR码的部分图像,效果如下:
这个码仍然可以正确扫描(应该是QR码一定的容错性吧?)
但再稍微删一点就不能再扫描了。
在只了解一点点QR码皮毛的情形下,我对此有如下猜测:
1.删除的面积有一定上限,超过其容错率便很难扫描。
2.有某些特定区域一丁点也不能删,否则将不能扫描。

我不太明白,这种很大面积的图案是如何嵌入到QR码当中而不影响扫码的?
如果现在要尽可能多的删除这张QR码的内容,那么最多都可以删掉哪些部分,而不影响扫码?

希望对此了解的知友能指点一下~多谢
分享到 :
0 人收藏

5 个回复

倒序浏览
2#
有关回应  16级独孤 | 2021-5-15 09:06:47 发帖IP地址来自
你可以去看下这篇文章 http://cgv.cs.nthu.edu.tw/Projects/Recreational_Graphics/Halftone_QRCodes/
它是一方面让QR code长得像输入图片,另一方面不断用识别库去尝试识别……最后取得平衡

ps. 我也用这个文章的代码生成过头像对应的QR Code...论文作者有提供可执行程序
http://en.wikipedia.org/wiki/Albert_Einstein (二维码自动识别)
3#
有关回应  16级独孤 | 2021-5-15 09:06:48 发帖IP地址来自
QR 二维码一共有40个尺寸,即  21 × 21 的 Version 1 到 177 × 177 的 Version 40,计算公式为
,其中 V 代表 Version,即版本号。

图片截自 QR Code 的标准化文档,中文是自己加上的,有些可能翻译不准确,见谅。
功能图案:
  • 定位标志:分别在三个角,标定一个 QR 码。
  • 定时标志:由深浅两色交替构成,起到了确定坐标的作用,推测应该在大尺寸 QR 码中作用较为明显。
  • 对齐标志:在 QR 码微量畸变的情况下进行矫正
编码区:
  • 格式信息:用于存放一些格式化数据,如纠错级别
  • 版本信息:包含版本信息和纠错相关信息
---------------------------------------分割线---------------------------------------
回到答主的疑问,哪些部分可以删除呢,来实验一下。(使用了微信的扫一扫功能,不知道有没有特殊的工具可以使用)
  • 定位标志必须保持完整,缺少一点就读不出来



像这三张图,均对右上角的定位标志做了处理,结果都扫描不出来,真的是少“一点”都不行。
  • 定时标志
http://mmcheng.net/ (二维码自动识别)
将左侧的定时标志删去,扫描成功。
http://mmcheng.net/ (二维码自动识别)
将两条定时标志均删除后仍然扫描成功。
  • 对齐标志
http://mmcheng.net/ (二维码自动识别)
http://mmcheng.net/ (二维码自动识别)
我将所谓畸变理解为倾斜角,在对齐标志完整的情况下,极限大概是上下左右45度,都能够扫描成功。

尝试将整个对齐标志删除,只有在完全正对的时候才能扫描成功。

----------------------------------基友叫我出门玩啦,待续----------------------------------
4#
有关回应  16级独孤 | 2021-5-15 09:06:49 发帖IP地址来自
首先,「不影响扫码」是一个很模糊的表述。不同的扫码环境、扫码设备、解码算法对二维码的质量要求千差万别。
最理想的情况,二维码经过以下处理,依然可被正确扫码。
  • 三个码眼可以只留“十字”部分。
  • 定时标志可完全删除。
  • 对齐标志可删除大部分,甚至全部删除。
  • 版本信息或者没有,或者有两份。可删除一份,另一份的变动需要在其纠错范围内(不能错3个点以上)。
  • 格式信息有两份,可删除一份,另一份的变动需要在其纠错范围内(不能错3个点以上)。
  • 二维码的数据区域由若干个RS编码的码字组成。每个码字可错误的个数与纠错级别有关。
如下图所示,该二维码的版本为7,纠错等级为L。根据手册,其数据区域每个码字的纠错能力为10字符(最多80比特)。为了防止被社区自动识别二维码,将左上角码眼的中心改为了白色。
非黑色和白色的区域均代表被删除。其中:红色代表码眼区域;黄色代表对齐标志;绿色代表定时标志;浅蓝色代表格式信息;紫色代表版本信息;蓝色代表数据区域。

需要指出,上述图片仅讨论了二维码本身每个点黑白的变化对扫码的影响,而并不讨论每个点形状的变化对扫码结果的影响。事实上,现在大部分扫码算法(以google的二维码开源库zxing为例)在处理数据区域时,基本上只采样小方格中心位置的颜色。因此,数据区域的每个小方格如中心位置颜色不变,就不会影响扫码,这也是Halftone_QRCode的基本原理。如考虑到这点,则上图只需要进一步保留码眼的十字部分、部分对齐标志的十字部分、以及所有剩余数据区域中间的部分不变,剩余部分可以随意变化。


至于如何让一个构造一个二维码,使得它既可以扫,又可以让人眼看,那就是另一个问题了。由于二维码中除了存储的数据之外的部分可填充任意数值(即便标准规范了填充内容),从而通过巧妙构造填充的数据,就可以尝试自定义二维码最终的显示效果,这也是近年来二维码美化工作(以QArt Code为代表)的理论基础。
如下图所示,别看该二维码中间一大片空白,这是一个几乎完全合法的二维码,完全不利用二维码的纠错能力。在它基础之上还可以进一步利用二维码的纠错能力,删除上图所示的部分。(同样为了避免被社区自动识别,将左上角码眼中心涂白了)


5#
有关回应  16级独孤 | 2021-5-15 09:06:50 发帖IP地址来自
简单说就是信息有冗余呗,有纠错码和补齐码。
补齐码就是需要的信息比它可以容纳的信息少,那就加一段补齐码,就是重复11101100 00010001这两个bytes。为什么是这两个,我也不知道
然后是纠错码,有L、S、Q、H四种级别的纠错,通常情况下使用15%的级别,保证条码有轻微破损的时候仍能被读出。其原理大概就是给QR码分区,然后在每个分区加上一段纠错码,二维码的纠错码主要是通过Reed-Solomon error correction 算法来实现,由于鄙人看不懂,请移步QR code spec http://raidenii.net/files/datasheets/misc/qr_code.pdf
6#
有关回应  16级独孤 | 2021-5-15 09:06:51 发帖IP地址来自
一方面是面积有限制,一般擦除的面积肯定不能超出容错比例。

其次就是辅助定位的部分是不能被擦除的,也就是下图所指出的地方:


之前我给赵人希做拼接式二维码的时候,就是把他的URL地址加大容错比例重新生成,再拆成四个小图放微博上,利用QR码的容错原理,让四个小图之间的间隙部分被容错掉就可以了。

做的第一版因为正好校正标识被擦去了一部分,所以识别率不佳,后来稍微挪了一下二维码的位置,让空隙避开了校正标识。


尽管定位和校正标识被擦除对识别的影响非常大,但是也不是完全不能擦除,擦除很小一部分的时候,二维码仍然是可以识别的,只是这些区域被擦除一点点就会带来很大的识别率下降。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:136515
帖子:27303
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP