目录
一、背景意义
研究答题卡识别软件的设计与开发,集成了图像分割、模式识别等领域的功能模块,涉及计算机图像处理的一系列知识。通过图像处理技术,系统能够识别答题卡图像的答案选项,再通过输入正确答案的答题卡并与之对照,进而对学生答题卡进行判别并计算出分数。本案例侧重于图像识别方面的实现,应用了图像校正、模式识别等方面的算法。
二、理论基础
答题卡自动阅卷系统通过获取答题卡图像作为系统输入,并通过计算机处理、自动识别填涂标记,存入数据库完成阅卷。在图像数字化的过程中,受设备、环境等因素的影响,答题卡图像的质量在一定程度上下降,影响自动阅卷的准确率,甚至导致无法正常阅卷。因此,要对所获取的图像进行一系列的预处理,滤去干扰、噪声,做几何校正、彩色校正等操作,并进行二值化处理,以确保后续步骤能顺利进行。
2.1 图像二值化
彩色图像经过灰度化处理后得到灰度图,每个像素都仅有一个灰度值,该灰度值的大小决定了像素的亮暗程度。对灰度图像进行二值化处理,也就是说各像素的灰度值只有0 和1两个取值,用来表示黑白两种颜色,这样可以大大减少计算的数据量。
进行二值化的过程中,阈值的选取是关键,阈值选取方法可以分为全局和局部两种,不同考生填涂答题卡的深浅度往往不同。如果采用由用户指定阈值的方法,则可能会产生对每张答题卡都需要进行阈值调整的要求,而且在光照不均匀等因素的影响下往往会出现目标区域二值化异常的现象。采用局部平均阈值法来自动确定阈值,当像素点的灰度值小于阈值时,则将该点的数值置为0, 否则将数值置为1 。
2.2 倾斜校正
答题卡图像的倾斜校正一般分为两步:第一步,查找倾斜角度;第二步,进行坐标变换,得到校正后的图像。其中,常用的倾斜角度查找方法有两种: 一种是利用Hough 变换来找出倾斜角度;另一种是利用角点检测来找出倾斜角度。
Hough 变换作为一种参数空间变换算法,直线和其他参数化形状检测的重要工具。Hough 变换具有较强的稳定性和鲁棒性,可以在一定程度上避免噪声的影响,后续研究将极坐标引入Hough 变换,使这种方法可以更加有效地用于直线检测和其他任意几何形状的检测。Ballard 提出了非解析任意形状的R表法,将Hough 变换推广到对任意方向和范围的非解析任意形状的识别,这种方法被称为广义Hough 变换,论文链接:“Generalizing the Hough transform to detect arbitrary shapes”。
直线
y
=
m
x
+
b
y=mx+b
y=mx+b可用极坐标表示为:
r
=
x
c
o
s
(
θ
)
+
y
s
i
n
(
θ
)
r=xcos (θ) + ysin (θ)
r=xcos(θ)+ysin(θ)
(
r
,
θ
)
(r, θ)
(r,θ) 定义了一个从原点到该直线最近点的向量。 x 、y 平面上的任意一条直线的Hough 变换就是寻找r 、 θ 平面上的一个对应点的过程。
多级Hough 变换首先用较大的θs和θr以求出倾斜角度的大致范围,然后用较小的θs和θr对倾斜角度进行细化处理。
计算答题卡图像的倾斜角度时,为了消除涂抹区域部均匀的影响,对已获取的满足上述特征的极大值对应的倾斜角度,可采用算术平均的方式进行优化处理。假设每行答题区对应的倾斜角度为θi, (i=1,2,…, N, N 通常为答题区的总行数),则图像的倾斜角度θ:
获取答题卡图像的倾斜角度后,可以对图像进行旋转处理。假设点(x0 , y0)绕点(a , b) 旋转θ 度后坐标为(x1,y1) ,旋转后中心坐标为(c,d) ,则:
(
x
1
y
1
1
)
=
(
1
0
c
0
−
1
d
0
0
1
)
(
c
o
s
(
θ
)
s
i
n
(
θ
)
0
−
s
i
n
(
θ
)
c
o
s
(
θ
)
0
0
0
1
)
(
1
0
−
a
0
−
1
b
0
0
1
)
(
x
0
y
0
1
)
\left( \begin{array}{lcr} x_1 \\ y_1 \\ 1 \end{array} \right)=\left(\begin{array}{lcr} 1 & 0 &c \\ 0 & -1&d \\ 0 & 0&1 \end{array} \right) \left( \begin{array}{lcr} cos(θ) & sin(θ) & 0 \\ -sin(θ) & cos(θ) & 0 \\ 0 & 0 & 1 \end{array} \right) \left( \begin{array}{lcr} 1 & 0 & -a \\ 0 & -1 & b \\ 0 & 0 & 1 \end{array} \right)\left( \begin{array}{lcr} x_0 \\ y_0 \\ 1 \end{array} \right)
x1y11
=
1000−10cd1
cos(θ)−sin(θ)0sin(θ)cos(θ)0001
1000−10−ab1
x0y01
2.3 图像分割
对灰度图像的分割通常可基于像素灰度值的两个性质: 不连续性和相似性。图像固定区域内部的像素一般都具有灰度相似性,而在不同区域之间的边界上一般具有灰度不连续性,也就是区域边缘属性。
因此,灰度图像分割方法一般可以分为基于区域的方法和基于边界的方法。前者利用区域内的灰度相似性进行分割,后者利用区域间的灰度不连续性进行分割。
根据分割过程中选择的运算策略不同,分割算法又可分为并行算法和串行算法。在并行法过程中,所有检测和分割都可独立和同时地进行,利于提高运算效率 。在串行算法过程中,后续的处理流程要用到之前的步骤得到的结果,要求程序运行具有连续性。
2.3.1 基于区域的分割方法
基于区域的分割方法以区域内像素的相似性特征为依据,将图像划分成一系列有意义的独立区域,实现分割的目标。常用的有灰度阈值法和区域增长法。
2.3.2 基于边界的分割方法
基于边界的分割方法也称为基于梯度的图像分割方法,其关键步骤是进行边缘检测。首先检测图像中的边缘点,然后按照一定的策略连接成轮廓线得到边界,最后根据边界得到分割区域。其中,进行边缘检测的常用方法有图像微分(差分)、梯度和拉普拉斯变换等。
仅进行边缘检测不等于图像分割的完成,则还需要继续将边缘点按某种策略连接成边缘线,形成直线、曲线、轮廓线等, 直到能表示图像区域的边界。边缘点连接成线包括两个过程: 检测可能的边缘点; 将得到的边缘点通过连接或拟合等方式获取连续的线。该方法涉及边缘检测,需要综合考虑图像抗噪性和检测精度的矛盾:若提高抗噪性,则往往会产生边缘丢失或位置偏差;若提高检测精度,则往往会产生噪声伪边缘或错误的轮廓。
三、算法流程
一种能够有效识别答题卡的方法:
利用基于Hough变换的直线检测技术检测图像的倾斜度→对存在倾斜的图像进行旋转校正→实现答题卡答案的定位和检测→使用像素灰度积分统计的方法进行识别
3.1 图像灰度化
采用加权平均值法对原始RGB图像进行灰度化处理,该方法的主要思想是从原图像中取R、G、B 各层像素值并经过加权求和得到灰度图的亮度值。
灰度化后结果如下:
3.2 灰度图像二值化
图像二值化是图像处理的基本技术之一,而阈值的选取则是图像二值化的关键步骤。根据考生填涂答题卡的答案目标区域特点,可选择适当的阈值T 进行二值化。当像素点的灰度值小于T 时,则将该点的颜色值置为“ 0", 否则将其颜色值置为“1”。
二值化后结果如下:
3.3 图像平滑滤波
为了减少图像的噪声,常用的有中值滤波、均值滤波等方法。中值滤波指将像素邻域的灰度值进行排序后取中位数值。图像在采集过程中经常会遇到随机噪声的干扰,该噪声—般是邻域中亮度值发生随机突变的像素,经中值滤波后图像的随机噪声能得到有效消除。
3.4 图像校正
进行图像旋转操作便于后续的检测和识别。思路为:将需调整的答题卡图像读取到内存中,计算图像的倾斜角度,依据所得的倾斜角度旋转图像,得到校正图像。在进行区域定位时选择Hough 变换来进行直线检测,进而获取定位信息计算倾斜角度。
校正后结果如下:
3.5 分割定位
经过图像预处理及校正过程后, 得到待检测识别图像, 需要进行区域的分割定位、答题涂抹位置的检测,以及答案目标的识别分析。
图像摆正后,结合答题卡图片本身的特性,名字准考证区域与答题区域中间有条直线分答题区域与答题卡尾部有条直线分割这样识别出直线后,根据直线长度排序,取最长的两条直线,就可以得到区域分割位置。
分割定位后结果如下:
上区域:
下区域:
3.6 填写检查
一种情况是如果考生的基本信息如专业、科目、班级、学号、试卷类型等客观信息出现重选、涌选错误,则在系统识别后会立即给出错误提示,要求确认修改图像或重新采集图像;另一种情况是如果考生填涂答案时出现重选、漏选错误, 则可按答案选择错误对待。
四、效果演示
GUI原始界面:
载入图像后的GUI界面:
五、完整代码
如果需要源代码,可以参考资源:
基于Hough变化的答题卡识别(不带GUI界面):https://download.csdn.net/download/didi_ya/87373545
基于Hough变化的答题卡识别(带准考证号+GUI界面):https://download.csdn.net/download/didi_ya/87373549
,如果遇到任何运行问题,请私信博主,看到后会免费答疑解惑,当然也可跟你你的需求修改GUI界面。