基于机器视觉的答题卡识别系统设计

2022-09-08 00:38王子民赵子涵冯梦婷张秀文叶慧雯杨玉东
南京理工大学学报 2022年4期
关键词:答题卡标准答案灰度

王子民,赵子涵,冯梦婷,张秀文,叶慧雯,杨玉东

(1.淮阴工学院 电子信息工程学院,江苏 淮安 223003;2.南京工业大学 计算机科学与技术学院,江苏 南京 211816)

市面上现有的光标阅读机具有使用与维护成本高、无法保存答题卡数字图像等缺点,且必须使用专业的答题卡与2B铅笔进行填涂,对答题卡纸张要求质量高。国内外不少学者,针对以上局限性做出相关研究,提出了基于图像处理的答题卡识别方法。

周万珍等[1]使用具有自动进纸器的扫描仪采集答题卡图像。通过预设答题卡信息区域与答案填涂区域的坐标位置实现区域划分,但在每次识别时都需要更正位置信息。郝平[2]通过扫描仪端控制程序采集图像,使用人机交互界面进行区域划分,仍需人工干预区域划分过程。程淑红等[3]利用YCbCr颜色空间实现区域划分,但文献中对区域划分过程描述并不详尽。张菲菲等[4]没有描述答题卡图像采集过程。韦溢辉等[5]设计自动生成试卷的系统,但对图像采集过程未进行详细描述,且不涉及答题卡的区域划分过程。

上述文献中使用扫描仪等设备采集图像,无法降低成本,且对答题卡的自动区域划分过程描述不详尽。因此,本文提出一种答题卡识别方法,使用普通摄像头对图像进行采集,进一步降低了成本;改进了答题卡模板,使用最大矩形框轮廓检测方法实现自动区域划分;此外创新了答题卡识别方法,利用RGBA颜色空间特性、同步头与指针算法实现答题卡答案填涂部分的识别。

1 答题卡图像预处理

1.1 模板设计与图像采集

设计可供计算机识别的答题卡模板。使用粗线框将答案填涂区域进行框选;在答案填涂区域与信息填涂区域的右侧与底部绘制等间距的黑色实心矩形定位框;模板大小与正规考试中使用的标准答题卡大小一致,模板设计图如图1(a)所示。本文降低了答题卡的纸张质量要求,使用普通A4纸即可,大大节约成本。将普通摄像头固定在稳定支架上,与拍摄平面保持水平。设计答题卡图像采集界面,如图1(b)所示,设置摄像头分辨率为3 264*2 448。分别对标准答案答题卡图像与待识别答题卡图像进行图像采集并保存在指定文件夹中。

图1 模板设计与图像采集

1.2 答题卡图像的提取

由于采集的图像存在偏转与黑色背景等问题,在答题卡识别前,需要进行矫正、提取与剪切等前期处理工作,流程如图2所示。

图2 矫正与提取流程图

首先对图像进行预处理[6,7],预处理步骤包括灰度转化、Sobel边缘检测[8]、二值化与形态学闭运算,目的是减少计算量,得到清晰、连贯的答题卡图像外轮廓。使用Sobel算子求解图像的水平方向梯度与垂直方向梯度,将两个梯度图像叠加,得到答题卡边缘图像,如图3(a)所示。由于答题卡目标图像为矩形,为连接及填补外轮廓线条,选择使用大小为5*5的矩形结构元素,对目标图像进行闭运算操作,结果如图3(b)所示。本文测试了不同形状与大小的结构元素对图像剪切结果的影响,如表1所示。

表1 不同结构元素对剪切结果的影响

图像预处理完成后,使用轮廓检测方法找出图3(b)的边缘点集合。利用最小面积矩形算法,在已得到的所有轮廓点集合中寻找答题卡的最小外接矩形的点集合,如图3(c)所示。根据boxPoints方法得到最小外接矩形的4个角点,如图3(d)所示。构建仿射变换矩阵,利用warpPerspective仿射变换方法,实现答题卡图像的提取,最终得到图3(e)的答题卡图像。

图3 矫正与提取

1.3 区域划分

根据图像预处理与最大矩形框检测等方法可实现自动划分答案填涂区域与信息区域,流程如图4所示。

图4 区域划分流程

