收藏 分享(赏)

北京交通大学DSP图像处理课程设计报告.doc

上传人:精品资料 文档编号:8531023 上传时间:2019-07-01 格式:DOC 页数:11 大小:1.40MB
下载 相关 举报
北京交通大学DSP图像处理课程设计报告.doc_第1页
第1页 / 共11页
北京交通大学DSP图像处理课程设计报告.doc_第2页
第2页 / 共11页
北京交通大学DSP图像处理课程设计报告.doc_第3页
第3页 / 共11页
北京交通大学DSP图像处理课程设计报告.doc_第4页
第4页 / 共11页
北京交通大学DSP图像处理课程设计报告.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、DSP 数字图像处理课程设计报告基于 DSP 图像处理的 EAN13 码识别学院:电子信息工程学院班级:电子 1202 姓名:汤世忠(12213048)姓名:王磊(12213050)指导教师:高海林目录1 实验目的 .22 设计背景 .23 设计原理 .24 设计方案 .35 流程框图 .46 算法介绍 .46.1 匹配算法 46.2 识别部分 56.3 显示部分 67 结果分析 .78 遇到的问题 .99 总结 .910 参考文献 1011 感谢 101 实验目的利用 C64x 系列 DSP 处理器及图像采集设备等硬件,用 C 语言编程实现对EAN13 条形码的识别及其输出显示。2 设计背景

2、条码技术在我国起步较晚,但发展非常迅速已广泛用于工业、商业、图书出版等领域。传统的条码识别方法是用光电识读器,通过光在深色和浅色上的反射效果区别条纹的亮暗,然后经过将反射光转换为电子脉冲后使用解码器将其转换成二进制码。然而这种方法会由于印刷的质量受到干扰,况且设备价格昂贵也是其中一个问题。采用数字图像处理来识别处理是一种简单的方法,而且能克服传统方法的不足,具有较强的实用性。3 设计原理EAN-13 是由欧洲的 International Article Numbering Association(EAN)在UPC-A 标准的基础上建立的。是一种数字国际通用符号体系,由数字和条码两部分组成。数

3、字部分由 13 位十进制数组成的数码,从左到右为起始符、左侧数据符、中间分隔符、右侧数据符、终止符,其中右侧数据符的最后一位为检验符。如图 1 所示。起 始 符 左 侧 数 据 符 中 间 分 隔 符 右 侧 数 据 符 终 止 符左侧空白区右侧空白区图 1条码部分用数字“1”来表示条码的一个 “暗”或“条” 部分,而用“0”来表示条码的一个“亮”或“ 空间”部分。这样,数值 1101 就表示一个两个宽度的条( 11) ,跟着一个宽度的空间(0) ,跟着一个宽度的条(1) 。这个在条码中可能被打印如图 2 所示:图 2对于数据符中字符的编码也有区别,我们称中间分隔符左边的为 L 符,右边的为

4、R 符。 L 符的编码存在奇偶集,经常使用“字符集 A”(奇)和“字符集B”(偶)来表示,R 符使用“字符集 C”表示。编码规则如表 1 所示:数 字 字 符 A子 集 B子 集 C子 集0 0001101 0100111 11100101 0011001 0110011 11001102 0010011 0011011 11011003 0111101 0100001 10000104 0100011 0011101 10111005 0110001 0111001 10011106 0101111 0000101 10100007 0111011 0010001 10001008 0110

5、111 0001001 10010009 0001011 0010111 1110100表 1一个 EAN-13 字符使用 7 个元素来描述,包含 2 个条和 2 个空间。任何条或空间的长度都不会超过 4 个元素。唯一的例外情况就是左警戒条和右警戒条(都是 3 个元素)以及中间警戒条(5 个元素长) 。检验符处在条码数字的最后一位,用来检车前面的数值是否正确,可由前面数值计算得来,计算校验位的步骤如下:1) 将最右边一个数位作为“奇数” 位,从右向左为每个字符指定奇数 /偶数位。2) 对所有奇数位上的数值求和,将结果乘以 3。对所有偶数位上的数值求和。3) 对第 1 步和第 2 步计算的结果求

6、和。4) 校验位的数字加上用第 3 步计算的总和数应该能够被 10 整除。5) 如果第 4 步计算的总和数能够被 10 整除,校验位就是“0”(不是 10)4 设计方案首先在屏幕中央上划定一个 200*12 的区域,在识别时将条形码调整至该区域。对该区域进行二值化处理,得到非黑即白的条码图像,便于后续的算法处理。识别算法方面,利用 EAN13 编码的特殊性,可有如下的思路:在 EAN13 编码中,对于同一子集中的码,连续的“0”或“1”的个数的排列就能将该子集中的 10 个数字分辨出来。如 A 子集中的 “0”,它的编码为0001101,我们换一种方式编码,把它看作是 3,2,1,1. 这种编

7、码方式有助于简化我们的算法,因为可以不用考虑具体是“0” 还是“1”,而且使得 A 子集和 C 子集的编码保持一致。这种方式编码的码字均由 4 个元素组成。对条码取了高度为 12 的像素。由于我们要做竖直方向上的累加,这样既能降低条码倾斜带来的影响,又能减小误差。由图像读入的条码,其最小单位的宽度是不确定的。为此,可以将每 4 次变化为一组的数据与模板依次相除,若得到的 4 个数字近似相等,则说明匹配成功,也就识别出了该数字。用计算并比较方差的方法来判断是否“近似相等” 。5 流程框图一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一EAN一一一一一一一一一一一一N

