实验课程名称:
模式识别
姓名: 王宇 班级: 20110813 学号: 2011081325
实验名称
图像的贝叶斯分类 K均值聚类算法 神经网络模式识别
规范程度 原理叙述 实验过程 实验结果 实验成绩
平均成绩 折合成绩
注:1、每个实验中各项成绩按照
5 分制评定,实验成绩为各项总和
2、平均成绩取各项实验平均成绩
3、折合成绩按照教学大纲要求的百分比进行折合
2014 年 6 月
实验一、 图像的贝叶斯分类
一、实验目的
将模式识别方法与图像处理技术相结合,
掌握利用最小错分概率贝叶斯分类器进行图像分类
的基本方法,通过实验加深对基本概念的理解。 二、实验仪器设备及软件 HP D538、MATLAB 三、实验原理 概念:
阈值化分割算法是计算机视觉中的常用算法, 像灰度取值范围内的灰度阈值,
对灰度图象的阈值分割就是先确定一个处于图
并根据
然后将图像中每个像素的灰度值与这个阈值相比较。
灰度值大于阈值的像素划分为一类,
比较的结果将对应的像素划分为两类, 小于阈值的划分
为另一类,等于阈值的可任意划分到两类中的任何一类。
最常用的模型可描述如下: 假设图像由具有单峰灰度分布的目标和背景组成, 景内部相邻像素间的灰度值是高度相关的,
处于目标和背
但处于目标和背景交界处两边的像素灰度值有较
大差别, 此时, 图像的灰度直方图基本上可看作是由分别对应于目标和背景的两个单峰直方 图混合构成。而且这两个分布应大小接近,且均值足够远,方差足够小,这种情况下直方图 呈现较明显的双峰。 类似地, 如果图像中包含多个单峰灰度目标, 的多峰。
上述图像模型只是理想情况, 有时图像中目标和背景的灰度值有部分交错。
这时如用全局阈
则直方图可能呈现较明显
值进行分割必然会产生一定的误差。分割误差包括将目标分为背景和将背景分为目标两大 类。实际应用中应尽量减小错误分割的概率,
常用的一种方法为选取最优阈值。
这里所谓的
最优阈值, 就是指能使误分割概率最小的分割阈值。 图像的直方图可以看成是对灰度值概率
那么直方图所代
如果概
分布密度函数的一种近似。 如一幅图像中只包含目标和背景两类灰度区域,
表的灰度值概率密度函数可以表示为目标和背景两类灰度值概率密度函数的加权和。 率密度函数形式已知,就有可能计算出使目标和背景两类误分割概率最小的最优阈值。 假设目标与背景两类像素值均服从正态分布且混有加性高斯噪声, 式识别中的最小错分概率贝叶斯分类器来解决。
上述分类问题可以使用模
以 p1 与 p2 分别表示目标与背景的灰度分布
概率密度函数, PP2 分别表示两类的先验概率,则图像的混合概率密度函数可用下式表 1 与 示为
p(x) P p (x) P p (x)
1 1
2
2
式中 p1 和 p2 分别为
1
p (x)
1
( x )
1 2
2
e 2
1
2
1
1
p ( x)
2
( x )
2 2
2
e 2
2
2
2
P1 P2 1
1 、
2 是针对背景和目标两类区域灰度均值
1 与
2 的标准差。若假定目标的灰度较亮,
其灰度均值为
2 ,背景的灰度较暗,其灰度均值为 1 ,因此有
1 2
现若规定一门限值
T 对图像进行分割, 势必会产生将目标划分为背景和将背景划分为目标这
T ,可令这两类错误概率为最小,则该阈值
T 即为最佳阈值。
两类错误。通过适当选择阈值
把目标错分为背景的概率可表示为
T
E1(T )
把背景错分为目标的概率可表示为
p2( x) dx
E2(T)
T
p1( x) dx
总的误差概率为
E(T ) P E (T ) PE (T )
2
1
1
2
为求得使误差概率最小的阈值
T ,可将 E(T ) 对T 求导并令导数为零,可得
P1p1(T )
P2 p2 (T )
代换后,可得
ln P
1
2 2
(T
2
)
1 2
(T 2
)
2 2 1
P
2
1
2
1
此时,若设
1 2
,则有
T
1
2
2
P
2
ln
2
1
2
P
1
若还有 P1
P2 的条件,则
T
1 与
1
2
2
这时的最优阈值就是两类区域灰度均值
2 的平均值。
上面的推导是针对图像灰度值服从正态分布时的情况, 如果灰度值服从其它分布, 依理也可
求出最优阈值来。一般情况下,在不清楚灰度值分布时,通常可假定灰度值服从正态分布。 在实际使用最优阈值进行分割的过程中,
需要利用迭代算法来求得最优阈值。
设有一幅数字
图像 f (x, y) ,混有加性高斯噪声,可表示为
g( x, y)
此处假设图像上各点的噪声相互独立,
f (x, y) n(x, y)
且具有零均值, 如果通过阈值分割将图像分为目标与
背景两部分,则每一部分仍然有噪声点随机作用于其上,于是,目标 表示为
g1 (x, y) 和 g2(x, y) 可
g1( x, y) g2(x, y)
迭代过程中,会多次地对
f1(x, y) n( x, y) f2 (x, y) n( x, y)
g1( x, y) 和 g2 (x, y) 求均值,则
E{ f (x, y) n( x, y)}
1
E{ g (x, y)}
1
E{ f (x, y)}
1
E{ g (x, y)}
2
E{ f ( x, y) n( x, y)}
2
E{ f (x, y)}
2
可见, 随着迭代次数的增加,目标和背景的平均灰度都趋向于真实值。 得的最佳阈值不受噪声干扰的影响。 四、实验步骤及程序 1、实验步骤
(1)确定一个初始阈值 T0 ,T0 可取为
因此,用迭代算法求
S
min
S
max
T
0
2
式中, Smin 和 Smax 为图像灰度的最小值和最大值。 (2)利用第 k 次迭代得到的阈值将图像分为目标
R1和背景 R2 两大区域,其中
R1 { f (x, y) | f (x, y) Tk } R2
{ f (x, y) |0 f (x, y) Tk}
(3)计算区域 R 和 R2 的灰度均值 S1 和 S2 。
1
(4)计算新的阈值 Tk 1 ,其中
T
S S
1
2
k
1
2
(5)如果 |Tk
Tk |小于允许的误差,则结束,否则
k k 1,转步骤(1
2、实验源程序
I=imread(
'1.jpg'
);
Im=rgb2gray(I);
subplot(121),imhist(Im);title( '? ± · ?í ?)'
ZMax=max(max(I)); ZMin=min(min(I)); TK=(ZMax+ZMin)/2; bCal=1; iSize=size(I); while (bCal) iForeground=0; iBackground=0; ForegroundSum=0; BackgroundSum=0; for i=1:iSize(1)
for j=1:iSize(2) tmp=I(i,j);
if (tmp>=TK)
iForeground=iForeground+1;
ForegroundSum=ForegroundSum+double(tmp);
else
iBackground=iBackground+1;
BackgroundSum=BackgroundSum+double(tmp);
end end end
ZO=ForegroundSum/iForeground; ZB=BackgroundSum/iBackground; TKTmp=double((ZO+ZB)/2); if (TKTmp==TK) bCal=0; else
2)。
TK=TKTmp; end end disp(strcat(
' μü ′ú oó μ??D?μ,£numo'2str(TK)));
newI=im2bw(I,double(TK)/255); subplot(121),imshow(I) title( title(
'?- í ???' ) ' · ???oó μ?í ???)'
subplot(122),imshow(newI)
五、实验结果与分析 1、实验结果
直 方 图
1200
原 图
像 1000
800
600
400
200
0 0
100
200
图 1 原图像以及其灰度直方图
原 图 像 分 割 后 的图 像
图 2 原图像以及分割后图像
2、实验结果分析 迭代后的阈值: 94.8064
实验中将大于阈值的部分设置为目标,
小于阈值的部分设置为背景, 分割结果大体上满足要
仍需进行一些人工调整才能将此阈值用于实
但当光照不均匀时, 图像中
求。实际过程中在利用迭代法求得最优阈值后,
验图像的分割, 虽然这种方法利用了图像中所有像素点的信息,
部分区域的灰度值可能差距较大,造成计算出的最优阈值分割效果不理想。 具体的改进措施分为以下两方面:
一方面, 在选取图片时, 该图片的两个独立的峰值不够明
使得分割的效果更
应在实验
显,因此在分割后产生误差, 应改进选择的图片的背景和物体的对比度,
好;另一方面, 实验程序中未涉及计算最优阈值时的迭代次数,无法直观的检测, 程序中加入此项,便于分析。
实验二、 K 均值聚类算法
一、实验目的
将模式识别方法与图像处理技术相结合,掌握利用 法,通过实验加深对基本概念的理解。 二、实验仪器设备及软件 HP D538、MATLAB、WIT 三、实验原理
K均值聚类法分为三个步骤: 初始化聚类中心
1、根据具体问题,凭经验从样本集中选出 2、用前 C个样本作为初始聚类中心。 3、将全部样本随机地分成 初始聚类
1、按就近原则将样本归入各聚类中心所代表的类中。
2、取一样本,将其归入与其最近的聚类中心的那一类中,重新计算样本均值,更新聚类中 心。然后取下一样本,重复操作,直至所有样本归入相应类中。 判断聚类是否合理
1、采用误差平方和准则函数判断聚类是否合理,不合理则修改分类。循环进行判断、修改 直至达到算法终止条件。 2、聚类准则函数
误差平方和准则函数(最小平方差划分)
c
e
i 1 x
i
K 均值聚类算法进行图像分类的基本方
C个比较合适的样本作为初始聚类中心。
C类,计算每类的样本均值,将样本均值作为初始聚类中心。
J
x m
i
2
1 mi
N
x
i x
i
3、单样本改进:每调整一个样本的类别就重新计算一次聚类的中心
2
j
j
2
d
ji
1 x m k
i
min x
l
ml k
i=1,2,...c 只调整一个样本
四、实验步骤及程序 1、实验步骤
理解 K 均值算法基本原理, 编写程序实现对自选图像的分类, 并将所得结果与 WIT 处理结果
进行对比。 K均值算法步骤:
1、给定类别数 C和允许误差 E
,k 1
max
2、初始化聚类中心 m k i
c
i
,
1,2,...,
2
2
3、修正
j
j
d
1 x m k
min x
mi k
ji
i
i
0 其他
i=1,2,......,c;j=1,2,...N
N
j
d x
ji
j 1
4、修正聚类中心
m k 1
N
i
d
ji
j 1
c
5、计算误差 e
2
mi k 1 m k
如果 e Emax 则结束,否则转( 3)i
i 1
2、实验源程序
clc clear tic
RGB= imread ( 'Water lilies.jpg'
);
%?á è ???
img=rgb2gray(RGB);
[m,n]=size(img);
subplot(2,2,1),imshow(img);title( ' í ?ò ? ?- í ???' )
subplot(2,2,2),imhist(img);title( ' í ??t ?- í ???μ??ò ?è ?± · hold
off ;
img=double(img); for i=1:200 c1(1)=25; c2(1)=125; c3(1)=200; %????è y??3?ê ???à à ?DD?
r=abs(img-c1(i)); g=abs(img-c2(i)); b=abs(img-c3(i)); %?????÷ ?????ò ?è ó ???à à ?DD?μ??à à ?
r_g=r-g;
?í)?'
g_b=g-b; r_b=r-b;
n_r=find(r_g<=0&r_b<=0); n_g=find(r_g>0&g_b<=0); n_b=find(g_b>0&r_b>0); i=i+1;
c1(i)=sum(img(n_r))/length(n_r); %???ù ó Dμí ?ò ?è ?ó oí è ????ù £?× ÷ ?a??ò ???μí
%?° ?ò × ?D?μ???à à ?DD? %?° ?ò ?D??μ?ò ?????à à ?DD? %?° ?ò × ?′ó μ ???à à ?DD?
?ò ?è ?DD?
c2(i)=sum(img(n_g))/length(n_g); %???ù ó Dμí ?ò ?è ?ó oí è ????ù £?× ÷???ò ?è ?DD?
c3(i)=sum(img(n_b))/length(n_b); %???ù ó Dμí ?ò ?è ?ó oí è ????ù £?× ÷?ò ?è ?DD?
d1(i)=abs(c1(i)-c1(i-1)); d2(i)=abs(c2(i)-c2(i-1)); d3(i)=abs(c3(i)-c3(i-1));
if d1(i)<=0.001&&d2(i)<=0.001&&d3(i)<=0.001 R=c1(i); G=c2(i); B=c3(i); k=i;
break ; end end R G B
img=uint8(img); img(find(img subplot(2,2,3),imshow(img);title( ' í ?è y ?? à à oó μ?í ??)?' subplot(2,2,4),imhist(img);title( ' í ??? ?? à à oó μ?í ????± · ?í) ?' 五、实验结果与分析 1.WIT 结果 ?a??ò ????D ?a??ò ????? 图 3 WIT 聚类分析系统分析界面 图 4 WIT 聚类分析系统分析结果 聚类类别数 3 聚类中心 R=18.8709 迭代次数 256 运行时间 60.159ms 2、K 均值聚类结果 G=93.3122 B=190.678 图一 原 图 像 8000 6000 4000 2000 0 图二 原 图 像 的 灰 度直 方 图 0 图 三 聚 类后 的 图 像 4 100 200 图四 聚 类 后 的 图 像直 方 图 x 10 4 2 0 0 100 200 图 5 K 均值聚类分析结果 聚类类别数 3 聚类中心 R =19.9483 G =94.4184 B =192.3320 迭代次数 8 运行时间 2.278493 seconds 小结:K 均值聚类方法和 WIT 系统操作后对应的聚类中心误差较小, 分别是 19.9483 94.4184 192.3320 和 18.8709 93.3122 190.678。说明 K 均值聚类分析方法误差较小, 但是相较于 WIT 系统分析的时间, K 均值聚类时间较长,迭代次数较多。 实验三、神经网络模式识别 一、实验目的 掌握利用感知器和 BP 网进行模式识别的基本方法,通过实验加深对基本概念的理解。 二、实验仪器设备及软件 HP D538、MA TLAB 三、实验原理 设计线性可分实验 线性分类器原理: 已知一样本集, 如果有一个线性分类器能把每个样本正确分类, 则称这组样本集为线性可分 的,否则称为线性不可分的。 如果样本集是线性可分的, 则必然存在一个线性分类器能把每 个样本正确分类。 贝叶斯分类器是在错误率或风险下为最优的分类器。 率或者风险是“次优”的,但对于所采用的准则函数是最优的。 线性分类器的设计步骤: 1、有一已知类别的样本集 H 线性分类器针对错误 2、确定一准则函数 J J 是 H , w, w 的函数 0 策” -w , w 0 - 极值解对应最好的“决 3、利用最优化技术求出准则函数极值解 w , w0 10 个以上,训练及分类步骤齐全, 设计线性分类器对线性可分样本集进行分类,样本数目 记录分类器训练的迭代次数和训练时间。 奇异样本对网络训练的影响 奇异样本: 该样本向量同其他样本向量比较起来特别大或特别小时, 将很长。 设计实验考察奇异样本对感知机训练的影响, 计解决此问题的方案并实验验证。 分类线性不可分样本 利用线性分类器对线性不可分样本进行分类,考察训练时间及迭代次数。 BP 法分类原理: 根据样本希望输出与实际输出之间的平方误差最小, 修正权系数。一般为三层前馈神经网络,激励函数为 网络训练所花费的时间 比较有无奇异点时的训练时间及迭代次数, 设 利用梯度下降法, 从输出层开始, 逐层 Sigmoid 函数。 ij jk 前向传播阶段: 输入层 输入节点:图像特征分量值 输出节点: Oi 隐层 输入节点: I i xi w O ij i 输出节点: O i 1 I i 1 e xp 输出层 输入节点: I k w O ik i 输出节点: O k 1 - I k 1 exp 反向传播阶段: 1 E 2 k ? yk y k 2 利用梯度下降法令误差函数最小 1 e x f x x e 1 e y 1 y 2 激励函数 f 的导数: y f x 1 x 利用反向传播使某一隐层节点受所有输出层节点影响 1、BP 采用 S 函数,输出不宜设为 1 或 0,可设为 0.9 或 0.1。 2、权系数初始化:不应将初始值设为相同,否则在学习过程中始终不变,可设为随机值。 3、步长的选择:应设为可变步长,以防止震荡。 4、局部最小问题: BP 算法是非线性优化算法,初始值设置不当,可能陷入局部极小。 5、前馈网络结构:输入节点数为模式维数,输出节点数一般为类别数,隐层节点数尚无明 确方法,实验确定。 利用 BP 网对该样本集进行分类,考察训练时间及迭代次数并作对比。 四、实验步骤及程序 1、实验步骤 感知器实验: 1、设计线性可分实验,要求训练样本 2、奇异样本对网络训练的影响 3、以线性不可分样本集训练分类器 BP 网实验:利用 BP 网对上述线性不可分样本集进行分类 2、实验源程序 (1)感知器 close clear; clc;tic; %P?aê ?è ?ê ?á ? P=[-5 -7 -4 -1 0 -5 4 2 -4 -2 1 4 4 3 1 -2;0 -5 4 2 -4 1 4 1 -1 -3 -1 7 -2 -3 5 -5]; %T?a??± ê ê ?á ? T=[1 0 1 1 0 1 1 0 1 0 0 1 0 0 1 0]; figure,plotpv(P,T); net=newp(minmax(P),1); E=1;n=0; %?μá · ?D?a?÷ é ??- í ??? while (sse(E)) [net,y,E]=adapt(net,P,T); n=n+1; perf(n)=sse(E); linehandle=plotpc(net.IW{1},net.b{1},linehandle);drawnow; end toc %?????ó 2??ú ?? figure,plot(perf); %?????ó 2?± ??ˉ?ú ?? %????′y· ?à à ê y?Yμ?í ? %′′?¨ ?D?a?÷ é ??- í ??? all ; 10 个以上 linehandle=plotpc(net.IW{1},net.b{1}); (2)奇异点 clear; clc;tic; %P?aê ?è ?ê ?á ? P=[-3 -1 -5 4 2 -4 -2 1 4 3 1 -3;5 2 1 4 1 -1 -3 -1 -2 -4 5 -6]; %T?a??± ê ê ?á ? T=[1 1 1 1 0 1 0 0 0 0 1 0]; figure,plotpv(P,T); %????′y· ?à à ê y?Yμ?í ? net=newp(minmax(P),1); %′′?¨ ?D?a?÷ é ??- í ??? linehandle=plotpc(net.IW{1},net.b{1}); E=1;n=0; %?μá · ?D?a?÷ é ??- í ??? while (sse(E)) [net,y,E]=adapt(net,P,T); n=n+1; perf(n)=sse(E); linehandle=plotpc(net.IW{1},net.b{1},linehandle);drawnow; end toc %?????ó 2??ú ?? figure,plot(perf); %?????ó 2?± ??ˉ?ú ?? (3)BP网络 close all ; clear; clc;tic; %P?aê ?è ?ê ?á ? P=[-5 -7 -4 -1 0 -5 4 2 -4 -2 1 4 4 3 1 -2;0 -5 4 2 -4 1 4 1 -1 -3 -1 7 -2 -3 5 -5]; %T?a??± ê ê ?á ? T=[1 0 1 0 0 1 1 0 1 0 0 1 0 0 1 0]; figure,plotpv(P,T); %????′y· ?à à ê y?Yμ?í ? net=newff(minmax(P),[5,5,1],{ 'tansig' , 'purelin' %μ± ?° ê ?è ?2?è ¨ ?μoí ?D?μ inputWeights=net.IW{1,1}; inputbias=net.b{1}; %%μ± ?° í ???2?è ¨ ?μoí ?D?μ layerWeights=net.LW{2,1}; layerbias=net.b{2}; %é è ???μá · 2?ê y net.trainParam.show=300; net.trainParam.lr=0.05; net.trainParam.mc=0.9; net.trainParam.epochs=1000; net.trainParam.goal=1e-4; tic %μ÷ó ?TRAINGDM? ?·¨?μá ·BPí??? [net,tr]=train(net,P,T); toc A=sim(net,P); E=T-A; MSE=mse(E); 五、实验结果与分析 , 'logsig' }, 'trainlm' ); 1、感知器结果 Vectors to be Classified 10 ) 2 ( P 迭代次数训练时间8 6 4 2 0 -2 -4 -6 -8 -10 -8 -6 -4 -2 0 2 4 6 8 P(1) 8 7 6 5 4 3 2 1 0 1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3 3 次 3.093490 seconds 2、奇异点结果 Vectors to be Classified 8 6 4 2 ) 2 ( P 0 -2 -4 -6 -8 -10 -8 -6 -4 -2 0 P(1) 2 4 6 6 5 4 3 2 1 0 1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3 迭代次数 训练时间 3 次 0.270504 seconds 3、BP 网络结果 Vectors to be Classified 10 8 6 4 ) 2 ( P 2 0 -2 -4 -6 -8 -10 -8 -6 -4 -2 P(1) 0 2 4 6 8 0 Best Training Performance is 4.3132e-05 at epoch 11 Train 10 Best Goal ) e s m ( r o r r E d e r a u q S n a e M -1 10 -2 10 -3 10 -4 10 -5 10 0 1 2 3 4 5 6 7 8 9 10 11 11 Epochs 迭代次数 训练时间 小结: 11 次 1 seconds 1.感知器网络通过网络训练得到的结果矢量与目标矢量做差,得到的误差平方和与 0 比较, 若不为 0,则继续经过感知器网络直到它能够将输入的样本分开并且结果和目标矢量一致, 即误差平方和为 0,实验中经过了 3 次迭代最终得到结果。 2.奇异点对于实验训练数据产生较大影响,影响了正常的训练速度,增加了迭代次数,应通 过 learnpn 函数去除奇异点。 2.当输入训练数据线性不可分的前提下,实验数据在 BP 网络法下进行 11 次目标训练之后, BP 达到了目标要求,训练的结果和目标的误差收敛于程序中定义的误差,所以经过训练的 网络可以对线性不可分网络进行分类。每次运行的 BP 网络可以得到不同的结果。 因篇幅问题不能全部显示,请点此查看更多更全内容