银行卡号识别(三) --- 基于k最近邻的数字识别测

来源:互联网 发布:海典医药软件数据库 编辑:程序博客网 时间:2024/04/29 08:08


    博客分类: 

在进行完预处理之后,我们可以开始用算法识别数字了。首先我们不做那么复杂的、一连串银行卡数字的识别,而是做一个数字的测试。

 

一、机器算法的引入-----K近邻算法

K最近邻(k-Nearest Neighbour,KNN)分类算法是一个理论上比较成熟的算法,也是最简单的机器学习算法之一。顾名思义,k最近邻实际上就是取和待分类物最相似的k个模板,然后这k个模板中所占比例最高的类别就是最后决定的类别。

思路就是这么简单,那么这个最近的距离如何计算呢?往往用欧氏距离等经典距离来衡量模板和待分类物的“距离”。

KNN很适合在有大量样本的情况下进行使用,当然,这也带来了速度较慢的问题。

于是KNN就非常简单了。

伦理片 http://www.dotdy.com/

二、准备工作----模板准备

我们只做单个数字的检测,来检验我们所写的算法的正确性,所以类似单片机中串口自发自收的测试方法,我们可以用模板来识别模板,从而检测算法的正确性。

我们在画图板中写入0-9十个数字(大小并没有特殊要求,后面程序会进一步处理),并一一截图保存变成我们的样本,并放在工程目录下:
       
 

模板准备完毕。

 

三、整体思路

1>读取模板:我们这里有10个类别,即0-9十个数字,每个类别有一个样本,一共十个模板,我们需要读入程序中,用IplImage或者cvMat进行存储;

2>模板调整(示模板情况而定需不需要该步骤):也可以说是提取特征区域吧,因为模板是手动截图的,每个模板打大小不是严格一样的,但是作为模板匹配来说,我们需要的是统一的尺寸标准,所以我们需要将导入的模板图片调整到统一的、合适的尺寸。

在http://blog.csdn.net/wangyaninglm/article/details/17091901的博客上我看到了非常合适的解释图,在这里也分享给大家:
                       
 

 

这里提取出来的ROI是模板的有效部分,但是大小还是不一定符合统一尺寸的要求,所以,我们要进行适当的放缩
                 
 

 影音先锋电影 http://www.iskdy.com/

3>训练数据:这是我认为的算法最关键的部分。这里有几个参数:

Classes:类型数量

Train_simples:每个类型的样本数量

trainData:模板的训练集,

trainClasses:训练集所对应的类别标号

接下来我想解释一下trainData,trainClasses是个啥,但是感觉说太多也并不一定能够说得清楚,所以,请见下图所示:

trainData:
           

0 0
原创粉丝点击