图像识别实验报告.docx
《图像识别实验报告.docx》由会员分享,可在线阅读,更多相关《图像识别实验报告.docx(20页珍藏版)》请在冰豆网上搜索。
图像识别实验报告
图像识别实验报告
学院:
信息工程学院
专业:
信号与信息处理
******
学号:
**********
******
2010年7月5日
一实验内容:
采用基于二值数据的Bayes分类方法,基于最小错误率的Bayes分类方法和基于最小风险的Bayes分类方法三种算法,完成字符(0-9,A-Z)的识别:
二实验方法
1、Bayes公式
若已知总共有M类物体,以及各类在这d维特征空间的统计分布,具体说来是已知各类别wi=1,2,…,M的先验概率P(wi)及类条件概率密度函数P(X|wi)。
对于待测样品,Bayes公式可以计算出该样品分属各类别的概率,叫做后验概率,看X属于哪个类的可能性最大,就把X归于可能性最大的那个类,后验概率作为识别对象归属的依据。
Bayes公式如下:
类别的状态是一个随机变量,而某种状态出现的概率是可以估计的Bayes公式体现了先验概率、类概率密度函数、后验概率三者之间的关系。
(1)先验概率P(wi)
先验概率P(wi)针对M个事件出现的可能性而言,不考虑其他任何条件。
例如由统计资料表明总药品数为n,其中正常药品数为n1异常药品数为n2则
称P(wi)及P(w2)为先验概率。
显然在一般情况下正常药品占比例大,即P(wi)>P(w2),仅按先验概率来决策,就会把所有药品都划归为正常药品,并没有达到将正常药品与异常药品区分开的目的。
这表明由先验概率所提供的信息太少。
(2)类条件概率密度函数P(X|wi)
类条件概率密度函数P(X|wi)是指在已知某类别的特征空间中,出现特征值X的概率密度。
即第wi类样品它的属性X是如何分布的。
假定只有其一个特征进行分类,即d=1,并已知这两类的类条件概率密度函数分布,如图1所示,概率密度函数P(X|wi)是正常药品的属性分布,概率密度函数P(X|w2)是异常药品的属性分布。
图1、类条件概率
(3)后验概率
后验概率是指呈现状态X时,该样品分属各类别的概率,这个概率值可以作为识别对象归属的依据。
由于属于不同类的待识别对象存在着呈现相同观察值的可能,即所观察到的某一样品的特征向量为X,而在M类中又有不止一类可能呈现这一X值,它属于各类的概率又是多少呢?
这种可能性可用P(X|wi)表示。
可以利用Bayes公式来计算这种条件概率,称之为状态的后验概率P(wi|X)。
P(wi|X)是表示在X出现条件下,样品为wi类的概率。
2、基于最小错误率的Bayes决策
假定得到一个待识别量的特征X后,每个样品X有N个特征,即X=(x1,x2,…,xN)通过样品库,计算先验概率P(wi)及类条件概率密度函数P(wi|X),得到呈现状态X时,该样品分属各类别的概率,显然这个概率值可以作为识别对象判属的依据。
从后验概率分布图可见,在X值小时,药品被判为正常是比较合理的,判断错误的可能性小。
基于最小错误概率的贝叶斯决策就是按后验概率的大小做判决的。
这个规则又可以根据判别数目,写成不同的几种等价形式。
两类问题
若每个样品属于wi,w2类中的一类,已知两类的先验概率分别为P(wi)和P(w2)两类的类条件概率密度分别为P(X|wi)和P(X|w2)。
则任给一X,判断X的类别。
由Bayes公式可知:
由全概率公式可知:
其中M为类别。
对于两类问题
所以用后验概率来判别为:
判别函数还有另外两种形式,即似然比形式:
其中L(x)在统计学中称为似然比,而P(wi)/P(w2)称为似然比阈值,其对数形式:
3、基于最小风险的Bayes决策
上面讨论了使错误率最小的Bayes决策规则。
然而当接触到实际问题是,可以发现使错误率最小并不一定是一个普遍适用的最佳选择,如图2所示:
图2、基于最小错误率和基于最小风险分类比较
直线B的划分把正常药品误判为异常药品,这样会扩大总错误率,给企业带来一些损失:
直线A的划分将异常药品误判为正常药品,虽然是错误分类最小,但会使病人因失去正确的治疗而遭受极大地损失。
可见使错误率最小并不一定是最佳选择。
实践中,从根据不同性质的错误会引起不同程度的损失考虑出发,宁肯扩大一些总的错误率,但也要使总的损失减少。
这时直线B的划分为最实用。
这会引进一个与损失有关联的概念——风险,在做出决策时,要考虑所承担的风险。
基于最小风险的Bayes决策规则正是为了体现这一点而产生的。
基于最小错误率,在分类时取决于观测值X对各类的后验概率中之最大值,因而也就无法估计做出错误决策所带来的损失。
为此不妨将做出判决的依据,从单纯考虑后验概率最大值,改为对该观测值X条件下各状态后验概率要求加权和的方式,表示成:
其中ai代表将X判为wi类的决策;观测样品X实属于wj,由于采用ai决策而被判为wi时所造成的损失。
Ri则表示了观测值X被判为i类时损失的均值。
4、基于二值数据的Bayes分类方法
所谓二值数据,即各样品的每一特征只取数值“1”或“0”。
对于数字的分类问题,在每一个数字图像提取特征时,定义了N*N模板,在本程序中N=5,将每个样品的长度和宽度5等份,构成一个5*5模板,相当于将模板笼罩在对应的样品上,对于每一份内的像素个数进行累加统计,除以该模板每一份的面积总数。
设置阈值T=0.1,模板所对应的元素黑像素占有率大于T,则特征值取数值“1”;负责取“0”。
三实验步骤
1、基于二值数据的Bayes分类方法的实验步骤:
(1)计算先验概率P(wi),先验概率可由各类的样品数和样品总数近似计算,得
P(wi)=Ni/N,i=0,1,2,…,9
其中P(wi)为类别为数字i的先验概率,Ni位数字i的样品数,N为样品总数
(2)计算Pj(wi),再计算类条件概率P(X|wi)得
i=0,1,2,…,9,j=0,1,2…,24
Pj(wi)表示样品X(x0,x1,x2,…,x24)属于wi类条件下,X的第j个分量为1(xj=1)的概率估计值。
由此可以计算
P(xj=1|X∈wi)=Pj(wi)
P(xj=0|X∈wi)=1-Pj(wi)i=0,1,2,…,9,j=0,1,2,…,24
样品X的类条件概率为:
P(X|wi)=P{X=(x0,x1,x2,…,x24)|X∈wi}=∏j=024P(xj=a|X∈wi)
i=0,1,2,…,9
其中a=0或1。
(3)应用Bayes公式求后验概率,得
i=0,1,2,…,9
后验概率的最大值的类别(0~9)就是所要识别数字所属的类别。
算法实现代码:
/******************************************************************
*函数名称:
BayesErzhishuju()
*函数类型:
int
*函数功能:
基于二值数据的Bayes分类器,返回所要识别的数字的类别
******************************************************************/
intClassification:
:
BayesErzhishuju()
{
doublePw[10];//先验概率P(wj)=Nj/N
doubleP[10][25];//Pj(wi)wi:
wi类,j:
第j个特征
doublePXw[10];//类条件概率P(X|wj)
doublePwX[10];//后验概率P(wj|X)
inti,j;//求先验概率
intn[10];//各类样品数
intN=0;//样品总数
for(i=0;i<10;i++)
{
//各数字类别样品数
n[i]=pattern[i].number;
N+=n[i];//样品总数
}
for(i=0;i<10;i++)
Pw[i]=(double)n[i]/(double)N;//先验概率
for(i=0;i<10;i++)
{
for(j=0;j<25;j++)
{
intnumof1=0;//二值数据中1的个数
for(intk=0;knumof1+=pattern[i].feature[k][j]>0.1?
1:
0;
P[i][j]=(double)(numof1+1)/(double)(n[i]+2);
}
}
for(i=0;i<10;i++)
{
doublep=1;
for(intj=0;j<25;j++)
{
p*=(testsample[j]>0.1)?
P[i][j]:
1-P[i][j];
}
PXw[i]=p;
}
doublePX=0.0,maxP=0.0;
intnumber;
for(i=0;i<10;i++)
{
PX+=Pw[i]*PXw[i];
}
for(i=0;i<10;i++)
{
PwX[i]=Pw[i]*PXw[i]/PX;
if(PwX[i]>maxP)
{
maxP=PwX[i];
number=i;
}
}
returnnumber;
}
(4)实验效果图
基于二值数据的Bayes分类实现效果如图3所示:
2、基于最小错误率的Bayes分类实现的实验步骤
数字识别属于多类情况,每类样品呈正态分布。
(1)求出每一类样品的均值
Ni代表wi类的样品个数,n代表特征数目。
(2)求每一类的协方差矩阵
L代表样品在wi类的第l个样品,第j个特征值。
Xlj代表wi类的第l个样品,第j个特征值。
Xj代表wi类的Ni个样品第j个特征的平均值。
Xlk代表wi类的第l个样品,第k个特征值。
XK代表wi类的Ni个样品第k个特征的平均值。
wi类的协方差矩阵为:
(3)计算出出每一类的协方差矩阵的逆矩阵Si-1以及协方差矩阵的行列式{Si}。
(4)求出每一类的先验概率
P(wi)≈N1/N,i=0,1,2,…,9
其中P(wi)为类别为数字i的先验概率,N1为数字i的样品数,N为样品总数。
(5)将各个数值代入判别函数
(6)判别函数最大值所对应类别就是数字的类别。
算法实现代码:
/******************************************************************
*函数名称:
BayesLeasterror()
*函数类型:
int
*函数功能:
最小错误概率的Bayes分类器,返回所要识别的数字的类别
******************************************************************/
intClassification:
:
BayesLeasterror()
{
doubleX[25];//待测样品
doubleXmeans[25];//样品的均值
doubleS[25][25];//协方差矩阵
doubleS_[25][25];//S的逆矩阵
doublePw;//先验概率
doublehx[10];//判别函数
inti,j,k,n;
for(n=0;n<10;n++)//循环类别0~9
{
intnum=pattern[n].number;//样品个数
for(i=0;i<25;i++)Xmeans[i]=0.0;
for(k=0;k{
for(i=0;i<25;i++)
Xmeans[i]+=pattern[n].feature[k][i]>0.10?
1.0:
0.0;
}
for(i=0;i<25;i++)
Xmeans[i]/=(double)num;
doublemode[200][25];
for(i=0;ifor(j=0;j<25;j++)
mode[i][j]=pattern[n].feature[i][j]>0.10?
1.0:
0.0;
for(i=0;i<25;i++)
for(j=0;j<25;j++)
{
doubles=0.0;
for(k=0;ks=s+(mode[k][i]-Xmeans[i])*(mode[k][j]-Xmeans[j]);
s=s/(double)(num-1);
S[i][j]=s;
}
inttotal=0;
for(i=0;i<10;i++)
total+=pattern[i].number;
Pw=(double)num/(double)total;
for(i=0;i<25;i++)
for(j=0;j<25;j++)
S_[i][j]=S[i][j];
double(*p)[25]=S_;
brinv(*p,25);//S的逆矩阵
double(*pp)[25]=S;
doubleDetS;
DetS=bsdet(*pp,25);//S的行列式
for(i=0;i<25;i++)
X[i]=testsample[i]>0.10?
1.0:
0.0;
for(i=0;i<25;i++)
X[i]-=Xmeans[i];
doublet[25];
for(i=0;i<25;i++)
t[i]=0;
brmul(X,S_,25,t);
doublet1=brmul(t,X,25);
doublet2=log(Pw);
doublet3=log(DetS+1);
hx[n]=-t1/2+t2-t3/2;
}
doublemaxval=hx[0];
intnumber=0;
for(n=1;n<10;n++)
{
if(hx[n]>maxval)
{
maxval=hx[n];
number=n;
}
}
returnnumber;
}
(7)实验效果图
基于最小错误概率的Bayes分类实现效果如图4所示
3、基于最小风险的Bayes分类器实现步骤
(1)求出每一类样品的均值。
Ni代表wi类的样品个数,n代表特征数目。
(2)求每一类的协方差矩阵。
L代表样品在wi类的第l个样品,第j个特征值。
Xlj代表wi类的第l个样品,第j个特征值。
Xj代表wi类的Ni个样品第j个特征的平均值。
Xlk代表wi类的第l个样品,第k个特征值。
XK代表wi类的Ni个样品第k个特征的平均值。
wi类的协方差矩阵为:
(3)计算出出每一类的协方差矩阵的逆矩阵Si-1以及协方差矩阵的行列式{Si}。
(4)求出每一类的先验概率
P(wi)≈N1/N,i=0,1,2,…,9
其中P(wi)为类别为数字i的先验概率,N1为数字i的样品数,N为样品总数。
(5)计算后验概率P[i],i=0,1,…,9。
P[i]=-
(6)定义损失数组为loss[10][10],设初值为
如图5所示,ai代表将要判别为wi类的决策,wi代表自然类。
这样的计算结果与基于最小错误率的Bayes分类器相同。
图5、风险对话框
(7)计算每一类的损失risk[i];
risk[i]=
loss[i][j]P[j]
如图6所示可见第8个总风险值为最小。
(8)找出最小损失所对应的类,该类即是待测样本所属的类别。
图6、基于最小风险的Bayes结果显示
算法实现代码
/******************************************************************
*函数名称:
BayesLeastRisk(doubleloss[10][10])
*函数类型:
double*
*参数说明:
doubleloss[10][10]:
损失
*函数功能:
最小风险的Bayes分类器,返回各类的风险值
******************************************************************/
double*Classification:
:
BayesLeastRisk(doubleloss[10][10])
{
doubleX[25];//待测样品
doubleXmeans[25];//样品的均值
doubleS[25][25];//协方差矩阵S
doubleS_[25][25];//S的逆矩阵
doubleP[10];//后验概率
doublePw;//先验概率
doublehx[10];//判别函数
inti,j,k,n;
for(n=0;n<10;n++)//
{
intnum=pattern[n].number;//样品个数
//求样品均值
for(i=0;i<25;i++)
Xmeans[i]=0.0;
for(k=0;k{
for(i=0;i<25;i++)
Xmeans[i]+=pattern[n].feature[k][i]>0.2?
1.0:
0.0;
}
for(i=0;i<25;i++)
Xmeans[i]/=(double)num;
//求协方差矩阵
doublemode[200][25];
for(i=0;ifor(j=0;j<25;j++)
mode[i][j]=pattern[n].feature[i][j]>0.2?
1.0:
0.0;
for(i=0;i<25;i++)
for(j=0;j<25;j++)
{
doubles=0.0;
for(k=0;ks=s+(mode[k][i]-Xmeans[i])*(mode[k][j]-Xmeans[j]);
s=s/(double)(num-1);
S[i][j]=s;
}
//求先验概率
inttotal=0;//样品总数
for(i=0;i<10;i++)
total+=pattern[i].number;
Pw=(double)num/(double)total;
//求S的逆矩阵
for(i=0;i<25;i++)
for(j=0;j<25;j++)
S_[i][j]=S[i][j];
double(*p)[25]=S_;
brinv(*p,25);//S的逆矩阵
//求S的行列式
double(*pp)[25]=S;
doubleDetS;
DetS=bsdet(*pp,25);//S的行列式
//求判别函数
for(i=0;i<25;i++)
X[i]=testsample[i]>0.2?
1.0:
0.0;
for(i=0;i<25;i++)
X[i]-=Xmeans[i];
doublet[25];
for(i=0;i<25;i++)
t[i]=0;
brmul(X,S_,25,t);
doublet1=brmul(t,X,25);
doublet2=log(Pw);
doublet3=log(DetS+1);
P[n]=-t1/2+t2-t3/2;
}
for(n=0;n<10;n++)
{
doublet=0.0;
for(i=0;i<10;i++)
t+=loss[n][i]*P[i];
hx[n]=t;
}
return(double*)hx;
}
四实验结果:
利用Bayes分类器,本文对于需要识别的400个数字图像进行了识别测试,所测试的数字图像几乎包含了各种噪声,采用基于二值数据的Bayes分类法能正确识别的数字图像有80副,采用最小错误率的Bayes分类器能正确识别的数字图像有60副,采用最小风险的Bayes分类器能正确识别的数字图像有50副,其中识别错误的图像主要集中在‘0’和‘8’以及‘1’和‘7’。
贝叶斯决策理论是图像识别中的一个基本方法,最小错误率的Bayes分类法是以错误分类最小为依据进行分类,而最小风险的Bayes分类法是以风险最小为依据进行分类的,因为在实践中,根据不同性质的错误会引起不同程度的损失考虑出发,宁肯扩大一些总的错误率,但也要使总的损失减少。
从实验结果可以看出,基于二值数据的Bayes分类器的识别效果较好,因为基于二值数据的Bayes分类器是以后验概率最大作为分类的依据,也就是具有该特征的图像是某一类的概率最大,就认为该图像应该分到哪一个类,最小错误率的Bayes分类器是以判别函数最大值所对应的类别作为待识别的数字所在的类。
也就是使平均错误率最小,最小风险的Bayes分类器是以最小损失所对应的类作为待识别数字所在的类。