8、OEAN一一rEANYES一一一一6 算法介绍6.1 匹配算法目的:将对所有模板分别相除进行匹配,返回计算所得方差最小的模板的标号,即为该模块代表的数字。int LEFT_TABLE_INT204 = 3,2,1,1,2,2,2,1,2,1,2,2,1,4,1,1,1,1,3,2, /A 子集、C 子集 0-91,2,3,1,1,1,1,4,1,3,1,2,1,2,1,3,3,1,1,2, 1,1,2,3,1,2,2,2,2,2,1,2,1,1,4,1,2,3,1,1, /B 子集 0-91,3,2,1,4,1,1,1,3,1,2,1,3,1,2,1,2,1,1,3 ;intgetSTDVal

9、ue(intmvalues,inttabLen) /*tabLen = 10 或 20*/intrvalue = 0;intsvalues4;intxvalue4;int DX = 0;inti;int j;inttmp;for(i=0;i9?i-10:i; returnrvalue;6.2 识别部分目的:通过逐行逐列扫描像素点,识别出每一个模块的起始和结束,得到一个待匹配的数组并识别,将其存入存放 EAN13 码数组的对应位置。voidrecog()intchg = 0; /记录颜色变化次数intgvn = 0; /记录实际取值次数(每变化一次取值一次)intcst = 0; /记录同色连续

10、像素的数量intprpx= -1; /记录上次的像素取值intgvalue4; /临时记录一组数字int v; /记录垂直取值为深色的次数inti;int j;intrv;chg = 0; /记录颜色变化次数gvn = 0; /记录实际取值次数(每变化一次取值一次)cst = 0; /记录同色连续像素的数量prpx= -1;EAN_INDEX = 0;/for(i=0;iHEIGHT/2?1:0; if(rv=prpx) cst+; else chg+; /变化次数+1 if(chg5 gvalue(gvn-1)%4 = cst; if(gvn%4=0) if(gvn=24) EANEAN_I

11、NDEX%12 = getSTDValue(gvalue, 20);EAN_INDEX+; elseEANEAN_INDEX%12 = getSTDValue(gvalue, 10);EAN_INDEX+; else gvalue(gvn-1)%4 = cst; cst = 1; prpx = rv; 6.3 显示部分目的:将 13 位 EAN13 码在显示屏上显示。void screen()inti,j,k;for(k=0;k12;k+)for(i=0;i20;i+)/行数for(j=intBPixels+k*24;jintBPixels+k*24+24;j+) /像素数/每行*(Uint8

12、 *)(tempYbuffer + i*numPixels + j) = ASCII_BITrEANki*48+j-(intBPixels+k*24)=0?255:0; /方框内偶数行for(i=numLines/2;inumLines/2+20;i+)/行数for(j=intBPixels+k*24;jintBPixels+k*24+24;j+) /像素数/每行*(Uint8 *)(tempYbuffer + i*numPixels + j) = ASCII_BITrEANk(i-numLines/2)*48+j-(intBPixels+k*24)+24=0?255:0; 7 结果分析矿泉水

13、瓶条形码的识别结果如图 3:图 3可以看出,系统能够完全识别并显示。除此之外,为了测试识别准确率,随机抽取了 10 个日常商品的条形码进行识别,结果表示 10 个条形码都能完全识别,识别率 100%,如图 4,5,6,7,8 所示(为了方便显示,只显示了偶场):图 4图 5图 6图 7图 88 遇到的问题1) 针对显示的问题,如果奇偶场不协调处理就会导致显示闪烁。2) 在没有进行检验位判断时输出结果会有误差,由于光线原因会使结果在几个值之间来回交替,添加奇偶检验位判断后只输出正确结果。3) 识别区域在竖直方向上尽量设置的比较小,是为了由此避免由于图像倾斜带来的影响。9 总结这次 DSP 图像处

14、理大作业,我们自选了这个 EAN13 条码识别的题目。其主要难点在于算法与软件,软件与硬件的结合。这个程序是参照网络上一个 Java 实现的 EAN13 码识别的代码来写的,读懂它的算法思想,再搬到我们的 C 语言程序中。调试过程中总是会出现一些不容易察觉的、很小的,但又致命的错误,经过了几天的检查和修改,把这些小错误一一找出来改正,终于在很多人还未着手做大作业时,提前完成了任务。当 stdout 中第一次出现令人惊喜的结果时,那种成就感是难以言表的。后来我们改进了算法,加入了校验计算,提高了准确度。再后来又写了一个函数让它在屏幕上实时显示,更加直观。在这次实验中我们不仅更深入地掌握了 DSP 图像处理的相关知识,还收获了很多乐趣,这样对于学习来说是很好的。10 参考文献1税午阳,周明全等.基于数字图像处理的 EAN13 码识别J.计算机工程与应用.2008,44(26)2 EAN13 SYMBOLOGY:http:/ 感谢感谢 ITeye 社区用户 otom31 提供的算法(Java 实现) 。博客网址:http:/ SEED-VPM642 相关例程以及指导。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报