首先对答题卡图像进行图像预处理,目的是减少计算量并且得到连续且清晰的黑色矩形框轮廓,以便后续矩形框的轮廓检测,具体操作步骤为灰度转化、形态学闭运算、二值化、中值滤波操作。Canny边缘检测[8]与findContours算法获取轮廓点集合,利用contourArea算法得到轮廓点集合中面积最大的轮廓点集合。面积最大轮廓点集合绘制在黑色画布的图像上,如图5(e)所示。使用convexHull算法进一步简化最大矩形框轮廓点数量,将凸包点绘制在答题卡图像上,如图5(f)所示。根据凸包点到中心点的位置关系,按图5(f)将凸包点划分为4块区域,计算中心点到各区域的凸包点的欧式距离,距离最大的轮廓点为各区域处的角点,最终得到矩形框的4个角点坐标,如图5(g)所示。根据4个角点,剪切答题卡答案填涂区域、答题卡信息区域与纵向同步头,剪切结果如图5(h)~(j)所示。

图5 区域划分

2 答题卡答案填涂区域的识别

2.1 RGBA抠图

RGBA图像的一个像素由4个颜色信息组成,分别为红色(Red,R)、绿色(Green,G)、蓝色(Blue,B)以及透明通道(Alpha,A),取值在0~255之间。如果Alpha值为0,此位置处为透明;如果Alpha值为255,则此像素的颜色取决于RGB。分别对区域划分后剪切下来的标准答案答题卡图像与待识别答案的答题卡图像进行抠图,制作标准答案蒙版图像与待识别答案抠图图像。

2.1.1 标准答案答题卡蒙版图像制作

将标准答案填涂部分设置为透明(255,255,255,0),其余部分设置为黑色(0,0,0,255)。为减少计算量与去除噪声对图像的干扰,对区域划分后的标准答案答题卡的答案填涂部分进行灰度转化、高斯滤波、二值化、黑白反转操作,其中黑白反转的目的是为了将答案填涂位置设置为白色,将其他部分设置为黑色。将反转后的图像转化为RGBA四通道图像,进而对此图像抠图。具体操作为依次遍历图像,如果像素值为(255,255,255,255),即为标准答案答题卡的正确答案填涂位置(白色),则将此像素设置为透明,像素值设置为(255,255,255,0);如果像素值为(0,0,0,255),则保持不变。最终得到标准答题卡的蒙版图像,如图6(a)所示。

图6 抠图结果

2.1.2 待识别答案抠图图像制作

将待识别答案答题卡的填涂部分设置为黑色(0,0,0,255),其余部分设置为透明(0,0,0,0)。对区域划分后的待识别答案答题卡的答案填涂部分进行灰度转化、高斯滤波、二值化、腐蚀膨胀操作。对待识别答案抠图图像进行形态学操作,目的是使待识别图像的正确填涂位置充分填充蒙版图像,以便后续识别。依次遍历处理后的图像,如果像素为(255,255,255,255),即为待识别图像的非填涂区域(白色),则将此像素设置为(0,0,0,0);如果像素值为(0,0,0,255),即待识别答案图像填涂的答案,则保持不变。最终得到待识别答案的抠图后的图像,如图6(b)所示。

2.2 同步头坐标提取

在答题卡右侧与下侧印有同等大小、同等间距的黑色矩形实心方块,称为同步头[9]。使用图5(j)中剪切的标准答案答题卡的纵向同步头,经灰度投影[10,11]、归一化、滤波[12]等操作,最终通过处理后的灰度投影曲线最低点所在横坐标,求得纵向同步头中心位置纵坐标,从而得到答案填涂区域选项的每一行对应的纵坐标位置信息。纵向同步头经灰度转化后,将图像长边视为x轴,短边视为y轴。将同步头灰度值投影在长边x轴方向,按照灰度值长边从左到右依次遍历,累加每个所处xi位置的一列灰度值并保存在数组ax中。对于xi位置处的灰度值投影,由式(1)计算得到,其中w为纵向同步头图像短边的长度,I(i,j)为纵向同步头灰度图中第i行第j列元素的灰度值。

(1)

