银行卡号识别(三) --- 基于k最近邻的数字识别测
来源:互联网 发布:海典医药软件数据库 编辑:程序博客网 时间:2024/04/29 08:08
- 博客分类:
在进行完预处理之后,我们可以开始用算法识别数字了。首先我们不做那么复杂的、一连串银行卡数字的识别,而是做一个数字的测试。
一、机器算法的引入-----K近邻算法
K最近邻(k-Nearest Neighbour,KNN)分类算法是一个理论上比较成熟的算法,也是最简单的机器学习算法之一。顾名思义,k最近邻实际上就是取和待分类物最相似的k个模板,然后这k个模板中所占比例最高的类别就是最后决定的类别。
思路就是这么简单,那么这个最近的距离如何计算呢?往往用欧氏距离等经典距离来衡量模板和待分类物的“距离”。
KNN很适合在有大量样本的情况下进行使用,当然,这也带来了速度较慢的问题。
于是KNN就非常简单了。
伦理片 http://www.dotdy.com/
伦理片 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:
- 银行卡号识别(三) --- 基于k最近邻的数字识别测
- 基于k近邻(KNN)的手写数字识别
- 基于K-近邻算法识别手写数字的实现
- opencv 学习之 基于K近邻的数字识别
- 基于K-近邻算法的手写数字识别研究
- k近邻 - 手写数字识别
- OpenCV手写数字字符识别(基于k近邻算法)
- OpenCV手写数字字符识别(基于k近邻算法)
- OpenCV手写数字字符识别(基于k近邻算法)
- OpenCV手写数字字符识别(基于k近邻算法)
- Python徒手实现识别手写数字—图像识别算法(K最近邻)
- 基于K近邻法的手写数字图像识别
- 基于Tensorflow的MNIST手写数字识别(三)
- OCR-基于OpenCV、Tesseract的银行卡号识别
- 手写识别系统(k-近邻算法)
- 【机器学习】k-近邻算法应用之手写数字识别
- k近邻算法识别手写数字Python实现
- K近邻分类器(KNN)手写数字(MNIST)识别
- 数据聚合和交易明细查询实现
- leetcode -- Maximal Square -- DP重点
- 10015---MySQL--事务
- HDOJ 题目4553 约会安排(线段树分等级覆盖)
- 支付宝即时支付java后台总结
- 银行卡号识别(三) --- 基于k最近邻的数字识别测
- centos nginx和svn开机自启动
- C --struct union内存分配
- 如何判断一个时间段是否和另一个时间段冲突?
- 异常处理:SSH整合中Hibernate的saveOrUpdate方法失效的问题
- android调用jni
- 低权限向高权限发送消息 (例子 拖拽文件)
- python--常用函数总结
- nim博弈 Codeforces603C Lieges of Legendre