目 录
摘 要
随着现代教育考试的飞速发展,很多考试为了方便,减少阅卷的人工量都采用了答题卡来填涂答案。人们通过图像采集和计算机识别答题卡的方式计算出考生的成绩。
这次毕业设计主要研究的是利用 MATLAB 软件来实现对答题卡识别的系统。它采用光学的方法,通过扫描仪,获取答题卡的数字图像,然后通过 MATLAB 软件对图像数据进行分析和加工,其中主要包括了数字图像的预处理、图像内容的边缘检测、图像的平滑滤波、图像的直线检测、图像的修正、图像的分割和特征提取等内容。最后利用 MATLAB 中的工具箱,通过编程实现答题卡学号和答案的自动识别的系统。
通过MATLAB软件对扫描的答题卡图片进行识别并且计算分值,测试出的分值与真实的分值相对比,完全相同,测试结果说明这个识别系统是可行的。
【关键词】MATLAB、答题卡、图像处理技术、答案识别
Abstract
With the rapid development of modern education examination, a lot of people reduce the amount of artificial marking of sheet to full filling the answer for convenience,. People now calculate the examinee's score sheet through image acquisition and computer identification.
This graduation design mainly studies using MATLAB software to realize the recognition of sheet system, which adopts optical method, through the scanner, to get the digital image of sheet , and then through the MATLAB software to analyze and process image data, mainly including digital image preprocessing, edge detection, image smoothing, image content filtering, image of straight line detection, image correction, image segmentation and feature extraction, etc. Finally we use the MATLAB toolbox to implement sheet student id and automatic identification system of the answers , by programming .
Through the MATLAB software to scan the sheet images to recognize and
calculate , if the score of test are exactly the same by contrast with the true score, test results will show that this recognition system is feasible.
【Key words】 MATLAB;Sheet; Image Processing Technology;Identification of the Answers
在现代教育事业的飞速发展中,考试已经成为现代教育事业中最公平的方式方法,而且也是衡量教与学的唯一方法。通过考试成绩的好与坏,老师和家长可以分析出学生掌握的知识多少和学习情况。从而老师可以了解到自己教学中的不足来改进教学的方式方法,提高教学的水平。学生也可以通过考试了解到自身学习的不足,从而有针对性的进行学习。考试也是进行人才的选拔和评价的重要方法。不论是找工作应聘,还是单位内部的晋升都需要进行考试。
由于考试具有一定的特殊性,而且考试必须要公平公正,当然其中最重要的就是阅卷的准确性。考生做好了题,这时就需要改卷老师阅卷的准确性,这样才能更准确的给考生真实的分数。传统的阅卷方式为流水线的手工作业方式。这样的方式存在很多的问题,因为很容易受到阅卷者的主观因素的影响,从而产生一定的偏差。所以很多人就讨论如何将人为的因素降低到最低,来确保考生的考试成绩的公平公正和准确。
随着考试题型的多样化,特别是选择题在考试中所占据的比重越来越多,比如说像英语考试、公务员考试、企业的心理测试等,都是以选择题为主。由于选择题不具有主观性,所以为了阅卷的方便与准确,人们开始研究如何使用计算机来代替人工进行阅卷。最终出现了基于计算机的答题卡自动阅卷系统
随着计算机技术的飞速发展,阅卷系统也得到了成熟的发展。自动阅卷系统涉及多个学科领域,其中数字图像处理是这个学科中最关键最重要的一部分,它是国内外教育事业发展领域的研究热点之一。
国外是率先采用计算机技术自动阅卷系统,1966 年在美国的杜克大学,
Ellis Page 等团队经过努力研发了第一个自动评分的系统叫做 PEG(Project Essay Grade)[1],它主要是针对于文章的内在特征进行句子意思的分析,将文章的特征进行量化,采用人工评估得分的方式给出结果,从这些结果中找出一系列的特征进行训练,得出一个与之相关的分析性值,用这个值对待批阅的文章进行批阅。在此后还出现了 LSA(Latent Semantic Analysis)系统[2],这个系统最重要的功能就是将每一篇文章看作是一个在空间的向量,向量的每一行表示文档的特征,而每一列表示文档的向量,每一个文本都会产生一个矩阵。再用余弦的方法计算文本向量与将要批阅的文本向量的相似度,最后给出评价。1970 年,欧
美几个发达国家开始研制光标阅读机,在答题卡识别系统方面研究比较成熟的系统是 Remark Office 软件[2],填涂的区域是圆形,这些系统具有较好的经济价值,然而当这些系统投入市场后,得到了大多数使用者的青睐,然而在相关技术方面公布的资料都很少,限制了研究者以及开发者其研究和开发。
在 80 年代初期,我国才开始对自动阅卷系统进行研究。在 1988 年的高考的阅卷中进行了试点,取得了不错的成绩。这个阅卷系统就是山东大学和重庆大学首先研发的。此后 1990 年,国家教育部的考试中心把这项阅卷技术列为教育发展的重要项目,并大力鼓励各科研单位进行研究这个阅卷系统,1992 年已有多个科研单位研制的自动阅卷系统通过国家审核,并用于各种标准化考试中。由于随着计算机科学技术的高速发展和数字图像处理技术的成熟,近年来人们开始研究基于图像处理的答题卡阅卷系统,处理效果也相对比较好,已经有不少公司开发的阅卷系统投入了市场。
数字图像处理起源于 20 世纪 20 年代它的英文名称为“Digital Image
Processing”,当时人们利用电缆,把一副通过数字压缩技术的图片从英国的伦敦传输到了美国的纽约[3]。从那时之后数字图像处理技术经过了一个非常缓慢的发展时期。直到第三代计算机的问世数字图像处理才得到了飞速的发展。经过多年的发展,数字图像处理成为了一门重要工具。在许多的科学领域都发挥着不可替代的作用,如在统计学、生物学、医学等学科。
数字图像处理技术经过近 20 年的发展成为了一门独立的学科。总的来说,
数字图像处理主要研究的内容包括图像分割、图像增强、图像压缩、图像变换、图像复原等。它在工农业生产、航空航天、生物医学工程、交通、军事、媒体、气象、通信等方面有着很广泛的应用[4]。例如在医学方面,能够利用 X 射线图像、显微图像、放射性同位数图像、超声波图像等进行基础研究和临床诊断;在工业生产应用领域[5],可以运用数字图像处理技术装配生产线,进行工业材料和零件的检查等;总之,数字图像处理技术具有相当广泛的应用,它在办公自动化、地球资源探测、工业机器人以及日常生活中充当着越来越重要的角色,对国家的发展和人民的生活有着不可忽略的作用。
随着计算机科学技术的快速发展,计算机功能越来越多样化,应用软件也越来越丰富,而数字图像处理技术也将会迎来一次跨越式的发展,其应用的相关领域也将越来越广泛。
由于现在市场上的答题卡众多,而且不同公司的答题卡都要使用它们公司的阅卷系统。本文主要是研究利用 MATLAB 软件来实现用数字图像处理技术来识别标准答题卡。这个研究主要是针对如何识别答题卡以及如何编写软件系统设计。
课题的研究内容如下:
- 确定答题卡识别系统的整体方案,包括系统整体的框架以及硬件组成、软件开发方案,其中主要是软件方面的开发。
- 确定数字图像处理的算法,包括图像预处理、图像的倾斜级旋转校正、二
值变换等。通过分析和比较多种处理方法,结合图像本身的一些特点最后确定使用 Hough 变换来检测图像中的直线的倾角,并通过旋转图像使图像进行矫正。
- 研究了如何利用 MATLAB 软件对填涂答案区域的识别和对学号区域的识别,
准确有效的实现了对学号的提取和答案的提取,不论是多选还是单选。
- 利用 MATLAB 完成了系统的软件部分的编程设计,最主要的是实现了将答题卡中被填涂的答案提取出来,然后与标准的答案进行比对。通过相关的计算, 算出考生填涂正确的题数,并统计计算后的得分。
- 将统计的得分与实际的得分情况进行对比,并分析原因。
人类通过视觉这一手段来感知这个世界。视觉信息是人类从自然界中获取信息的主要来源,人类通过眼睛获取的信息是听觉和嗅觉无法比拟的。图像是人类视觉的基础,是自然景物的客观反应,是人类认识世界的重要源泉。“图”是物体透射或反射光的分布,或物体自身发出的能量;所谓的“像”是人的视觉系统对于反映在大脑中的图像信息,而形成的印象或者认识[6] 。前者是客观存在的, 后者是人的感觉,图像应该是两者的结合。当我们观察某一景物时,物体所反射的光线进入眼球,在人眼的视网膜上形成像,该像反映了人眼正在观察的客观景物的亮度和色彩,而这些色彩可以当作是一个具有空间坐标的函数。
任何一副图像都可以看作是一个二维函数f(x, y),其中 x 和 y 可以看作为一个二维空间的空间坐标,而在空间中对应的x, y的值f(x, y)的大小可以当作这个图像的灰度值,当 X,Y 和幅值 f 为有限的,离散的数值时,这样的图像就称为数字图像。通过计算机来处理数字图像,将一副图像数字化,每一个坐标,每一个点上都有一个数值,而数字图像就是由这些一个一个的值构成了可见的图像。这些值也可以称为像素。
在处理一副图片时,由于光线和采集图片的设备的问题,会使得想要采集的图像所生成的图片没有理想的中那么好。在将我们需要的图片输入到计算机时, 由于种种原因,图像的画质也会出现一定的退化。比如说,图像产生了偏移,产生了变形,而且有时会变得更加的模糊。所以这时就需要对图片进行预处理。在数字图像处理的预处理中主要有图像的变换、图像的滤波、图像的腐蚀等一些可以有效的增强图片效果的方法。通过这些方法我们就可以得到我们自己想要的图片,而且针对于你需要图片中不同的对象,可以有针对性的对图片进行预处理。所以图像的预处理对于数字图像处理是十分必要的。
众所周知彩色图像是由三原色 RGB 构成的,在 MATLAB 中它是以一个 N*M*3 的数据矩阵构成的。数组中的元素代表了图形中的每个像素的值蓝、红、绿色彩的值。像素的色彩由储存在像素位置上的红、绿、蓝的灰度值得到的组合来确定
[7] 。这样就可以根据红、绿、蓝三中颜色各种不同的组合,总共能够表示出
224 = 16777216种颜色,因此彩色图像又称为 24 位真彩色图像。
对于灰度图像,灰度图像可以表示为是一个矩阵 M,M 中的数值表示了一张图片在一个范围内的灰度值。MATLAB 把灰度图像保存为一个数据矩阵,矩阵中的数值就代表了灰度图片的像素。
将彩色图像变换为灰度图像这种变换被称为灰度变换,灰度变换有很多种, 其中可以分为线性、分段线性、非线性以及其他的灰度变换。
线性灰度变换,可以理解为假定本来的图像f(x, y)的灰度范围是[a, b],但是想通过变换之后的图像g(x, y)将原来的图像的灰度扩大为[c, d],则采用下述公式线性变换来实现:
g(x, y) = ���−��� [���(���, ���) − a] + c (2.1)
���−���
这样的公式可以使曝光不充分的图片中黑色的部分更黑,白色的更白,从而提高图像的灰度对比度。若将公式中的c=0,d=255,则公式可以简化为:
g(x, y) = 255 [���(���, ���) − a] + c (2.2)
���−���
假如灰度图像在 0~M 范围内,其绝大多数的像素的灰度级分布在区间[a,b]内, 然而只有很少数的像素的灰度没有在此区间。
在 MATLAB 中提供了灰度变换的函数,这个函数名字叫做 imadjust 函数, 通过这个函数可以实现图像的灰度化,使对比度增强。其语法格式为:
J = imadjust(I,[L, H], [B, T], bite) (2.3)
其功能是:返回一张由I 图片经过直方图灰度变换调整后的 J。其中[L,H]为初始图像 I 中需要改变的灰度范围,[B,T]指定通过灰度变换后的范围,两者的默认值都为[0,1]。Bite 为通过变换后矫正的量,它的取值决定了两张图片的灰度的映射方式,也就是说决定了是增强高灰度还是低灰度。如果 bite 为 1 则表示这个变换为线性的;如果小于 1,那么这个映射就会对图形的像素值进行加权;如果大于 1,那么通过变换后的灰度值比原来的小。通过函数进行灰度变换后得到的原图与灰度图如图 2.1:
图像平滑滤波处理技术即就是图像的去噪声处理技术,主要的目的是减少图像中的噪声。每张图像都会有噪音,它有很多的噪音源,从系统的外部进行干扰
(比如说电磁波干扰),也有些事来自系统内部的一些东西(比如摄像机的热噪声等)。降低噪声的方法通常在空间域或者在频率域处理,一般的处理技术通常使用低通滤波的手段。常用的可用于图像平滑的模板操作有均值滤波、中值滤波、高斯滤波等。
1、中值滤波
中值滤波是一种非线性的信号处理方法,与其对应的中值滤波器也是一种非线性的滤波器。中值滤波器是 1972 年有 J.W.Jukey 首先提出并应用在一维信号处理技术中,后来又应用在了二维图像信号处理中[5]。
中值滤波基本原理就是把数字图像中一点的值用这个点的一个领域中个各
个的点值得中值来代替,这样就可以让周围的像素越加接近真实值,从而消除了那些孤立的噪声。这种方法通常是采用一个含有奇数个点的滑动窗口,将这个窗口内的像素由大到小或者由小到大的进行排序,计算这个窗口中的平均值,然后用这个平均值来代替那个点。中值滤波通常可以克服线性滤波器比如最小均方滤
波或者均值滤波等滤波方式带来的图像细节模糊,并且对图像扫描噪声最为有效。在 MATLAB 中可以使用 medfilt2 函数来实现中值滤波,在 MATLAB 中的公式
如下:
B = medfilt2(A,[m, n]) (2.4) 其中 A 为需要进行中值滤波的二值图像,B 为通过 medfilt2 函数进行中值
|
二值图像(binary image)也就是认为在一副图像中,这幅图像里面的像素不是黑色就是白色,种图像也可以叫做黑白图像,这幅图像的灰度值并没有中间的灰度值进行过度。人们长期以来都是通过灰度图像来求得一些图像的特征,但是对相对复杂的图像确不能很好的解决,这时通常使用二值图像就可以很简单的求出需要的特征。而且二值图像与灰度图像相比图像简单,信息量较少,所以处理图像的速度更快,成本更低,实用价值更高。
二值图像基本上都是由灰度图像获得的,所以灰度图像与二值图像有着密切的联系。输入一副图像,先要经过灰度处理,得到多值的灰度图像,然后通过阈值处理才能得到二值图像;其次,要得到准确的能反应对象的二值图,还需要进行图像增强处理来改善灰度图像品质,也就是说要得到想要的二值图像就必须要转换为灰度图像。
一副二值图像中所有的像素都只能由 0 和 1 这两个数值来表达,所以在
MATLAB 这个软件中,所有的二值图像都是由一个矩阵来表示,这个矩阵里面的值只有 0 和 1。这两个值对应黑色和白色,这两个可取的值表示打开和关闭,关
闭是表示该像素接近背景像素表示的值,而打开代表该像素在前景图像中。这种操作模式可以更容易地识别图像的结构。
在 MATLAB 软件中提供了将灰度图像转换为二值图像的函数:
I = im2bw(J, N) (2.5)
|
在本章中对通常的边缘检测方法做了一个比较细致的介绍。基本上按照算法提出的时间顺序进行介绍。最后根据研究的需要,最后用了 Hough 变换对图像进行直线检测。
使用电脑来进行数字图像的处理总共有两个目的:其中一个是想要产生更适合人眼识别和观察的图像;另一个是期望能让电脑自动理解和识别输入的图像。不管是为了哪一种目的,数值图像处理中最关键也是最复杂的一项技术就是对包
含有许多不同的图形信息的图像进行分解。图片被分解后的结果那就是图像被分解成为了最小的成分,这些成分都具有图像中的某些特征,他们被称为图像的基元。相对于整个图像,图像基元更容易快速处理。
图像特征是指图像最原始的属性或者特性。其中大部分特性是视觉可以直接感受到的自然特征,比如说图像的亮度,图像的色彩,图像的边缘轮廓或者图像中的直线。但是有些特征是需要通过变换或者测量才能了解到的认为特征,比如直方图,矩阵等。我们可以利用一定的方法将图像分解成我们所需要的特征,这种过程称为图像的分割。
图像的边缘是图像最根本的特性。它是指在一副图像中,图像中的图形与图形之间它们周围的像素的灰度会有一个巨大的变换,这个变化有可能是阶跃的也有可能是屋顶的。边缘是大多数存在于目标与背景之间、对象与对象之间、基元与基元之间。因此,它是图像分割的一个重要特征。
图像的边缘对于一副图片来说具有重要的意义。当我们看一副图片时,人眼 会自动分别出哪个是物体哪个是物体的背景,而物体与背景之间的特征就是边缘, 边缘是一个区域的结束另一个区域的开始。我们可以通过计算机利用图片的这种 特征把图片进行分割。由于检测出的边缘并不是目标的真实边缘。而且实际的物 体是三维的,一副图片就是把三维的投影到二维上去这样必然会造成图片信息的 丢失,再加上拍摄过程中的光线问题和噪声等因素,使的有些边缘不一定能检测 出来,而检测出的边缘自然也不一定代表实际的边缘。图像的边缘有方向和幅度 这两种属性,沿着边缘方向的像素变换十分平缓,而垂直于边缘方向的像素变换 就十分的剧烈。通过这两种特征我们可以用微积分算法来检测,通常使用一阶或 者二阶导数来检测。
本次课题需要进行图片中的直线检测,所以首先需要对图片进行特征的提取, 所以在提取边缘时选取了 Sobel 算子进行边缘检测,但是要提取图片中的直线还需要进行更进一步的变换,所以我采用了 Hough 变换。
2.3.4 Hough 变换法检测直线
Hough 变换是能够将检测出的边缘点连接起来得到边界曲线。那么我们在已经知道了这条曲线的形状之后,Hough 变换就是把这些十分分散的边缘点全部整合起来然后进行曲线逼近,我们也可以把这种变换看作是一种叫做聚类分析的技术。
Hough 变换可以使用两种方法检测直线,一种是利用直角坐标系,另一种是利用极坐标系。
- 利用直角坐标中的 Hough 变换检测直线
在一副图像空间中,经过(x, y)点的直线可以表示为:
y = ax + b (2.6)
其中 a 为斜率,b 为截距,上式可以变换为:
b = −xa + y (2.7)
这个变换就是直角坐标系中对(x, y)点的 Hough 变换。那么如何在 MATLAB 中实现 Hough 变换呢。首先在参数空间中需要建立一个二维累加数组M,数组的第一维的范围就是该直线斜率可能的大概范围,第二维的范围就是该直线截距可能大概的范围,并且在开始时要将数组 M 初始化。然后对于空间中的像素点依次用
Hough 变计算出 a 和 b 的值,而想对应的数组元素M(a, b)加 1,计算结束后, 这个M(a, b)的值就是图像在空间中落在斜率a 和截距 b 的直线上点的个数。
- 利用极坐标中的 Hough 变换检测直线
与直角坐标检测类似,在极坐标中也可以通过 Hough 变换将空间中的直线对应到空间中的点,对于空间中的一条直线,z 表示这条直线距离原点法线的距离,θ表示法线与X 轴的角度,所以该条直线的空间参数方程可以表示为:
z = x sin ��� + ��� cos ��� (2.8)
其中(z,q )定义了一个从原点到线上最近点的向量,这个向量与该直线垂直。考虑一个以参数 z 和θ定义的二维空间。x,y 平面的任意直线对应了该空
间的一个点。因此,x,y 平面的任意直线的 Hough 变换是 z,θ空间的一个点。
现在考虑 x,y 平面的一个特定的点(x1,y1),过该点的直线可以有很多,每一条都对应z,θ空间中的一个点。然而这些点必须满足以 x1 和 y1 作为常量时的等式。因此在参数空间中与 x,y 空间中所有这些直线对应的点的轨迹是一条正
弦曲线,而x,y 平面上的任一点对应了z,θ空间的一条正弦曲线。
如果有一组位于由参数z0 ,qo 决定的直线上的边缘点,则每个边缘点对应了 (z, θ)空间的一条正弦曲线。所有这些曲线必交于点( z0 ,qo )。因为这是它们共享的一条直线的参数。
为了找出这些点所构成的直线段,我们需要建立一个在 z,θ空间的二维直方图,对于每一个边缘点(xi, yi),然后我们将对于该点 Hough 变换对应的 z,θ空间的直方图方格加一,当我们队所有边缘点执行完这样的操作后,包含( z0 ,qo )
的方格将会有局部的最大值。这样就可以检测出图像中的直线。检测出的图像边
|
检测出的图中直线如图 2.5:
图 2.4 图像的边缘检测图
图 2.5 检测的直线图
2.4 图像的旋转
2.4.1 图像的旋转
一般情况下图像的旋转所指的是以图片的中心为旋转的中轴,将图像上的所有的像素都旋转相同的角度,图像经过旋转之后,图像的位置发生了一定的改变, 和平移变换差不多,在图像的旋转改变中,会把转出显示区域的图像截去,可以扩大显示区域的图像范围来显示图像的全部。
假设原始图像的任意一点为���0(���0,���0)经过一定的旋转角度β后得到新的坐标A(x, y)为了表示方便就采用极坐标的方式表示。原始角度为α。
这样旋转变换的图像可以用公式的形式来表示:
x = r sin(��� − ���) = ��� sin ��� cos ��� − ��� cos ��� sin ���
x = r cos(��� − ���) = ��� cos ��� cos ��� − ��� sin ��� sin ��� (2.9) 在 MATLAB 中提供了可以旋转的函数,函数名称叫做 imrotate,这个函数的
公式用法为:
J = imrotate(I,angle,method,‘Corp’) (2.10)其中参数 method 用于指定的插值的方法,可选的值为“nearest”“bilinear”
“bicubic”缺省值为“nearest”,参数 angle 代表旋转的角度。一般来说,旋
|
图 2.6 旋转前的图与旋转后的图
本课题提出采用扫描仪将答题卡扫描成图像,然后传输进计算机。然后使用计算机的 MATLAB 软对扫描图像进行预处理、图片修正、提取特征、最后识别考生填涂的答案,并计算该考生的分数。
扫描仪是一种高科技产品,他是继鼠标和键盘之后的第三代计算机输入设备。扫描仪涉及到多个学科领域,比如说光、机电一体化等学科,是现代社会将各式 各样的图片一数字方式输入计算机的重要工具。扫描仪的功能十分强悍,它可以 将最原始的图片、相片、胶片到各种文字资料都可以用扫描仪扫描进入计算机, 从而实现对这些图形的数字化处理、管理、使用和储存等。与现代的光学字符识 别系统 OCR 相互配合还可以将扫描的文字资料转换成文本形式,让人们修改和打印。
而它的工作原理也十分复杂在这里简单的介绍,自然界的任何物体都会吸收一定的特殊的光波,然而没有被吸收的光波将会被反射。扫描仪就是通过这样的原理成功的实现了对稿件和资料的读取。扫描仪在工作的时候会发出一股非常强烈的强光照射在稿件上,在强光照射的过程中没有被稿件吸收的光线会自动的映射到扫描仪内部的光学感应器上。光学感应器接受到了这些光学信号后,将这些信号输送到模数(A/D)转换器上,模数转换器将这些信号转换为计算机可以识别的信号,然后通过驱动程序就会将信号转换成为在显示器上可以看见的图像。
通过扫描仪成像得到的图像,输入到计算机中,计算机可以通过软件对图片进行处理、分析和显示等。有些图像所占用的内存较多,所以对图像处理量就大, 复杂性也就高,所以对用软件处理图像的系统对计算机的速度、内存、功能都有较高的要求。
本次课题需要对扫描后的答题卡进行处理和识别,而识别答题卡里面的选项则是本次课题最关键的也是技术方面最困难的地方。本次设计主要采用 MATLAB 软件,MATLAB 是 MathWorks 公司出品的商业数学软件,是一个跨平台多功能的科学计算环境。
将近 20 年的发展,MATLAB 软件的核心被更进一步完善和强化,这时许多其
他工程领域的专业人员也开始使用 MATLAB 软件开发的专门辅助工具,这些辅助工具后来便成为 MATLAB 的各式各样工具箱。MATLAB 在图像处理方面十分出色, 它不但在一般数据可视化软件都具有的功能(比如二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其他软件没有的功能(比如色度处理和光照处理等)MATLAB 同样表现出了出色的处理能力。
答题卡的图像预处理是这个设计的前期处理,是保证之后的设计能顺利进行的前提。将答题卡通过扫描仪生成数字图像后,在 MATLAB 中输入图像,显示出原图像。这时要对答题卡进行数字图像处理,首先要进行灰度变换形成灰度图像, 因为在做图像处理时灰度图像就是基础。生成的灰度图像如图 3.2:
图 3.2 答题卡的灰度图
通过比较选取变换范围为[0.3,0.7]的灰度图最理想。变换成为灰度图后在对图像进行二值化,生成的答题卡二值图如图 3.3:
图 3.3 答题卡二值化图
图片经过改变不同的二值化的阈值,通过比较得出当阈值为 0.5 时比较有利于之后的图片处理。因为这样的到的图片可以使学生在填涂答案是即使不是特别的完美也能识别涂黑的部分。经过二值化后就要对图像进行滤波,去除图片中出现的噪点,让图片看起来更平滑。滤波后的图如图 3.4:
图 3.4 答题卡中值滤波图
由于答题卡在用扫描仪扫描图片进入电脑时,可能会出现答题卡的偏移,这时就需要对答题卡进行校正,所以需要对答题卡进行直线检测。将答题卡进行边缘检测是为了可以更明确提取出答题卡的特征,由于提取答题卡图像的直线,需要对答题卡进行 Hough 变换。所以要对答题首先进行一次边缘检测。使用的函数为 edge 函数得到的图像如图 3.5:
图 3.5 答题卡边缘检测图
对图像进行 Hough 变换后通过检测图像变换后的峰值点,然后通过
houghlines 函数的计算可以检测出图像中的直线,在本课题的答题卡中可以检测出 4 根直线。如图 3.6:
图 3.6 答题卡直线检测图
检测出了答题卡中的直线之后,需要对答题卡进行校正。如果要对图像进行校正首先就要知道图片倾斜了多少度,通过计算图片中的直线的斜率就可以就算出图片的倾斜的角度。然而图片中有4条直线如何选取呢?这时就需要在MATLAB 中进行编程计算出哪条直线是图片中最长的直线,每条直线的两端的点可以通过
lines(k).point1;lines(k).point2求得。利用两点之间直线距离公式可以计算出两点之间的距离,选取距离最长的那条直线。
通过求得最长的直线,这时我们可以通过求直线斜率的公式:
K = −
−
在MATLAB中���2 − ��� 分别对应了lines(Index1).point1(2)和
(3.1)
lines(Index1).point2(2)而���2 − ��� 分别对应了lines(Index1).point1(1)和
lines(Index1).point2(1)其中Index1就是最长的那条直线。通过MATLAB的计算我们可以算出图像中最长的直线的斜率K=7.1145。然后根据斜率对角度的变换, 可以求出图像的倾斜的角度。计算角度的公式为:
rotate = atan(K) 18 pi (3.2)
通过公式可以求出rotate=81.990度,计算出了角度之后就是要对图像进行旋转校正。在MATLAB的工具箱中提供了图像旋转的函数为imrotate函数。由于求出了旋转角度所以通过旋转后的图像如图3.7:
通过对图像进行分析,我们可以定位出学号的位置,通过剪切可以剪切出学号的图像。在 MATLAB 中可以通过剪切图像的函数 imcrop 来剪切图像,函数调用格式为:
J = imcrop(I, X, Y, WIDTH, HEIGHT) (3.3)
其中 J 为剪切后返回的图像,I 为需要剪切的图像,X,Y 为在 I 图像中需要剪切的图像的起始坐标,而 WIDTH 和 HEIGHT 为图像从起始坐标开始到需要剪切的像素距离。剪切后的图像如图 3.8:
图 3.8 剪切的学号图和学号二值图
将剪切后的图像进行分析对比。通过多次实验方法的比较最终选取了比较可靠的识别方案。为了将把黑色填涂了的区域识别出,并且要识别出所涂的学号数字,首先要进行一次学号数字的定位。经过多次的比较,本次课题采用了两次
|
答题卡识别系统最关键的部分就是识别考生的答案,只有能准确的识别出考生的答案,才能算是代替了人工进行阅卷。在识别答案时考虑到了试卷题型的多
样性所以进行了两种题型的选择,单选题和多选题。在单项选择题方面,识别的方案与学号的识别方案基本一致,也是将填涂单项选择题的区域进行分割剪切。由于在标准答题卡中,选择题号是由上往下,而且每 5 道题形成一块区域,则在进行分割剪切时,就需要进行多次循环,一个填涂区域的大模块的位置坐标的循环。当第一次循环过后分割出第一块 5 道题的区域,然后再进行二次循环,这时
就可以把剪切出来的 1 至 5 题的区域在进行更细小的分割,分割出那需要填涂的一个个小方块。剪切的单选答案图如图 3.10:
图 3.10 剪切的单选答案图
这时需要计算哪块小方格被填涂并记录相应的题号,所记录填涂的答案的方法与记录学号的方法一至。在 MATLAB 中由于记录 A,B,C,D 进入数组中不方便计算,于是我用 1,2,3,4 来代替了 A,B,C,D。由于单向选择有 45 到题,所以通过计算 MATLAB 程序计算出的单项选择答案如图 3.11:
图 3.11 单项选择答案图
计算出了单选选择答案后,需要与标准的答案进行对比。这时需要建立一个二维的数组来储存标准答案。在程序中建立了一个名字叫做 bzdaan 的数组,只有一行却有多个列,来记录每一道单项选择题的标准答案。记录好考生填涂的答案和标准答案后,这时通过一个 FOR 循环一一对比,如果相同的就让计数器加一如果不同计数器就不加。循环结束后就可以统计出考生选对的答案,然后将统计
好的数字乘上每道题的分数就可以计算出考生单选题的得分。
然而在进行多项选择题时就比较复杂,因为单选选择题,只有三种情况,一种是选错,一种是选对,还有一种就是不选。然而在多项选择题中,除了以上三种情况以外还有就是少选,和多选的情况。所以在进行答案的识别提取时候就需要对所编的程序要求更高。在识别答案时方法与单选题的方法都是一致的都是将多项选择的区域进行分割剪切,剪切的多项答案图如图 3.12:
图 3.12 剪切的多选答案图
然后再统计。然而在记录考生所选的答案的时候就需要改变程序,在第二层
FOR 循环时将 num2 自加一,这样才能实现一道题的多个答案的记录。
通过多次试验和比较,最后在设计程序来记录答案时,添加了一个二维的数组这个二维数组与单项选择的数组不一样,这个数组横纵坐标都是一个变化的数值,在程序中叫做 dzimu(num3,num2)。通过循环和计数,统计出了一个矩阵数组来记录多项选择的答案。多项选择答案图如图 3.13:
图 3.13 多项选择题答案图
求出多项选择题答案后,需要建立一个标准的多项选择题的答案库,来进行对比。建立一个数组 bzdaan 来记录标准答案,由于有多选和漏选所以,在进行对比时首先将两个数组相减,建立一个 cha 的数组来储存相减的数值。如果是正确的答案相减就为零,如果是漏选相减后的差值就为正数,反之多选的就为负数。通过这样的相减后,可以得出,如果一行里面负数则这道题就为零分,如果这道题里面有正数则表示这道题答案没有选完。详细程序见附录。
计算出单选答案的个数后乘以相应的每道题的分数,就可以得出考生单项选择的答案。在程序中记录单选的分数函数为 fenshu1。在统计多选的得分时,有两种情况,一种是全选对的得全分,选对部分的得一部分的分,而选错的不得分, 通过程序设计可以分别得出选错的个数和选对一部分的个数。让多选的总得分减去选错的个数乘以相应的分数,再减去选对部分的个数乘以相应的分数就可以求出该考生的得分。考生学号和成绩图如图 3.14:
图 3.14 考生的学号和成绩图
经过多次反复检查程序并运行,程序没有出错而且程序基本能实现要求。在对系统进行测试时,运行环境:主机为 DELL 笔记本,主频为 2.1GHz,内存为 2GB,操作系统为 window7 64 位旗舰版,MATLAB 软件版本为 7.6.0。
扫描了 20 份填涂好的学生答题卡。只填涂了 60 道题,其中前 45 道题为单
向选择题,每道单选题的分值为 1 分。后 15 道题为多项选择题,每道多项选择
题的分值为 3 分,少选只得 2 分,而选错或者是多选不得分,这样总分为 90 分。
通过程序识别每张答题卡为 5 秒,识别 20 张答题卡用时 100 秒,识别准确率 99%, 识别的考生学号和对应成绩如表 4-1。
表 4-1 考生的成绩对比及结论
考生学号 | 识别成绩 | 真实成绩 | 结论 |
080602201 | 66 | 66 | 准确 |
080602202 | 80 | 80 | 准确 |
080602203 | 78 | 78 | 准确 |
080602204 | 76 | 76 | 准确 |
080602205 | 67 | 67 | 准确 |
080602206 | 58 | 58 | 准确 |
080602207 | 87 | 87 | 准确 |
080602208 | 56 | 57 | 不准确 |
080602209 | 77 | 77 | 准确 |
080602210 | 88 | 88 | 准确 |
080602211 | 64 | 64 | 准确 |
080602212 | 57 | 57 | 准确 |
080602213 | 78 | 78 | 准确 |
080602214 | 57 | 57 | 准确 |
080602215 | 76 | 76 | 准确 |
080602216 | 82 | 82 | 准确 |
080602217 | 73 | 73 | 准确 |
080602218 | 71 | 71 | 准确 | ||
080602219 | 70 | 70 | 准确 | ||
080602220 | 69 | 69 | 准确 |
举例对应的识别考生学号和成绩如图 4.1:
|
图 4.1 识别的考生学号和成绩图
每张答题卡的学号和该学号所对应考生的分数都与实际的分数一致。只有少部分答题卡在填涂时由于力度等原因填涂不清晰,所以未能识别出答案,系统自动识别为漏选。
此识别系统与现有的其他识别系统运行速度相差不大,准确率也比较高,所以
该系统是可行的。
本此设计是利用 MATLAB 软件来对答题卡的填涂答案进行识别。提出了答题卡识别系统的总体方案,并介绍了扫描仪的功能,介绍了数字图像处理的许多基础知识,数字图像处理的特征提取,介绍了 Hough 变换的直线检测方法,阐述了系统硬件体系和软件体系的具体设计方案。最后从理论到实际,编写出了识别程序,并进行了验证和分析。本次设计主要研究的内容总结如下:
- 提出了基于 MATLAB 的答题卡识别系统的总体设计方案。
- 对识别系统的各组成部分进行了详细的论述。包括硬件部分的分析和选用,软件部分的开发。
- 对 Hough 变换检测直线检测进行了详细的介绍,并且还介绍了图像的校正技术。
- 对于本次设计的研究内容,选用了合适的方法来识别出答题卡的答案。
- 讨论和分析了通过此系统识别出的答题卡的答案和实时考生填涂答案的区别。通过比较分析得出了此系统的识别准确度十分高。但是对于一些特殊的情况还不能分别,基本能识别考生的答题卡的功能。并为系统的进一步研究打下了良好的基础。
参 考 文 献
- Dave Whittington,Helen Hunt.Approaches to the Computerized Assessment of Free Text Responses [EB/OL].
- 王艳芹. 答题卡自动阅卷系统的研究与开发[D]. 济南大学.2012.
- 冈萨雷斯.数字图像处理( MATLAB 版)[M]. 北京: 电子工业出版社.2006.
- 夏良正. 数字图像处理(第二版)[M].南京:东南大学出版社.2005.
- 余成波.数字图像处理及 MATLAB 实现.重庆:重庆大学出版社.2003.6
- 姚敏等.数字图像处理(第二版).北京:机械工业出版社.2012.4
- 杨杰,黄朝兵等.数字图像处理及 MATLAB 实现.北京:电子工业出版社.2010.2
- 李朝辉,张弘.数字图像处理及应用[M].北京:机械工业出版社.2004.
- 郑广,周万珍,王健霞.基于图像识别的客观题阅卷研究[J].仪器仪表学报.2006.
- 阮秋琦.数字图像处理学 [M].北京:电子工业出版社.2001.陈盖凯.基于
Hough 变换的直线检测 [J]. 西安: 西安航空技术高等专科学校校报.2007(03):36-38
- 王丰.基于图像识别的客观答题卡识别研究[J].科技信息.2008(28)
- 陈杨,陈荣娟,郭颖辉.MATLAB6.X 图像编程与图像处理[M].西安:西安电子科技大学出版社.2002
- 岳永哲,李然.图像处理计算在阅卷系统的应用[J].电脑知识与技术.2007.
- 刘海波.Visual C++ 数字图像处理技术详解[M].北京:机械工业出版社.2010.
- 杨青燕,彭延军.基于灰度图像的答题卡识别技术[J].山东科技大学学报.2009。
- 王爱玲,叶明生等.MATLAB R2007 图像处理技术与应用[M].北京:电子工业出版社.2008.1
- 戚飞虎.模式识别与图象处理[M].上海:上海科学技术出版社.1998
- 张强,王正林.精通 MATLAB 图像处理[M].北京:电子工业出版社.2009
- 黄玥.复杂背景下的灰度图像分割算法研究[D].太原理工大学.2008
- 闫成新,桑农,张天序.基于图论的图像分割研究进展[J].计算机工程与应用.2006(4):11-14
- 白香芳.手写答题卡识别系统的研究与实现[J].济源职业技术学院.2013
(8):63-64
- 贺兴华、周媛媛、王继阳等.MATLAB 图像处理[M].北京:人民邮电出版社.2006.96~100
- 陈盖凯.基于 Hough 变换的直线检测 [J].西安:西安航空技术高等专科学校校报.2007(03):36-38
- 邓炜,王军安,杨永生.计算机图像识别系统的实际与实现[J].计算机应
用研究.2000.
- 张学海.车牌字符分割方法研究与实现 [D].西南交通大学.2010.
- 李安安.几种图像边缘检测算法的比较与展望 [J].大众科技.2009.
- 钱智明.图像分割方法研究.激光[D].国防科技技术大学.2010.
- 于万波.基于 MATLAB 的图像处理(第二版).北京:清华大学出版社.2011.6
- 闫敬文.数字图像处理(MATLAB 版).北京:国防工业出版社.2011.8
- 高展宏,徐文波.基于 MATLAB 的图像处理案例教程.北京:清华大学出版社.2011.4
- 张强,王正林.精通 MATLAB 图像处理(第二版).北京:电子工业出版社.2012.4
- 王艳芹. 答题卡自动阅卷系统的研究与开发[D]. 济南大学.2012.