由于黑色同步头位置与其他区域灰度的累加值相差过大,使用式(1)累加的灰度值不方便计算与图像显示,因此需要对数组ax进行归一化,使得灰度累加后的取值范围在-1~1之间,式(2)中得到累加灰度的中值m。其中min(ax)为累计灰度值数组ax的最小值,max(ax)为累计灰度值数组ax的最大值。

(2)

对于累加灰度值小于等于灰度中值m的灰度值,执行式(3)

(3)

对于累加灰度值大于灰度中值m的灰度值,执行式(4)

(4)

根据归一化后的灰度累加值数组,绘制纵向同步头灰度值曲线图像,如图7(a)所示。由于波谷位置最低点位置不明确,无法确定答案填涂区域的纵向同步定位头中心点坐标,因此考虑对投影曲线进行滤波。Savitzky-Golay滤波器通过移动窗口,利用最小二乘拟合原理进行滤波,实现对同步定位头曲线的2次平滑滤波操作,滤波后的灰度投影曲线如图7(b)所示。

图7 原始灰度投影曲线与滤波后的灰度投影曲线

经观察,纵向同步头灰度投影曲线的波谷位置,位于同步头中心位置。即取得灰度投影曲线波谷位置的横坐标,就能得到答题卡填涂区域选项的中心位置纵坐标,将坐标信息保存于csv文件中。

2.3 答题卡识别

2.3.1 叠加匹配后的图像特点

将图6(b)的待识别答案图像调整为图6(a)的大小后,使用add方法叠加答题卡蒙版图像与待识别答题卡图像,匹配叠加后的图像如图8(a)所示。

图8(a)的正确答案待填涂位置的RGB值为(255,255,255);其余位置的RGB值为(0,0,0)。蒙版图像的待填涂位置被待识别图像的答案填充则Alpha值变为255,否则为0。根据上述特性,按照以下3种情况,分别进行详细描述。如果叠加后的图像在正确答案待填涂位置完全填充,如图8(b)中图①所示,则此处的像素值全部为(255,255,255,255),非正确答案待填涂位置的像素值为(0,0,0,255)。其中,ans中的黑色(0,0,0,255)与mask中的(255,255,255,0)使用add叠加,像素值显示为(255,255,255,255),但在图像显示上仍是黑色的。如果因填涂规范、图像预处理、匹配叠加等原因,发生正确答案待填涂位置处未完全填充的情况,如图8(b)中图②所示,则正确答案待填涂位置的已填充像素值为(255,255,255,255),未填充的像素值为(255,255,255,0)。蒙版mask、待识别答案图像ans与叠加后图像add的像素值示意如图8(c)所示。如果叠加后的图像在正确答案待填涂位置,完全没有被填充,即为答题卡中答案填错情况,如图8(b)中图③所示,则未填充位置的像素全部为(255,255,255,0)。

图8 图像叠加后的匹配示意图

2.3.2 利用指针与RGBA特性进行识别

按照上文中提取到的纵坐标位置信息,逐行对匹配叠加的图像的填涂情况进行识别。综合上述3种填涂情况,利用叠加图像的RGB像素值,判断是否为待填涂的正确答案位置;利用Alpha值是否为255,判断叠加后图像的待填涂正确答案位置是否被填充。根据答案待填涂处首尾指针间的未填充像素个数ansu与应填充像素个数maska的比值,与预设的阈值[13]比较,根据试验结果将阈值定为0.9,判断此填涂位置区域是否未被填涂。其中,wron为错误填涂个数,如式(5)所示

(5)

根据整张答题卡的未填涂答案个数与应填涂答案个数,计算此待识别答题卡的得分情况。由于答题卡每行待填涂答案个数未知,每个待填涂选项的像素个数未知,设计如下算法。

算法1答题卡识别算法

输入:叠加图像dst;纵向同步头中心位置信息数组r

输出:填涂正确的个数crn

1:function IDENTIFY

2: forrowi=r[0]→row[-1] do

3: forcoli=2→width-1 do

4:frontk,backk←比较当前像素与前后R值,得到指针位置

5:maska←backk-frontk+1

6:totalrow++

7:ansu←计算此区间像素Alpha为0的像素个数

8:wron++←ansu/maska比值大于某一阈值

9:ansu←0

10: end for

11:totaln=totaln+totalrow

12:totalrow←0

13: end for

14:crn=totaln-wron

15: returncrn

16:end function

