一、问题提出
由于GPY进行了纠偏,所以在采集的时候,就已经获得了质量较高的答题卡图片
![](https://i-blog.csdnimg.cn/blog_migrate/ae0cd910e7c0b00218f4290590863e53.jpeg)
下一步就是需要从这张图片中,识别出人眼识别出来的那些信息,并且将这个过程尽可能地鲁棒化,提高识别的准确率。
二、思路探索
在从图片到数字的转变过程中,既是一个“量化”的过程,也是一个“降维”的过程,需要特定的角度非常重要。这就像很多人站在一起拍集体照,选择不同的角度能够得到这群人不同的像,高明的摄像师能够很快地找到角度,将所有的人都拍摄其中;我们图像处理程序也是同样的道理,有经验的工程师能够善于模式思考,快速找到解决方法的途径。
对于我们这里的这张答题卡图片,和之前的较为简单的答题卡想比较,有很多不同,比较两者的二值图片,就可以发现:
![](https://i-blog.csdnimg.cn/blog_migrate/b3744612924c3f3316f03cd3fcf1095f.png)
![Figure 5: Using Otsu's thresholding allows us to segment the foreground from the background of the image.](https://i-blog.csdnimg.cn/blog_migrate/1b9fcefb94e721883cedce1151987ffc.png)
最大的不同在于没有可以供标定的
基础点。因此我们必须采用其它的方法来进行定位。
此外,答题区域为矩形密集分布,因此我想到的是直接“网格化”进行处理。
三、算法过程和主要代码
step1:灰度-二值-形态学
![](https://i-blog.csdnimg.cn/blog_migrate/a29320c52fc5a4d020429e2655b121da.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cb25e900740b743268d06e90e14487e2.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f3f3aea47da23019ce973a8d638dbccf.png)
step2:轮廓分析
对识别出来的二值图像通过轮廓进一步地进行处理,得到下图的
识别结果,就为下一步定量打下基础
![](https://i-blog.csdnimg.cn/blog_migrate/6550824acb705cc5ffe63c66f30a24b5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/40cb7bee6dbe426f3347572268ea1dc9.jpeg)
step3:模板匹配
想得到识别的结果,首先就是需要对现有的图片进行分割出来。
在没有定位点的前提下,如何准确切割?
![](https://i-blog.csdnimg.cn/blog_migrate/b88d5d798893bec1923d96bbb0b2ebb0.jpeg)
根据以前的经验,基本的思路是这样:
a、根据模板识别,准确的获得可定位地址(比如我选择使用“选择题答题卡”几个字作为模板,得到下图定位结果,注意图中白点);
![](https://i-blog.csdnimg.cn/blog_migrate/6030dad7ca81b8be7c513f16cc6627b9.jpeg)
b、而后采用经典的“纵横”方法进行识别。(这里我对各个距离进行了测量和标注)
![](https://i-blog.csdnimg.cn/blog_migrate/0e4b43a6a72bb370215603e9990686fa.jpeg)
细节:
![](https://i-blog.csdnimg.cn/blog_migrate/a20897caf58c7d016883ce3eb4c603df.jpeg)
编写以下代码:
![](https://i-blog.csdnimg.cn/blog_migrate/a9661f9e0fa4907175c08a1d2d99aae7.png)
得到以下结果:
![](https://i-blog.csdnimg.cn/blog_migrate/f3defc843285b00a0d4fd2aeb8050de3.jpeg)
step4:分块面积识别
直接识别划分区域的面积,得到定量结果
![](https://i-blog.csdnimg.cn/blog_migrate/ba74f0002889c9acdfce33e03243c419.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f172ece82df9adea1dea11dc9d43b307.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5495a277047c6d76cf59a54d73cf278a.png)
全图:
![](https://i-blog.csdnimg.cn/blog_migrate/0b09edd92b2ad68262948cd650585c6e.jpeg)
细节:
![](https://i-blog.csdnimg.cn/blog_migrate/59280e168e5f6f46ee94fdad952b54d0.png)
step5:转化得到识别结果
编写相关识别的结果为:
![](https://i-blog.csdnimg.cn/blog_migrate/b20e84c5fc0483b3674af718c583339d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4600da2f5bcbae8b0ef8afefd7ce273b.jpeg)
四、需要注意的地方:
1、模板识别对于不同尺度采集的图片,是否具有通用性。故我需要在不同的图片、不同的采集模式下进行探索;
2、目前识别出来的结果缺乏对答题结果“重复”“遗漏”情况分析;
3、
我们看见的是彩色或者灰度图像,实际上,需要识别出来的是bin区域。在实验的过程中,我们会用到“
彩色或者灰度”作为背景。
至此,复杂答题卡的算法部分基本完成。感谢阅读至此,希望有所帮助。