罗朝阳 张鹏超 姚晋晋 王 彦 赵瑞杰
1(陕西理工大学机械工程学院 陕西 汉中 723000)2(陕西省工业自动化重点实验室 陕西 汉中 723000)
考试是教育测量的重要手段,也是目前选拔人才的重要手段。所以公平、公正就显得非常重要,这不仅体现在考试的过程中,还体现在评卷的过程中。以前,这些试卷都是进行人工翻阅批改,其中评卷老师的水平、状态、情绪都能影响评卷的结果,这种不确定性有失公平公正。随着信息技术的不断发展,计算机功能的不断强大,出现了答题卡的计算机阅卷设备,通过电子扫描技术将纸质的答题卡转化为数值化的形式,再对其自动评阅,这不仅解决了评卷公正性、准确性的要求还提高了评卷的工作效率。
目前答题卡识别方式主要有两种:一种是基于光电设备,另一种是基于图像处理技术。光标阅读机(OMR)是根据光电设备将不同区域的感光能力转换为计算机处理的电信号,再依据电信号来识别。这种识别系统具有高效率、高准确率、低功耗的优点,但它的缺点也很突出,即必须采用光标阅卷机和专用的答题卡,购买成本和使用成本都非常高昂,且这种形式的答题卡规格一旦确定就难以修改,所适用的范围小。图像处理技术是将图像采集设备所获得的图像供计算机分析识别,从而获取答题卡上的有效信息。这种识别方式不仅可以完成阅卷工作,还具有成本低廉、使用方便的优点,而且可通过软件方便修改答题卡的结构,以适应不同的需求。
针对获得的数字化图像数据,陈淑红等[1]提出基于纵向同步头和模板匹配的方法进行定位识别;杜聪[2]提出模板匹配的识别方法;郝平[3]提出基于OpenCV耦合模板定位识别。他们都是采用模板匹配的方法来识别,识别的精度全取决于模板。本文提出一种基于Hough变换答题卡识别算法,以此构建基于图像识别的阅卷系统。
通过相机或扫描仪采集答题卡的原始图像,当系统获取到图像之后,先对其进行预处理操作;通过Hough直线变换获取图像的矫正角度,并将图像进行矫正操作,矫正后对图像进行区域分割,获得答题区域和准考证区域以及考试科目信息区域;对这些区域进行识别判断,以完成阅卷步骤,流程如图1所示。
图1 阅卷流程图
本文所描述的算法通过MATLAB 2017b软件实现,通过在main函数中调用其他子函数来实现图1流程框图中的内容。
算法主程序:
I=imread(p);
%p为答题卡图像的路径和名字
[I1,bw1]=Image_Preprocessing(I);
%图像预处理
[~,~,xy_long]=Hough_Process(bw1);
%hough直线检测
angle=Compute_Angle(xy_long);
%计算倾斜角度
[I2,bw2]=Image_Rotate(I1,bw1,angle);
%图像矫正
[bw3,Loc]=Morph_Process(bw2);
%形态学滤波
[Len,XYz,xy_long]=Hough_Process(bw3);
%
[bw4,bw5]=Image_Segmentation(XYz,bw3);
%图像分割
[stats1,stats2,Line]=Region_Label(bw4,bw5,XYz,Loc);
%区域标记
[Anss(i).Answer,Anss(i).Bn]=Analysis(stats1,stats2,Line,I2);
%区域分析
Hough检测子程序:
function[Len,XYz,xy_long]=Hough_Process(bw)
[H,T,R]=hough(bw);
%hough矩阵
P=houghpeaks(H,4,′threshold′,ceil(0.3×max(H(:))));
%hough峰值
lines=houghlines(bw,T,R,P,′FillGap′,50,′MinLength′,6);
%hough直线
max_len=0;
for i=1:length(lines)
xy=[lines(i).point1;lines(i).point2];
len=norm(lines(i).point1-lines(i).point2);
%计算直线长度
Len(i)=len;
if len>max_len
max_len=len;
xy_long=xy;
end
%判断最长直线
XY{i}=xy;
%存储直线坐标
end
[Len,ind]=sort(Len(:),′descend′);
%直线长度排序
for j=1:length(ind)
XYz{j}=XY{ind(j)};
end
x=xy_long(:,1);
y=xy_long(:,2);
if abs(diff(x)) x=[mean(x);mean(x)]; else y=[0.75×y(1)+0.25×y(2);0.25×y(1)+0.75×y(2)]; end %坐标调整 xy_long=[x y]; %输出调整后的直线坐标 识别判断子程序(部分): function[Answer,Bn]=Analysis(stats1,stats2,Line,Img) aw=[′A′ ′B′ ′C′ ′D′]; for i=1:length(stats1) %循环所有的题目 temp=stats1(i).Centroid; %获取当前填涂区域的坐标 for i1=1:length(Dom) %循环答题区域 Loc=Dom(i1).Loc; %获取i1区域中的范围坐标 if temp(2)>=Loc(1) && temp(2)<=Loc(2) x=Dom(i1).x; y=Dom(i1).y; i_y=(i1-1)×20; %统计当前的题数 for i2=1:length(x) %循环i1区域中的题组 xt=x{i2}; for i3=1:length(xt)-1 %循环题组中的题号 if temp(1)>=xt(i3) && temp(1)<=xt(i3+1) i_x=(i2-1)×5+i3; %统计题号 break; end end end i_n=i_y+i_x; for i4=1:length(y)-1 %循环当前题号选项的个数 if temp(2)>=y(i4) && temp(2)<=y(i4+1) i_a=aw(i4); %给出答案 break; end end end end Answer(i_n).Loc=[Answer(i_n).Loc;temp]; % Answer(i_n).no=i_n; %保存题号 Answer(i_n).aw=[Answer(i_n).aw i_a]; %保存答案 end 答题卡自动阅卷系统是将图像采集设备获得的答题卡图像传输给计算机,供其分析识别。但在获取答题卡的数字图像过程中,常常会受到环境、设备等因素的影响而产生噪声,从而影响阅卷的准确性。因此,要对获取到的图像进行预处理操作,包括对图像进行灰度拉伸、高斯滤波、图像二值化,然后再将二值化的图像进行反转,这样就可以大大减少计算的数据量。处理结果如图2所示。 (a) 预处理后的答题卡图像 (b) 二值反转后的答题卡图像图2 预处理与二值反转后的答题卡图像 霍夫变换是由Paul Hough于1962年首次提出,仅仅用于图像中直线的检测。现在使用的广义霍夫变换不仅能检测直线,还可以检测其他形状的几何特征。因为直角坐标的线与参数坐标中的点具有对偶性,从而可将直角坐标中的线转换为参数坐标中的点。霍夫变换就利用这一原理,将曲线的检测问题转化为寻找峰值的问题。 在笛卡尔坐标系中一条过点(x0,y0)的直线可以用斜截式表示: y0=kx0+b (1) 式中:斜率k和截距b都是参数。若将x0和y0视为常数,而将参数k和b视作变量,则式(1)改写为: b=-kx0+y0 (2) 这就将直角空间中的直线转换成了参数空间中的点。同理直角空间中的点也可以转换为参数空间的直线,变换如图3所示。 图3 点-线对偶性 但斜截式的直线方程不能表示所有的直线,如斜率不存在的直线,为了能表示所有的直线,采用极坐标形式的方程来表示直线,则将式(1)改写为: ρ=x0cosθ+y0sinθ (3) 式中:ρ是原点到直线上最近点的距离,θ是x轴与连接原点和最近点直线之间的夹角,如图4所示。因此,将图像中的直线与一对参数(ρ,θ)相关联,这个参数(ρ,θ)平面就被称为霍夫空间。 图4 直角空间与霍夫空间 经Hough变换后,会得到很多条直线的横纵坐标,经式(4)计算,选出其中最长的一条直线,如图5(a)所示,并根据此直线按式(5)求出矫正角度θ,最后将原图像按式(6)矫正,矫正后的效果如图5(b)、(c)所示。 (4) (5) (6) (a) 检测的最长直线 (b) 矫正后的原图 (c) 矫正后的二值图像图5 检测的直线图与矫正后的原图和二值图 形态学的本质是结构元素与图像矩阵之间的相互作用,这种作用包括基础的膨胀和腐蚀,也包括由这两种复合而成的开和闭。 在形态变换中,若用E(X)表示二值图像,B(X)表示结构元素,⊕和Θ两种符号分别表示形态学运算中的膨胀运算和腐蚀运算,则: 膨胀定义为: E⊕B={x:B(x)∩E≠Φ} (7) 腐蚀定义为: EΘB={x:B(x)⊂E} (8) 设·和∘分别是开运算和闭运算的符号,则: 开运算定义为: E∘B=(EΘB)⊕B (9) 闭运算定义为: E·B(E⊕B)ΘB (10) 因此,本文采用的结构元素定义为: 滤波算法定义为: f=EΘB2⊕B1 (11) 采用此算法对图5(c)中的二值图像进行形态学滤波处理,并将处理后的图像中的答题边界符去除,结果如图6所示。 (a) 滤波前的二值图 (b) 滤波后的二值图图6 滤波结果 图像分割是指将图像划分成具有相似性质的若干区域的过程。现有的分割方法有基于阈值分割、基于区域分割、基于边缘分割以及基于特定理论的分割等[4]。 答题卡的有效信息位于图像中的特定区域,包括准考证号区域、答题区域以及科目代号区域,对这些区域精准定位就可以获取答题卡中的有效信息。本文采用了基于直线的边界检测和区域分割的方法,将答题卡化分为信息区域和答题区域两部分,分割效果如图7所示。 (a) 直线边界检测 (b) 信息区域 (c) 答题区域图7 分割结果 识别包含对信息区域中准考证号的识别、科目代号的识别,也包含对答题区域选项的单选识别、多选识别。通过bwlabel获取答题区域和信息区域的标记矩阵,通过regionprops获取区域的Centroid属性,然后根据此属性判断填涂的选项。 根据前文Hough变换获得的直线,将答题区域和信息区域中的每个选项、信息通过网格划分出来。然后采用图8的识别算法进行识别。 图8 识别算法 对图7(b)、(c)进行识别,识别结果如表1、表2所示,将表1、表2中的信息叠加到原图中的效果如图9所示。 表1 信息区域识别出的结果 表2 答题区域识别出的结果 图9 识别结束后的效果 测试环境:处理器型号为Intel(R) Core(TM) i5-4210U CPU @ 1.70 GHz 2.40 GHz,内存4 GB,Windows 10操作系统。仿真软件为MATLAB 2017b。答题卡图像是用CCD相机在室内拍摄的100张标准答题卡,每幅图像的大小5 MB,分辨率为4 000×3 000。图像以JPG格式保存,对拍摄的图像进行压缩,产生了马赛克噪声,且相机本就包含CCD噪声,导致图像中也含有了CCD噪声。 本方法是根据答题卡图像中的直线特征来识别答题区域和信息区域,它影响着这些区域的定位精度。直线特征在算法中有着举足轻重的作用,在本算法中若用其他特征代替直线特征将很难定位答题区域和信息区域。 实验共进行100份答题卡测试,每份45道题,测试结果如表3所示。 表3 不同份数的测试结果 表4 不同方法的识别速度 从表3中可以得知每份答题卡平均耗时0.893秒,正确率达到100%,从表4中可以知道本文算法相比于文献[1]平均耗时2.956秒、文献[5]平均耗时1.934秒、文献[8]平均耗时0.909秒具有明显优势,充分说明本文算法具有高效性。 本实验实现了答题卡的正确识别,不需要专用的识别设备和答题卡,在普通PC机上就可实现。这不仅降低了购买成本、使用成本,还扩大了应用范围,并且该方法的识别正确率达到了100%,识别速度为每份0.893 s。因此,本文所描述的识别方法是一种廉价、高效、便捷、实用的阅卷方法,具有实际应用价值。2 图像预处理
3 Hough直线倾斜矫正
3.1 Hough变换
3.2 图像矫正
4 形态学滤波
5 图像分割
6 识别判断
7 测试与分析
8 结 语