提要:很多公司为商业宣传之需,常将企业LOGO加入二维码中,但如果LOGO遮挡区域足够地大,二维码就变得无法识别。那么,有没有一种办法将上述区域预先“抠空”出来(以便专门放置LOGO),而其他区域则专门来放置二维码的有效数据呢?——这就是本文想探讨的问题。

本文重点探讨的是二维码的高级应用及改进,其主要的思路是通过掩码等手段,提前对二维码生成进行改进

由于二维码通常是黑白方块型的,人眼无法直接识别,但为了商业和宣传的需要,很多公司都乐意将自己的LOGO标识加入到二维码中,以更方便直接识别。

为了便于理解,先比较以下两图:

       

图1   未加LOGO的彩色二维码              图2  加LOGO后的彩色二维码

但一旦LOGO加入到二维码中特别是LOGO足够显眼而遮挡住二维码本身而影响其本身的可识别性时,问题随之产生。下图就标识出了上面所加LOGO所遮盖的二维码区域。

图3  LOGO所遮盖的二维码区域示意

我们可以想像,如果LOGO遮挡区域足够地大,二维码就变得无法识别。那么,有没有一种办法将上述区域预先“抠空”出来(以便专门放置LOGO),而其他区域则专门来放置二维码的有效数据呢?——这就是本文想探讨的问题。

众所周知,为了增加QR码阅读的可靠性,最好均衡地安排深色与浅色模块。应尽可能避免类似“位置探测图形”的位图1011101出现在符号的其他区域。

为了满足上述条件,应按以下步骤进行掩模:

1)掩模不用于功能图形;
2)用多个矩阵图形连续地对已知的编码区域的模块图形(格式信息和版本信息除外)进行XOR操作。XOR操作将模块图形依次放在每个掩模图形上,并将对应于掩模图形的深色模块的模块取反(浅色变成深色,或相反);
3)对每个结果图形的不合要求的部分记分,以评估这些结果;
4)选择得分最低的图形。

下表给出了掩模图形的参考(放置于格式信息中的二进制参考)和掩模图形生成的条件。掩模图形是通过将编码区域(不包括为格式信息和版本信息保留的部分)内那些条件为真的模块定义为深色而产生的。所示的条件中,i代表模块的行位置,j代表模块的列位置,(i,j)=(0,0)代表符号中左上角的位置。

图4   掩模图形参考及条件

图5   QRCode的八种掩模方案

图6  掩模结果(版本1符号的所有的掩模图形,用掩模图形参考000到111的掩模结果)。

下图为掩模过程:

图7  符号的掩模过程

这些掩模方案的特征是黑点与白点呈形状的均匀地几何分布。将它们与原有图案进行异或操作后,掩模后的图像会对原有图像有明显的改进,有利于更好地识别。

罚点记分:

在依次用每一个掩模图形进行掩模操作之后,要通过对每一次如下情况的出现进行罚点记分,以便对每一个结果进行评估,分数越高,其结果越不可用。在下表中,N1到N4为对不好的特征所罚分数的权重(N1=3,N2=3,N3=40,N4=10),i为紧邻的颜色相同模块数大于5的次数,k为符号深色模块所占比率离50%的差距,步长为5%。虽然掩模操作仅对编码区域进行,不包括格式信息,但评价是对整个符号进行的。

最终,应选择掩模结果中罚分最低的掩模图形用于符号掩模。

图8   罚点记分表

从上表可以看出,该罚点记分方法有一定的人为性,特别是N1到N4为对不好的特征所罚分数的权重(N1=3,N2=3,N3=40,N4=10)。有人利用统计学中的方差来解决此类通用问题,其方法是:对每小块的黑点与白点数进行统计,若与期望的平均分布的值相差越大,则其越不可用。其采样的样本越多,采样窗口越小,所获得的数据就越精确。根据上述八种掩模方案的均方差,对计算结果进行比较,最终选取最优掩模。

类似这样:
double CompareVariance(bool[][] matrix)
{
  int S=0;

for(int i = 0; i < matrix.Length; i++)
    for(int j = 0; j < matrix[0].Length; i++)
      if(!(matrix[i][j]^matrix[i][j+1])) S++;

for(int j = 0; j < matrix[0].Length; i++)
    for(int i = 0; i < matrix.Length; i++)
      if(!(matrix[i][j]^matrix[i][j+1])) S++;

double s = S/(2n(n-1));

return s;
}

为了实现本文所述的上述目标,我们在掩码实施前对二维码的生成方案进行改进,提前根据需要预留特定位置给LOGO标识。