设定front point与back point前后两个指针,按照上文获取的同步头中心点的纵坐标,逐行遍历像素中RGBA中的R通道像素值,如图9所示。

图9 使用指针判别

R

R

R

R

R

R

R

R

front

k

back

k

mask

a

maska=backk-frontk+1

(6)

如果两指针间,即对某一待填涂位置而言,未填充的像素个数与待填涂像素个数的比值超过预设的阈值,则说明这个位置处没有被填涂,即填错。按照上述流程,逐行遍历叠加后的图像,根据未填涂个数与待填涂个数,计算考生最终得分情况。识别的答题卡填涂情况如图10(a)所示,左图为标准答案答题卡,右图为待识别答题卡,白点为识别到的正确答案的位置。最终识别计算得到的分数如图10(b)所示。

图10 运行结果

3 结果与分析

测试环境:处理器型号为Intel(R)Core(TM)i5-9500 CPU@3.00 GHz 3.00 GHz,内存8 GB,Windows10操作系统。仿真软件为PyCharm 2020.3.4(Community Edition)。摄像头为普通摄像头,参考金翔高拍仪的分辨率参数,设置摄像头分辨率为3 264*2 448。PC使用Anaconda平台配置Python和OpenCV,版本分别为Python 3.8.5和OpenCV 4.5.1。

本方法首次识别时,使用预先拍摄好的标准答案答题卡图像,制作答题卡标准答案蒙版。将待识别答案依次放在拍摄水平面上,完成答题卡的识别。本识别方法需要均匀的拍摄光线以保证答题卡的提取与答案填涂区域的分割。如表2所示,给出了10张答题卡测试数据,分别列出了答题卡填涂的识别分数、输出与真实结果相符的概率、答题卡填涂的实际分数以及准确率。每张答题卡测试20次,最终识别的准确率均为100%。测试结果:对于规范填涂的答题卡,在均匀的拍摄光线下识别率达到100%。

表2 答题卡识别结果

识别错误情况:由于答题卡识别基于蒙版匹配识别,对于待识别图像完全填涂的问题还没有找到有效方法进行解决。如果对待识别答题卡的全部位置填涂上黑色,匹配后的图像也全部为黑色,此时识别正确率为100%。叠加匹配的图像如图11所示。后续需要对此问题进行进一步研究。

图11 全部填涂的待识别答案的叠加结果

4 结束语

为了解决当前答题卡采集设备成本过高、手动划分答题卡填涂区域与信息区域、手动定位答题卡填涂区域起始位置等问题,设计并提出了基于机器视觉的答题卡识别系统。本文设计适用于机器视觉识别的答题卡模版,使用普通摄像头对答题卡图像进行采集,使用边缘检测、形态学操作、轮廓检测等图像处理操作,实现了答题卡图像的提取。利用最大矩形框轮廓检测方法,对答题卡图像进行区域划分。使用纵向同步头绘制灰度投影曲线,得到答题卡选项每一行中心位置的纵坐标信息。将图像转化为RGBA四通道图像,利用Alpha通道,生成标准答题卡蒙版图像与待识别答题卡图像。将两个图像叠加匹配后,利用纵向同步头位置信息、RGBA颜色空间特性与指针算法共同完成答题卡的识别。

本文补充了其他文献中描述不详尽的答题卡图像采集部分及区域划分部分。提出了利用纵向同步头位置信息、RGBA颜色空间特性与指针算法的答题卡识别新方法。在具有较好识别精度的情况下,解决了前面所述文章的局限性。但本文的答题卡识别方法(蒙版图像与待识别图像的匹配叠加)存在局限性。由于蒙版图像只有正确答案为空缺,如果蒙版图像在同一题目下的其他选项处填涂了答案,算法则无法判断。针对此问题,后续将进行深入研究。

猜你喜欢
答题卡标准答案灰度
航空滤光片阵列多光谱图像条带灰度调整算法
天津港智慧工作平台灰度发布系统和流程设计
Arduino小车巡线程序的灰度阈值优化方案
“标准答案”阅卷实录
标准答案
大多数的知识付费,其实就是卖给你一套标准答案
安全知识竞赛答题卡
教师莫成为“标准答案”的帮凶
知识竞赛答题卡
知识竞赛答题卡