《模式识别与智能计算》模板匹配法

《模式识别与智能计算》模板匹配法

模板匹配法应该是最简单的模式识别方法。可谁让我是小白呢,学习一下。

理论基础

​ 就是把未知样品和一个标准模板相比,看它们是否相同或相似。主要讨论两类别情况。

两类别

​ 设有两个标准样品模板为 A B ,其特征向量为 n 维特征: X A = ( x A 1 , x A 2 , , x A n ) T X B = ( x B 1 , x B 2 , , x B n ) T 。任何一个待识别的样品X,其特征向量为: X = ( x 1 , x 2 , , x n ) T ,那么,他是 A 还是 B ?

​ 用模板匹配方法来识别,若 X = X A ,则该样品为 A ,若 X = X B ,则该样品为 B 。最简单的识别方法就是利用距离来判别。

最小距离判别法:如果X距离 X A 比距离 X B 近,则 X 属于 X A ,否则属于 X B

任意两点 X , Y 之间的距离:

d ( X , Y ) = [ i = 1 n ( x i y i ) 2 ] 1 2

根据距离远近可作为判据,构成距离分类器,其判别法则为:
{ d ( X , X A ) < d ( X , X B ) X A d ( X , X A ) > d ( X , X B ) X B

实现步骤

  1. 待测样品 X 与训练集里每个样品 X i 的距离为 d ( X , Y ) = [ i = 1 n ( x i y i ) 2 ] 1 2 ;
  2. 循环计算待测样品和训练集中各已知样品之间的距离,找出距离待测样品最近的已知样品,该已知样品的类别就是待测样品的类别。


编程代码

%函数名称:neartemplet()
%参数:sample:待识别样品特征
%返回值:y:待识别样品所属类别
%函数功能:按照模板匹配法计算待测样品与样品库中的样品相似度
function y=neartemplet(sample);
clc;
load templet pattern;%加载样品库
d=0;%距离
min=[inf,0];
for i=1:10
    for j=1:pattern(i).num 
        %计算待测样品与样品库样本间的最小距离     
        d=sqrt(sum((pattern(i).feature(:,j)-sample').^2));
        %求最小距离及其类号
        if min(1)>d
            min(1)=d;
            min(2)=i-1;
        end
    end 
end
%输出类别
y=min(2);

其中: d ( X , Y ) = [ i = 1 n ( x i y i ) 2 ] 1 2 代码如下:

d=sqrt(sum((pattern(i).feature(:,j)-sample').^2));


运行结果

sample来源:手写识别题个人样本
templet来源:《模式识别与智能计算》MATLAB技术实现(光盘文件)
不做过多解释了,详情请看此系列博客。

这里写图片描述

ans = 3

因为使用数字3的样本,故结果正确。

猜你喜欢

转载自blog.csdn.net/missxy_/article/details/81119219