《模式识别与智能计算》基于PCA的模板匹配法
前言:此篇博客主要介绍《模式识别与智能计算》中代码如何使用。
先决条件:《模式识别与智能计算》—MATLAB技术实现 软件配置
《模式识别与智能计算》第2章 特征的选择与优化
我假设你环境配置出错!不能运行手写识别程序。但是你要下载成功此数据:下载:《模式识别与智能计算》MATLAB技术实现(光盘文件)之后,可以在 手写数字分类文件夹内找到templet.mat
数据。
软件选择0类别对应templet中的pattern(1).feature;
需要条件:1. templet.mat
2.allsamples.mat:此文件下载后,内容是我自己的手写体识别;
2中数据可自行保存,保存方法如下:
allsamples.mat解释:
左图,分别是0~9结构体,每个数字有5个样本;右图,打开数字0样本,25*5,每一列为1个样本;
基于PCA的模板匹配法
在使用模板匹配法之前,先对特征进行主成分分析。按照一定的贡献值,提取前m个主分量,用较低维数的特征来进行分类。
1.实现步骤
2.编程代码
pcapro.m
文件:
% % % % % % % % % % % % % % % %
%函数名称::pcapro()
%参数:sample:待识别样品特征
%返回值:y1:样品库经过主成分分析后的主分量矩阵;y2:样品库经过主成分分析后的主分量向量
%函数功能:对样品库和待测样品用主成分分析法进行降维
% % % % % % % % % % % % % % % %
function [y1,y2]=pcapro(sample)
load templet pattern;%加载样品库
mixedsig=[];
sum1=0;
%将所有类别的所有样品合并到mixedsig
for i=1:10
sum1=sum1+pattern(i).num;
mixedsig=[mixedsig pattern(i).feature];
end
[Dim,NumofSampl]=size(mixedsig);%Dim为特征数,NumofSampl为样品总个数
dsig_cov=cov(mixedsig');%求mixedsig的协方差矩阵
%利用pcacov()函数从大到小排好序的协方差矩阵的特征值latent和相应特征向量pc
[pc,latent,tspuare]=pcacov(dsig_cov);
temp=0;con=0;m=0;
%根据贡献率取舍特征向量
sum2=sum(latent);
for i=1:25
if(con<0.9)
temp=temp+latent(i);
con=temp/sum2;
m=m+1;
else
break;
end
end
pc(:,m+1:25)=[];
%求待测样品主成分
x=sample'*pc; %此处和书中不同,因为我的数据是按照列 如按行可改为x=sample*pc;
%求样品库品成分
y=mixedsig'*pc;
y1=y';
y2=x';
pcaneartemplet.m
文件:
%函数名称:pcaneartemplet()
%参数:sample:待识别样品特征
%返回值:y:待识别样品所属类别
%函数功能:按照使用PCA的模板匹配法计算待测样品与样品库中的样品相似度
% % % % % % % % % % % % % % % % %
function y=pcaneartemplet(sample);
clc;
load templet pattern;
%对样品和样品库进行主成分分析
[pcapat,pcasamp]=pcapro(sample);
temp=0;
for i=1:10
pattern(i).feature=pcapat(:,temp+1:temp+pattern(i).num);
temp=temp+pattern(i).num;
end
d=0;%距离
min=[inf,0];
for i=1:10
for j=1:pattern(i).num
%计算待测样品与样品库间的最小距离
d=sqrt(sum((pattern(i).feature(:,j)-pcasamp).^2));
%求最小距离及其类号
if min(1)>d
min(1)=d;
min(2)=i-1;
end
end
end
%输出类别
y=min(2);
3.运行方法和结果
将pcaneartemplet.m、pcapro.m、templet.mat和allsamples.mat放同一目录下。输入:
运行结果:
ans = 0;
因为输入的样本为0,分类结果也为0,故分类正确!!!