二维码解码部分_第1页
二维码解码部分_第2页
二维码解码部分_第3页
二维码解码部分_第4页
二维码解码部分_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

zxing源码分析zxing源码分析——QR码局部2023-07-1017:16:03|||Java代码构造:zxing源码的构造还是比较清楚的,有关QR码的代码主要在以下几个package中。Java代码中有生成QR码的代码,在C++代码中是没有生成局部,只有解析局部。其中qrcode中是编解码的接口,外部代码通过这两个类来进展QR码的编解码。detector是用来在摄像头抓取的图像中检测出QR码的那局部,并将其提取出来。这局部代码是解码的关键,也是可以进展优化的局部。decoder是依据QR码的编码标准将之前detector中提取出的QR码符号进展解码操作,将图像解析为真实的信息。QR码解码流程:11、将图像进展二值化处理,1、0代表黑、白。2、查找定位符、校正符,然后将原图像中符号码局部取出。〔detector代码实现的功能〕3、对符号码矩阵依据编码标准进展解码,得到实际信息〔decoder代码实现的功能〕二值化:zxing中条码的二值化都是使用Binarizer实现,一维码使用getBlackRow方法,二维码的getBlackMatrix方法。Binarizer有两个生成类,GlobalHistogramBinarizer和HybridBinarizer;这两个类对getBlackMatrix方法的实现有不同,HybridBinarizer中的实现对于某些条件下的图像有些特别的处理,临时没有看懂,这里只介绍GlobalHistogramBinarizer中二值化的方法。二值化的关键就是定义出黑白的界限,我们的图像已经转化为了灰度图像,每个点都是由一个灰度值来表示,就需要定义出一个灰度值,大于这个值就为白〔二值化的关键就是定义出黑白的界限,我们的图像已经转化为了灰度图像,每个点都是由一个灰度值来表示,就需要定义出一个灰度值,大于这个值就为白〔0〕,低于这个值就为黑〔1〕。在GlobalHistogramBinarizer5行〔掩盖整个图像高度〕,每行取中间五分之四作为样本;以灰度值为X轴,每个灰度值的像素个数为Y轴建立一个直方图,从直方图中取点数最多的一个灰度值,然后再去给其他的灰度值进展分数计算,依据点数乘以与最多点数灰度值的距离的平方来进展打分,选分数最高的一个灰度值。接下来在这两个灰度值中间选取一个区分界限,取的原则是尽量靠近中间并且要点数越少越好。界限有了以后就简洁了,与整幅图像的每个点进展比较,假设灰度值比界限小10。提取符号码:这局部是解码的关键局部,解码力量的凹凸也主要表达在这里〔不过我感觉二维码本身设计的就比较好,对图像扭曲变形的纠错力量比较高,所以代码局部对这方面的处理就比较少〕。这局部的目标是从像素为单位的原始图像中提取出符号码局部,并转换为模块为单位的符号码矩阵。将二值化之后的矩阵交给Detector,其detect方法就是接口方法。调用这个方法就会返回取好的符号码矩阵。下面具体介绍detect方法所做的工作:11、查找定位符查找定位符是FinderPatternFinder这个类来实现的。在图像中每隔iSkip就采样一行,intiSkip=(3*maxI)/(4*MAX_MODULES);在这一行中将连续的一样颜色的像素个数计入数组中,数组长度为5位,即去找黑\白\黑\白\黑的图像〔如开头检测到黑色计入数组[0],直到检测到白色之前都将数组[0]的值+1;检测到白色了就开头在数组[1]中计数,以此类推〕55位中像素个数是否比例为1:1:3:1:1〔可以有50%的误差范围〕,假设满足条件就说明找到了定位符的或许位置,将这个图像交给位置,将这个图像交给handlePossibleCenter方法去找到定位符的中心点,方法是先从垂直方向检测是否满足定位符的条件,如满足就定出Y轴的中心点坐标值,然后用这个坐标值去再次检测水平方向是否满足定位符条件,如满足就定出X轴的中心点坐标值。至此就找到了一个定位符的中心坐标。依据上面所说的步骤找出全部三个定位符的中心坐标,接下来开头定位三个定位符在符号中的位置,即左上〔B点〕、左下〔A点〕、右上〔C点〕三个位置。先通过两两之间的距离定出哪个是左上那一点〔左上那点到其他两点的距离应当相差不远〕,然后通过计算BA、BC向量的叉乘定出AC两点。22、查找校正符通过ABC三点的坐标计算出校正符的可能位置,然后交给AlignmentPatternFinder去查找最靠近右下角的那个校正符,查找方法与查找定位符的方法根本一样,假设找到就返回校正符的中心坐标,假设没有找到也没关系,解码程序可以连续。3、透视转换,生成最终矩阵找到了三个定位点和一个校正符的坐标〔校正符没有找到可以用一个计算值来代替〕,符号图像的位置就已经确定了,现在要进展图像变形,建立起以模块为单位的符号矩阵与原图像之间的关系,使用的方法是GeorgeWolberg写的DigitalImageWarping一书中PerspectiveTransform方法〔54-56页〕。转换关系确立了就将矩阵〔以模块为单位的符号矩阵〕中每一个点对应到原图像中的点,去看该点是黑是白,并将0、1置填充到矩阵中。这样就生成了最终的符号码。QR符号码:有了符号码矩阵就依据QR码的编码标准去进展解码。这局部功能是Decode类实现的。先猎取版本信息,然后猎取到格式信息,从格式信息中取得纠错等级。然后去读码字,读码字的方法很简洁,从右下角开头,两列为单位,从最终一行开头,先向上读,读到顶端再向下,这样依次

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论