计算机视觉与深度学习实战:以MATLAB、Python为工具
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.3 程序实现

本案例提出了一种能够有效识别答题卡的方法,利用基于Hough变换的直线检测技术检测图像的倾斜度,对倾斜的图像进行旋转校正,最终实现了对答题卡答案的定位和检测。其中,在识别过程中使用了像素灰度积分统计的方法,具有较低的误识别率,能够准确定位答题卡的涂卡痕迹。下面介绍程序实现过程中的关键步骤。

4.3.1 图像灰度化

根据答题卡图像的自身特点,本实验要求输入的图片为灰度格式,并将采集到的答题卡图片经灰度化处理后存储到硬盘的指定文件夹中,用于检测和识别。采用灰度图像进行存储能显著减少文件所占用的硬盘空间,而且能加快图像处理识别的速度。一般而言,可采用加权平均值法对原始RGB图像进行灰度化处理,该方法的主要思想是从原图像中取RGB各层的像素值并经过加权求和得到灰度图的亮度值。在现实生活中,人眼对绿色(G)敏感度最高,对红色(R)敏感度次之,对蓝色(B)敏感度最低,因此为了选择合适的权值对象输出合理的灰度图像,权值系数应该满足GRB。实验和理论证明,当RGB的权值系数分别为0.299、0.587和0.114时,能够得到最适合人眼观察的灰度图像。

4.3.2 灰度图像二值化

图像二值化是图像处理的基本技术之一,对阈值的选取则是图像二值化的关键步骤。一般而言,对于灰度图像来说,可适当选择一个或若干个灰度值 T(0≤T≤255)进行二值化,将目标和背景分开,这个灰度值T就被称为阈值。因此,对于答题卡图像来说,根据考生填涂答题卡的答案目标区域特点,可选择适当的阈值T进行二值化。当像素点的灰度值小于T时,将该点的颜色值置为“0”,否则将其颜色值置为“1”。这样就得到了只包含黑白两种颜色的二值图像。

4.3.3 图像平滑滤波

图像平滑滤波是一种实用的数字图像处理技术,主要是为了减少图像的噪声,常用的有中值滤波、均值滤波等方法。中值滤波指将像素邻域的灰度值进行排序后取中位数值作为中心像素的新灰度值。答题卡图像在采集过程中经常会遇到随机噪声的干扰,该噪声一般是邻域中亮度值发生随机突变的像素,并且经排序后往往出现在序列的队首或队尾,所以经中值滤波后答题卡图像的随机噪声能得到有效消除。

4.3.4 图像矫正

对答题卡图像进行校正处理主要是进行图像旋转操作,便于后续的检测和识别。图像旋转的算法很多,本实验采用的算法思路为:将需调整的答题卡图像读取到内存中,计算图像的倾斜角度,依据所得的倾斜角度旋转图像,得到校正图像。

根据答题卡图像的特点,答题卡的有效信息往往位于整幅图像的特定部位,一般包括考生准考证号区域、答案区域和考试科目区域三大部分,因此对这些区域进行精确的定位即可提取图像的特征信息。答题卡图像一般由明确的矩形框和直线组成,在进行区域定位时选择Hough变换进行直线检测,进而获取定位信息,计算倾斜角度,之后进行图像旋转得到校正结果。

4.3.5 完整性核查

考生在涂卡时,由于种种原因可能会出现重选、漏选等错误,可根据对识别结果的影响分两种情况进行处理:一种情况是考生的基本信息如专业、科目、班级、学号、试卷类型等客观信息出现重选、漏选错误,则在系统识别后会立即给出错误提示,要求确认修改图像或重新采集图像;另一种情况是考生填涂答案时出现重选、漏选错误,则可按答案选择错误对待,并将识别结果记入存储结构中。最后,系统根据事先录入的标准答案与识别存储结构进行自动评分,从而获得每名考生的考试成绩信息。

根据系统设计要求,可结合MATLAB数字图像处理工具箱,对所输入的答题卡图像根据预处理、检测、识别算法流程进行系统实现,其主函数如下:

运行主函数,首先获取图像灰度化、二值化的结果,如图4-6所示。

图4-6 图像灰度化、二值化的结果

系统采用Hough进行直线检测,并根据所定位的特征直线位置计算倾斜角度,再进行图像旋转,得到校正结果。核心代码如下:

根据Hough变换计算倾斜角度并进行图像旋转,进而对原图像进行倾斜校正操作,效果如图4-7所示。

图4-7 对图像进行倾斜校正的效果

在经过图像预处理及校正过程后,得到了待检测识别的图像,需要对其进行区域的分割定位、答题涂抹位置的检测,以及答案目标的识别分析。核心代码如下:

在对图像校正后,对特征区域进行标记,并统计答题结果,如图4-8~图4-9所示。

图4-8 图像特定区域标记

图4-9 答题结果标记

这里将得到的答题卡目标检测结果与标准答案进行对比,并对考试信息、科目信息等进行基本判别,给出该答题卡图像的分析结果。核心代码如下: