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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 原文:QRCode二维码生成方案及其在带LOGO型二维码中的应用(1) 提要:很多公司为商业宣传之需,常将企业LOGO加入二维码中,但如果LOGO遮挡区域足够地大,二维码就变得无法识别。
原文: QRCode二维码生成方案及其在带LOGO型二维码中的应用(1)

提要:很多公司为商业宣传之需,常将企业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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
存储 搜索推荐 算法
分享一个在线二维码生成器(基于qrcode.js开发)
一种二维码扫描与生成的工具, 它可生成个性化二维码, 支持文本、网址、图片、短信、电话等格式及主题,提供融合码功能
222 1
|
7月前
|
自然语言处理
二维码美化指南:从Logo到文字,轻松制作专属二维码
草料二维码提供基础的二维码美化设置,包含Logo、颜色、码点码眼、容错、添加文字等设置。
126 0
|
7月前
|
小程序 JavaScript
微信小程序长按识别图片二维码功能
微信小程序长按识别图片二维码功能
441 0
|
编解码 文字识别 JavaScript
VUE element-ui之百度OCR证件识别,组件内证件照转码解码识别身份证照文字
VUE element-ui之百度OCR证件识别,组件内证件照转码解码识别身份证照文字
2224 0
VUE element-ui之百度OCR证件识别,组件内证件照转码解码识别身份证照文字
|
开发工具 计算机视觉
配置zbar识别二维码(转载)
原文地址:http://blog.csdn.net/dcrmg/article/details/52108258  二维码解码器Zbar+VS2012开发环境配置 Zbar条码解码器是一个开源的二维码(包括条形码)解码器,可以识别来至于视频流,图像文件、手持扫码器和视频设备(如摄像头)等二维码识别,支持EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, QR Code(二维码)等常用编码方式的条形码/二维码。
2546 0
|
Java
带圆角LOGO的QrCode二维码实时生成
最近工作中经常要用到QrCode二维码,研究了一下,写了个带圆角LOGO的JAVA实现,QrCode之所以能在中间放个LOGO图标,是因为编码时的信息冗余。
2081 0
29使用QRcode方式生成二维码
29使用QRcode方式生成二维码
207 0
29使用QRcode方式生成二维码
|
移动开发 JSON 前端开发
如何利用Qrcode制作一个二维码生成器?
玲琅满目的二维码在我们的都市和朋友圈中随处可见, 很多平台都提供了定制二维码的服务, 那么作为一名程序员, 我们如何自己实现一个简单的二维码生成器呢? 接下来笔者就来带大家一起利用Qrcode实现一个二维码生成器.
334 0
|
JSON 前端开发 Java
如何在线生成二维码?
说到二维码,我相信大家每天都会用到,尤其是在手机支付的场景,使用频率极广。 实际上二维码在1994年的时候就已经诞生了,由 Denso 公司研制而成,只是那个时候使用范围还不是很大。 早期的二维码由于很容易通过技术方式进行伪造,因此很少有企业愿意去使用他,随着技术的不断迭代和更新,二维码的安全性更进一步得到了提升,从而使得更多的企业愿意使用这项新技术,例如当下的移动支付,还有微信互推,扫码出行等等,极大的方便了网民们的购物、社交和出行! 在实际的业务开发过程中,二维码的使用场景开发也会经常出现在我们开发人员的面前,我们应该如何去处理呢,今天小编就带着大家一起深入的了解一下它的技术实现过程
如何在线生成二维码?
|
安全 JavaScript 前端开发
JavaScript 技术篇-如何实现在线logo网站制作后的logo去水印,免费制作无水印logo方法
JavaScript 技术篇-如何实现在线logo网站制作后的logo去水印,免费制作无水印logo方法
535 0
JavaScript 技术篇-如何实现在线logo网站制作后的logo去水印,免费制作无水印logo方法