基于模式识别的手写汉字识别毕业设计论文(3)
MFC中的CObject类是MFC中其他大多数类的根类和基类,他不但提供许多有用的特征,还包括对文件串行化的支持,运行时的类信息和对象诊断的输出等;另外,CObject类具有最低限度的成员函数和数据,从CObject类派生类所花的代价是最低的。因此,我们选用CObject类作为CDib类的父类。它的定义如下:
class CDib : public CObject
{public:
RGBQUAD* m_pRGB;
BYTE* m_pData;
UINT m_numberOfColors;
BOOL m_valid;
BITMAPFILEHEADER bitmapFileHeader;
BITMAPINFOHEADER* m_pBitmapInfoHeader;
BITMAPINFO* m_pBitmapInfo;
BYTE* pDib; DWORD size;
public:
CDib();~CDib();
char m_fileName[256];
char* GetFileName();BOOL IsValid();
DWORD GetSize();UINT GetWidth();UINT GetHeight();
UINT GetNumberOfColors();
RGBQUAD* GetRGB(); BYTE* GetData();
BITMAPINFO* GetInfo();
WORD PaletteSize(LPBYTE lpDIB);
WORD DIBNumColors(LPBYTE lpDIB); [来源:http://Doc163.com]
void SaveFile(const CString filename);
public:
void LoadFile(const char* dibFileName);
void SetHeight(UINT height);
void SetWidth(UINT width);
};
第3章 分类器设计
3.1 特征空间优化设计问题
确定合适的特征空间是设计模式识别系统一个十分重要,甚至最为关键的问题。如果所选用的特征空间能使同类物体分布具有紧致性,不同类别物体彼此分开,即各类样品能分布在该特征空间中彼此分割开的区域内,这就为分类器设计提供良好的基础。反之,如果不同类别的样品在该特征空间中混杂在一起,再好的设计方法也无法提高分类器的准确性。
特征空间的设计往往是一个逐步优化的过程,设计的初期阶段,选择的特征空间维数较高,需要对它进行改造,改造的目的在于提高某方面的性能,因此又称为特征的优化问题。一般说要对初始的特征空间进行优化就是为了降维,即将初始的高维特征向量改成一个维数较低的空间。优化后的特征空间应该更有利于后续的分类计算。对特征空间进行优化有两种基本方法,一是特征选择,另一种是特征的优化组合。
1、特征选择
在模式识别中特征提取是首先要解决的问题。为了对样品进行准确的识别,需要进行特征选择或特征压缩。特征选择指对原始数据进行抽取,抽取那些对区别不同类别最为重要的特征,而舍去那些对分类并无多大贡献的特征,能得到反映分类本质的特征。如果区别不同类别的特征都能从输入数据中找到,这时自动模式识别问题就简化为匹配和查表,模式识别就不困难了。 [资料来源:http://www.doc163.com]
2、特征提取
假设已有D维特征向量空间,Y={y1,y2,…,yD},特征的组合优化问题涉及特征选择和特征提取两部分。特征选择是指从原有的D维特征空间中删去一些特征描述量,从而得到精简后的特征空间。在这个特征空间中,样品由d维空间的特征向量描述:X={x1,x2,…,xd}, d<D。由于X只是Y的一个子集,因此每个分量xi必然能在原特征集中找到其对应的描述量xi=yj。
特征提取则是找到一个映射关系:
A:Y X (3.1)
使新样品特征描述维数比原维数低。其中每个分量xi是原特征向量各分量的函数,即
xi=xi(y1,y2,…,yD) (3.2)
因此这两种降维的基本方法是不同的。在实际应用中可将两者结合起来使用,比如先进行特征选择,即从原有的D维特征空间,删去一些特征描述量,从而得到精简后的特征空间,然后再进一步特征提取,或反过来。
总之,特征选择与特征提取的任务是求出一组对分类最有效的特征,有效是在特征维数减少到同等水平时,其分类性能最佳。
[来源:http://www.doc163.com]
3.2分类器设计准则
模式识别分类问题是指根据待识别对象所呈现的观察值,将其分到某个类别中去。具体步骤如下:
第一步:建立特征空间中的训练集,已知训练集里每个点所属类别。
第二步:从这些条件出发,寻求某种判别函数或判别准则,设计判决函数模型。
第三步:根据训练集中的样品确定模型中的参数。
第四步:将这一模型用于判决,利用判决函数或判别准则去判别每个未知类别的点应该属于哪一类。
模式识别的基本框架——制定准则函数,实现准则函数极值化。常用的准则有以下几种。
1、最小错分率准则
完全以减少分类错误为原则,这是一个通用原则,它使错分类的样品数量最小。
2、最小风险准则
当接触到实际问题时,可以发现使错误率最小不一定是一个普遍适用的最佳选择。有的分类系统对错误率大小并不看重,而是要考虑错分类的不同后果,为使总的损失最小,有时宁肯将错分率加大。因此引入风险、损失这些概念,以便在决策时兼顾不同后果的影响。在实际中计算损失与风险是复杂的,在使用数学公式计算时,往往用赋予不同权值来表示。在做出决策时,要考虑所承担的风险。基于最小风险的贝叶斯决策规则是为了体现这一点而产生的。
3、近邻准则
近邻准则是分段线形判别函数的一种典型方法。这种方法主要依据同类物体在特征空间具有聚类特性的原理。同类物体由于其性质相近,它们在特征空间中应具有聚类的现象,因此可以利用这种性质产生分类决策的规则。例如有两类样品,可以求出某一类的平均值,对于任何一个未知样品,先求出它到各个类的平均值距离,判断距离哪个类近就属于哪个类。
4、Fisher准则
根据两类样品一般类内密集,类间分离的特点,寻找线性分类器最佳的法线向量,使两类样品在该方向上的投影满足类内尽可能密集,类间尽可能分开。相反如果把它们投影到任意一根直线上,有可能不同类别的样品就混在一起了,无法区分。如果把投影直线旋转一定的角度,就有可能找到一个方向,样品投影到这个方向直线上,各类样品就能很好的分开。如何找到一个最好方向及如何实现向最好方向投影的变换,这正是Fisher算法要解决的基本问题。
5、感知准则
感知准则函数以使错分类样品到分界面距离之和最小为原则。采用错误提供信息实现迭代修正的学习原理。用错分类提供的信息修正错误,这种思想对机器学习的发展以及人工神经元网络的发生发展产生深远影响。其优点是通过错分类样品提供的信息对分类器函数进行修正,这种准则是人工神经元网络多层感知器的基础。
3.3类器设计基本方法
在d维特征空间已经确定的前提下,讨论的分类器设计问题是一个选择什么准则,使用什么方法,将已确定的d 维特征空间划分为决策域的问题。分类器设计有两种基本方法:模板匹配法和判别函数法。
1、模板匹配法
将待分类样品与标准模板进行比较,看与哪个模板匹配程度更相似,从而确定待测试样品的分类。而近邻准则在原理上属于模板匹配。它将训练样品集中的每个样品都作为模板,用测试样品与每个模板做比较,看与哪个模板最相似(即为近邻),就按最近似的模板的类别作为自己的类别。
2、判别函数法
设计基于判别函数法的分类方法有两种:基于概率统计的分类法和几何分类法。
①直接使用Bayes决策需要首先得到有关样品总体分布的知识,包括各类先验概率P(w1)及类条件概率密度函数,计算出样品的后验概率P(w1|X),并以此作为产生判别函数的必要数据,设计出相应的判别函数与决策面。当各类样品近似于正态分布时,可以算出使错误率最小或风险最小的分界面及相应的分界面方程。因此如果训练样品处于近似的正态分布,可以用Bayes决策方法对分类器进行设计。
②几何分类法
由于一个模式通过某种变换映射为一个特征向量后,该特征向量可以理解为特征空间的一个点,在特征空间中,属于一个类的点集,总是在某种程度上与属于另一个类的点集相分离,各个类之间是确定可分的。因此如果能够找到一个分离函数(线性或非性形函数),把不同类的点集分开,则分类任务就解决了。几何分类器不依赖于条件概率密度的知识,可以理解为通过几何的方法,把特征空间分解为相应与不同类别的子空间。而且呈线形的分离函数,将使计算简化。分离函数又分为线性判别函数和非线性判别函数。 [资料来源:http://doc163.com]
3.4 判别函数
无论是设计一个基于概率统计的分类器,还是设计一个几何分类器,最终都转化为判别函数的形式。
1、二类情况
对于只有简单的两类情况,判别函数形式如图2-1所示,根据计算结果的符号将X分类。
图2-1 两类分类器形式 [资料来源:http://Doc163.com]
假定判别函数d(X)是X的线性函数,d(X)=WTX+W0,用矢量
X= T来表示模式,一般的线性判别函数形式为:
(3.3)
式中W0= 称为权矢量或参数矢量。
2、多类情况
对于多类别问题,假如有M类模式 ,它们对应于M类图像。对于M个类别,就要给出M个判别函数: ,各个判别函数构成分类器,基本形式如图3-1所示:
图3-2 判别函数构成的多类分类器
对于线性情况,判别函数形式为
(3.4)
其中 , 。
3.5训练与学习
所谓模式识别的学习与训练是从训练样品提供的数据中找出某种数学式子的最优解,这个最优解使分类器得到一组参数,按这组参数设计的分类器使人们设计的某种准则达到极值。确定分类决策的具体数学公式是通过分类器设计这个过程确定的。这个过程称为训练与学习的过程。
训练与学习的过程中的训练集是指一个已知的样品集,在监督学习方法中用它来开发模式分类器。在本系统中,自己手写的50个汉字字符,从这50个字符中提取信息组成特征库,这50个字符就是训练集。
训练与学习的过程中的测试集就是识别时随机用手写的汉字。
第4章 模板匹配分类器识别汉字系统的实现
4.1系统的功能描述
本系统能够识别“中”、“华”、“人”、“民”、“共”、“和”、“国”、“万”、“岁”、“!”共10个字符。
系统的功能有:
1.一幅240*240的手写汉字的输入和浏览。
2.手写汉字的保存和特征提取及特征的保存。
3.每个汉字样品数查看,手写汉字的识别。
4.2模板匹配法的理论基础
在图象识别技术中,模板匹配是比较简单的方法。模板匹配就是把未知图像和一个标准的图像比较,看它们是否相同或相似。下面讨论两类别和多类别的情况。
1、两类别
设有两个标准手写汉字A、B,其特征向量为d维向量: , 。任何一个待识别的手写汉字X,它的特征向量为 ,当我们判别X是A还是B时可以计算X与A、B之间的距离,X与哪个样板距离近,就属于哪个类,这就是最小距离算法。
任意两点x,y之间的距离定义为:
(4.1)
若 d(X,XA)<d(X,XB),则X属于A类,反之属于B类。 [版权所有:http://DOC163.com]
2、多类别
设有M个类别: ,每类有wi个向量表示,则有:
(4.2)
对于任意手写汉字X,
(4.3)
计算距离d(Xi,X),若存在某一个i,使
则X属于wi类。
4.3特征类的设计
在VC++中,对图像进行操作,在第二章中,我们介绍了CDib类,它能提供图像打开、保存等功能,能提供图像数据区指针、图像长度、宽度等信息。为了识别物体,还需要对图像中的进行分割,特征提取,提供各种算法。为此,可以从CDib类派生出GetFeature类,它可以找到手写汉字位置,获得手写的特征;将手写汉字保存到样品库中。