鉴于篇幅太长,请看后续:

QRCode二维码生成方案及其在带LOGO型二维码中的应用(2) http://blog.csdn.net/johnsuna/article/details/8525743

QRCode二维码生成方案及其在带LOGO型二维码中的应用(1)相关推荐

  1. QRCode二维码生成方案及其在带LOGO型二维码中的应用(2)

    QRCode二维码生成方案及其在带LOGO型二维码中的应用(2) 原文:QRCode二维码生成方案及其在带LOGO型二维码中的应用(2) 续前:QRCode二维码生成方案及其在带LOGO型二维码中的应 ...

  2. QRCode二维码生成方案及其在带LOGO型二维码中的应用

    很多公司为商业宣传之需,常将企业LOGO加入二维码中,但如果LOGO遮挡区域足够地大,二维码就变得无法识别.那么,有没有一种办法将上述区域预先"抠空"出来(以便专门放置LOGO), ...

  3. Zxing实现二维码生成和解析,可带logo

        在项目中使用zxing生成二维码提供项目支撑(ZXing是一个开源Java类库用于解析多种格式的条形码和二维码),其余SwetakeQRCode.BarCode4j等等工具可去了解. 简单介绍 ...

  4. Py之qrcode:调用python的qrcode库两种方式生成二维码、带logo的二维码

    Py之qrcode:调用python的qrcode库两种方式生成二维码.带logo的二维码 目录 python编程实现生成二维码 1.第一种方式-纯文本 2.第二种方式-带logo

  5. Golang使用qrcode生成二维码,以及生成带logo的二维码

    添加并引用依赖 go get github.com/boombuler/barcodeimport ("github.com/skip2/go-qrcode" ) 1.生成字节形式 ...

  6. vue 中生成带logo的二维码vue-qr(可换背景) 利用qrcode生成二维码

    vue 中生成带logo的二维码 这里运用了一个插件 vue-qr npm install vue-qr --save <template><div><vue-qr :c ...

  7. java二维码生成-谷歌(Google.zxing)开源二维码生成学习及实例

    java二维码生成-谷歌(Google.zxing)开源二维码生成的实例及介绍  这里我们使用比特矩阵(位矩阵)的QR码编码在缓冲图片上画出二维码 实例有以下一个传入参数 OutputStream o ...

  8. zxing生成带logo的二维码

    倒Zxing依赖 implementation 'cn.bingoogolapple:bga-qrcode-zxing:1.2.1' 代码段 import android.graphics.Bitma ...

  9. Android Studio 生成二维码、生成带logo的二维码

    1.生成二维码: 2.生成logo的二维码: 一.引入依赖 首先在libs文件目录下放进jar包zxing.jar,要下载zxing.jar就点击链接:下载zxing.jar(记得点击"Cd ...

最新文章

  1. C语言比较字符串长短
  2. 【CSS进阶】CSS 颜色体系详解
  3. Java Web - Struts2基本执行流程
  4. MYSQL 查看当前用户与数据库版本
  5. VC调试信息输出 TRACE宏
  6. 2020年旷世校招JAVA岗笔试第二题
  7. Jquery中获取选中的select的值
  8. 【数据结构与算法】之深入解析“买卖股票的最好时机III”的求解思路与算法示例
  9. x265-common.h
  10. 献给 Python 开发人员的 25 个最佳 GitHub 代码库!
  11. IDEA配置码云Gitee的使用详解
  12. WebApi系列(从.Net FrameWork 到 .Net Core)
  13. 基础选择器之通配符选择器(CSS、HTML)
  14. iPhone 11 820-01523 N104手机电路原理图+位号图
  15. android微信表情导出来的,微信表情怎么导出 如何批量备份微信表情
  16. Linux安装阿里yum源
  17. ETL工具kettle实现数据同步
  18. stable diffusion webui安装部署教程
  19. 支付清结算体系详解(17)
  20. 「文末送书」如何让数据分析不脱离业务?

热门文章

  1. qt-everywhere 交叉编译安装
  2. 后缀数组的基数排序实现
  3. 什么是webhook?
  4. 义乌个体工商户怎么办理收汇结汇流程有哪些
  5. 关于深度学习批量处理的一些小Tips(python)
  6. Ubuntu下编译最新版本全志开源FEL模式工具sunxi-tools
  7. 彩票开奖系统PHP,彩票开奖API接口_免费数据接口 - 极速数据
  8. 程序员可以为钱工作,但别为钱卖命
  9. 好的关卡离不开优秀的团队
  10. 【第169期】想做游戏策划,我建议学学与游戏无关的东西