1.项目描述
利用摄像头采集仪表盘的信息,对采集到的图片信息进行识别,
2.实现的过程
2.1 模板匹配法
提取0-9 十个数字的模板,进行归一化,模板大小为高50*宽30像素。对摄像头拍到的图像信息,先进性灰度化处理,高斯平滑,二值化处理,再进行形态学处理之后,通过找寻图像中的连通区域,可以找到若干个连通区域,当然有很多不包含数字的连通区域,可以根据找到的连通区域的大小进行过滤,而且可以进一步根据连通区域的先验知识,如长宽之比来过滤,增加准确性。这样找到的连通区域的并不是按照从左到右的顺序,找到之后,可以根据x的坐标进行排序,在识别的过程中就是按照正常的读数的顺序。在识别的过程中采用的是模板匹配的方法,对测试样本,分割之后,进行归一化处理,与模板图像做异或运算,统计出现的1的次数,次数最多的模板就是测试图像的类别。刚开始基于一块电表的图像做实验,准确率为60%,分析错误的原因,数字和5和数字6,数字6,数字8,和数字0,这两组数字容易被识别错,但是模板匹配的主要优点是速度快。后来分析数字5和数字6之间的区别,用漫水填充算法对测试图像进行处理,然后与原测试图像做差值运算,如果是5的话,差值运算的结果应该是0,如果是6,差值运算有响应的数值。可以将5和6分开。0,6,8这三个数字的区别可以采用相同的思路,但有点区别,6的上半部分没有孔洞,可以先进性漫水填充算法,如果上半部分没有变化,则是6,剩下再区分0和8,直接统计中间部分区域的像素个数,可以将0和8区分开。经过二次处理之后,识别率将近100%。
2.2 SVM分类
模板匹配的速度虽然快,但是通用性不强,事先需要提取模板。而采用SVM机器学习的方法,可以避免这种问题,SVM对小数据集的分类效果比较理想,opencv里面有现成的svm函数可以调用,进行简单的配置就可以使用了,很方便。直接用模板匹配提取的模板,每个数字一个样本,共十个训练样本,特征向量直接采用二值图像的像素分布,准确率可以达到70%以上,增加训练的数量,识别率上升明显。