针对过去在网上阅卷系统中使用条形码对考生的考号进行识别这种方法的费时、费用高等问题,提出使用八字码代替条形码的解决方法。八字码的引进带来一些新的问题,主要是八字码如何识别的问题。针对这一问题,给出八字码如何识别的基本思想,解决在扫描图像不理想的情况下如何实现八字码的有效准确的识别。
关键词:网上阅卷 八字码 八字码识别 图像处理
中图分类号: TP319
1 引言
网上阅卷系统在高考阅卷中的应用越来广,系统中针对考生考号使用条形码识别。条形码必须在考试之前事先由管理考务人员打印出来,并且为每位考生贴在相应的试卷上,这不仅费时而且容易打错打乱,甚至损坏打印机,这样提高考试成本同时降低考务人员的效率。为了降低考试成本,提高工作效率,减轻学生经济负担,我们在平时的普通考试中将考生学号由八字码来代替条形码。应该怎样将八字码代表的考生考号有效地识别出来,并且保证能够准确无误呢? 针对这些问题,我们在本文中讨论了具体的解决方案。
八字码在我们的身边随处可见。例如:电梯中显示楼层的指示灯,电子手表的时间显示,城市交通灯,点钞机前面的指示灯等。这些数字都是由八字码显示出来的,由此可见八字码的应用是非常广泛的。八字码是用来代表0、1、2、3、4、5、6、7、8、9这十个数字的一种方式。从字面意思理解就是一个“8”字形状的图形去掉一些线段即可表示从0到9中的任意一个数字,其中每个数字用八字码表示出来都是唯一的且能被人眼很快的识别出来,这是因为八字码在显示这十个数字的时候,都是按照具体数字的形状来显示的。八字码表示数字的形式与人们手写的数字的形状很相似,符合人们的书写和阅读习惯。也正是因为这点使得八字码在网上阅卷系统中能够得到较好的应用。
2 八字码识别的基本思想
虽然八字码符合人们平时的书写和阅读习惯且对人眼来说有很好的可读性,但是对计算机来说就不是那么好识别了。计算机怎样来识别每个八字码究竟代表哪个数字呢?在下面内容中是将要解决的一个重要问题。
从八字码的形状想到,八字码表示的所有数字之间的区别是:它们表示形式中的笔画是唯一的。每个数字的八字码表现形式都是不同的,都是可以区分的。既然每个数字的八字码表现形式中的笔画都是唯一的,那我们怎样让计算机通过这个区别来识别每个八字码所代表的数字呢? 我们将八字码的每个笔画编一个序号。
我们可以看出数字:
“0”拥有的笔画是: 1, 2, 3, 4, 5, 7;
“1”拥有的笔画是: 1, 3;
“2”拥有的笔画是: 2, 3, 5, 6, 7;
“3”拥有的笔画是: 2, 4, 5, 6, 7;
“4”拥有的笔画是: 1, 2, 4, 6;
“5”拥有的笔画是: 1, 4, 5, 6, 7;
“6”拥有的笔画是: 1, 3, 4, 5, 6, 7;
“7”拥有的笔画是: 2, 4, 5;
“8”拥有的笔画是: 1, 2, 3, 4, 5, 6, 7;
“9”拥有的笔画是: 1, 2, 4, 5, 6, 7;
在研究中发现有几个特殊的数字用八字码表示可能存在两种表示形式,这些数字有:“1”,“6”,“7”,“9”。用图形描述出它们用八字码表示的两种表示形式。
由于特殊数字的八字码表现形式有两种,所以这几个特殊的数字拥有的笔画序列也有两种。结合图3和图2可以看出数字“1”的笔画是: 1, 3或2, 4;数字“6”的笔画是: 1, 3, 4, 5, 6, 7或1, 3, 4, 6,7;数字“7”的笔画是: 2, 4, 5或1, 2, 4, 5;数字“9”的笔画是: 1, 2, 4, 5, 6, 7或1, 2, 4, 5, 6。为了统一八字码的表示形式,我们在网上阅卷系统中将特殊数字的两种表示形式的前一种形式定为标准形式,所以在讨论中只讨论统一的标准形式。其它形式也是类似的。
经过讨论,得出所有数字拥有的笔画。现在将对应的笔画序号建立一个对应的变量串, 如: a1, a2, a3,a4, a5, a6, a7; 并且在某个数字存在对应的笔画时,就将其变量值设置为“1 ”, 否则为“0”。那么上面的所有数字就得到一个不同的变量值串。例如数字:
“0”对应的变量值串是: 1111101;
“1”对应的变量值串是: 1010000;
“2”对应的变量值串是: 0110111;
“3”对应的变量值串是: 0101111;
“4”对应的变量值串是: 1101010;
“5”对应的变量值串是: 1001111;
“6”对应的变量值串是: 1011111;
“7”对应的变量值串是: 0101100;
“8”对应的变量值串是: 1111111;
“9”对应的变量值串是: 1101111;
知道变量对于计算机是最容易识别的东西,所以讨论这些问题当中还缺少最关键的一步,那就是怎么让计算机能将八字码表示的数字识别成变量串呢? 通过图4来说明解决这一关键步骤地方法。
从图4很直观的看到,通过三次对八字码进行扫描(图4 中三条带箭头的线B, C, D 表示三次扫描的路径)就可以得到该八字码所代表的数字的变量串。具体思想是,首先沿B 线代表的扫描路径开始扫描八字码(图像) ,在扫描过程中看笔画1和笔画2是否存在,如果笔画1存在就将a1赋值为1,否则赋值为0;同样如果笔画2存在就将a2赋值为1,否则赋值为0;再沿C线代表的扫描路径开始扫描八字码(图像) ,在扫描过程中看笔画3和4是否存在,如果笔画3存在就将a3赋值为1,否则赋值为0;同样如果笔画4存在就将a4赋值为1,否则赋值为0;最后沿D线代表的扫描路径开始扫描八字码(图像) ,在扫描过程中看笔画5, 6和7是否存在,如果笔画5存在就将a5赋值为1,否则赋值为0;同样如果笔画6存在就将a6赋值为1,否则赋值为0;同样如果笔画7存在就将a7赋值为1,否则赋值为0;就这样我们可以得到每个八字码表示的数字的变量串,即为: a1 a2 a3 a4 a5 a6 a7 。当计算机识别出八字码代表的变量串后,就可以通过匹配变量串,从而就可以得到该变量串代表的数字是什么,这样整个八字码的识别就基本完成。不过在实际的应用中还存在一些其它因素的影响,并不和理论研究中完全一样,下面把系统开发中实际遇到的困难进行分析解决。
3 影响八字码识别的一些问题及解决方法
网上阅卷系统中最关键的设备是扫描仪,试卷通过扫描仪扫描出来的图像的质量直接影响着八字码识别的准确性。例如考号为“2086954163”的八字码理想情况下通过扫描仪扫描出来的效果应该如图5所示。
但是由于考生的填写八字码不规范或者试卷的褶皱或者扫描仪的镜片上有灰尘导致扫描出来的图片的效果往往不是非常理想。如图6就是扫描不理想的图像。
从图中可以看到,大部分八字码图像都不是单像素点,并且还有好些八字码图像是不连续的,这对前面讨论的“分三条路扫描八字码图像中的像素点来确定八字码代表的数字的方法”是一个巨大的威胁,而这些问题大多都是关于图像处理方面的问题。例如,我们可以采用对图像进行“粗化”,这种处理办法可以解决八字码图像连续性问题;接着可以对图像进行“细化”,这种方法可以解决八字码图像单像素问题(即将图像中线条宽度大于1 个像素的线条细化成只有一个像素宽,形成’骨架’) 。这些解决办法确实有效,但是在本篇论文我们想着重介绍的另一种简单且易懂的方法。
此方法是在上面介绍的八字码识别方法的基础上稍作改进而成的。在八字码识别过程中原来采用的是使用B, C,D三路方向扫描图像的像素点来确定该八字码的变量串,而在改进的识别方法中我们在原有的B, C,D三路扫描中每路扫描的上下或左右偏离一个像素点的地方再各加两路扫描。即B, C的偏上一个像素点的地方各加一路扫描,偏下一个像素的地方也同样各加一路; D的偏左一个像素点的地方再加一路,偏右一个像素点的地方也加一路。这个方法的改进使得每路扫描对图像不连续的情况有了很大的改进,只有在出现不连续的地方同时空缺三个以上像素点的情况才会出错。在我们阅卷系统的实际应用中证明了这种方法确实非常有效。
4 八字码识别的具体实现要具体实现八字码识别,就是将上面的方法用代码实现,在下面的实现中我将就B路扫描为例,其余的C路,D路也是类似。
/ /图像在扫描前已经二值化, 0表示有像素点灰度值已经达到门限值
for i : = 0 to Round ( (Width / 2) ) - 1 do
begin
if Image. D IBGetPixel ( i, Ya1) = 0 OR / /B 路扫描,Ya1为B路的纵坐标
Image. D IBGetPixel ( i, Ya1 - 1) = 0 OR / /向上偏一个像素点
Image. D IBGetPixel ( i, Ya1 + 1) = 0 then / /向下偏一个像素点
a1: = 1;
if Image. D IBGetPixel (Width - i - 1, Ya1) = 0 OR
Image. D IBGetPixel (Width - i - 1, Ya1 - 1) = 0 OR
Image. D IBGetPixel (Width - i - 1, Ya1 + 1) = 0 then
a2: = 1;
end;
同样方法可以知道: a3, a4, a5, a6, a7的值,得到了变量串后就可以去匹配八字码代表的数字了。 具体方法如下:
kmparray为整型数组且初始化为{1111101, 1010000,
0110111, 0101111, 1101010, 1001111, 1011111, 0101100,1111111, 1101111};
kmp: = a1 3 1000000 + a2 3 100000 + a3 3 10000+ a4 3 1000 + a5 3 100 + a6 3 10 + a7;
result : = - 1; / /图像效果差导致没有可匹配的情况
for i : = 0 to 9 do
begin
if ( kmp = kmparray[ i ] ) then
begin
result : = i; break; / /返回值即为八字码所代表的数字
end;
end;
5 结束语
本文针对八字码在网上阅卷系统中如何识别这一问题进行详细的论述,分析八码识别的整个思路。八字码在考试阅卷中的使用确实是对过去阅卷系统的一大革命,解决一些实际问题,同时给系统带来了更大的应用空间。八字码识别的准确性和有效性直接关系到考生的切身利益,如何使八字码的识别更加准确有效是值得我们长期研究的一项工作。在今后的研究中,我们将在如何校验八字码识别结果等方面作进一步的研究,以解决准确性这一关键性的问题。
参考文献
[ 1 ]NitzbergM. Shiota T. Nonlinear image filtering with edge and corner enhancement [ J ]. IEEE Trans. on PAM I,1992, 14 (8) : 826~833
[ 2 ] SW Golomb. Run - length encodings [ J ]. IEEE Trans.on Information Theory, 1996, 12 (7) : 399~401
[ 3 ]Ranganathan N. A lossless image comp ression algorithm u2 sing variable block size segmentation [ J ]. IEEE Trans.Image Processing, 1995, 4 (10) : 1396~1406
[ 4 ]Taubman D. High performance scalable image comp ression with EBCOT [ J ]. IEEE Transactions on Image Process2ing, 2000, 9 (7) : 1151~1170