基于贝叶斯变换的手写识别数字(MFC+Opencv)

基于贝叶斯手写识别的关键还是在于统计学

以下是余下全文

一、什么是贝叶斯公式

P(Wi/X)=P(X/Wi)*P(Wi)/P(X)

二、贝叶斯公式和手写识别的关系(解释上述公式)

  • Wi:分类器(相当于数字’0’类、数字’1’类等)   X:输入样本(相当于输入识别的图片,样本是由特征组成在,也就是样本和特征有时候是可以等价理解的

  • P(Wi/X):当前输入样本X,将样本X归到Wi类的概率值。(越大,说明越有可能归到此类中)

  • P(X/Wi):在Wi类下面,样本值(特征)为X的概率。(已知一个人,此人有头发(特征)的概率)

  • P(Wi):Wi类下的样本数目占总样本数目的百分比(训练样本中,数字’0’类的样本数目有100张,总的样本数目为1000张,那么P(Wi)=100/1000)

  • P(X):可以展开为P(X/W1)*P(W1)+P(X/W2)*P(W2)+······+P(X/Wi)*P(Wi),某个样本(特征)的概率总和

三、具体实现步骤

1.预处理

采用的是只是添加了一个高斯过滤器(GaussianBlur)

2.图像分割

图像分割成7*7个子区域,每个子区域就是一个特征。

3.特征提取

图像在上一步中已经分割成7*7个子区域,每块区域的黑色像素点多于总的黑色像素点在每块区域的均值(总的像素点/(7*7))就设置为1,反之设置为0;(此处的阈值可以自定义,不一定是要均值,但是可以参考均值)

4.图像训练

训练关键的两个部分:

1.P(X/wi)的计算:由于X代表的特征向量,我们暂且将每个特征都假定为独立变量,也就是P(X/wi)=P(x1/wi)* P(x2/wi)* P(x3/wi)*…………,现在我们的问题在于如何求解P(x1/wi)P(x2/wi)等。在之前对训练样本做了特征提取之后,假定我们的样本数目为N,我们得到了N*25的矩阵,一行代表每张图像的特征向量,每列代表同一个特征,而我们要求的P(x1/wi)就是在同一列中指定的几行中值为1的数量除以指定的几行的行数。其中同一列代表了同一特征(x1),而制定的几行代表了是同一个分类(wi)。
2.P(wi)的计算:这个相当简单的,就是每类的数量除以总样本的数量。

5.图形识别

分别计算P(wi/X)概率,哪类概率大就是判定为分到哪类中。

此处的关键点:首先将图像进行特征提取,当第j个特征值为1的时候的概率为P(xj/wi),而当特征值为0的时候的概率为1-P(xj/wi).(P(xj/Wi)已经在训练中计算出来)

四、界面展示

识别界面

识别成功界面

五、源代码下载

手写识别数字源代码下载

数字样本数据下载

你可能感兴趣的:(机器学习)