1 简介

本文主要阐述的是在模板匹配框架下,如何设计图像识别系统的问题.由于硬件设备的不断翻新,图像信息的精度以及规模也在快速提升,这就要求计算机要具备更加高效的图像识别能力,以此来保证处理信息的效率.

【图像识别】基于模板匹配和主成分分析实现笔检测附matlab代码_模板匹配

2 部分代码

%笔的识别

global im;%使用全局变量

imgdata=[];%训练图像矩阵

for i=1:2

    for j=1:4

        a=imread(strcat('ORL\pen',num2str(i),'_',num2str(j),'.bmp'));

        b=a(1:176*132); % b是列矢量 1*M,其中M=23232

        b=double(b);

        imgdata=[imgdata; b]; % imgdata 是一个M * N 矩阵,imgdata中每一行数据一张图片,M=400

    end;

end;

imgdata=imgdata'; %每一列为一张图片

imgmean=mean(imgdata,2); % 平均图片,N维列向量

for i=1:8

    minus(:,i) = imgdata(:,i)-imgmean; % minus是一个N*M矩阵,是训练图和平均图之间的差值

end;


covx=minus'* minus; % M * M 阶协方差矩阵

[COEFF, latent,explained] = pcacov(covx'); %PCA,用协方差矩阵的转置来计算以减小计算量


% 选择构成95%的能量的特征值

i=1;

proportion=0;

while(proportion < 95)

    proportion=proportion+explained(i);

    i=i+1;

end;

p=i-1;

% 训练得到特征笔坐标系

i=1;

while (i<=p && latent(i)>0)

    base(:,i) = latent(i)^(-1/2)*minus * COEFF(:,i); % base是N×p阶矩阵,用来进行投影,除以latent(i)^(1/2)是对笔图像的标准化

    i = i + 1;

end


% 将训练样本对坐标系上进行投影,得到一个 p*M 阶矩阵为参考

reference = base'*minus;

% 测试过程——在测试图片文件夹中选择图片,进行查找测试


im=imread('待测笔\待测笔.bmp');

a=im;

%b=a(1:38400);

b=double(b);

b=b';


object = base'*(b-imgmean);

% 绘出待测图片

subplot(2,3,1); 

imshow(a); 

title(['待测笔']);   


distance=100000;


%最小距离法,寻找和待识别图片最为接近的训练图片

for k=1:8 

   temp= norm(object - reference(:,k));

   if (distance > temp)

     which = k;

     distance = temp;

   end;

end;


%找出距离最近的图片所在的位置

num1 = ceil(which/5);%第num1个文件夹

num2 = mod(which,5);%第num2个图片文件

if (num2 == 0)

    num2 = 5;

end;


fprintf('此图为第%d个的图片\n',num1);


for i=1:4           %输出矩阵

    P=imread(strcat('ORL\pen',num2str(num1),'_',num2str(i),'.bmp'));

    subplot(2,3,i+1); 

    imshow(P); 

    title(['图库',num2str(i)]);

end

3 仿真结果

【图像识别】基于模板匹配和主成分分析实现笔检测附matlab代码_模板匹配_02

4 参考文献

[1]刘永峰, 陈有, 姬新智,等. 基于模板匹配的图像识别方法和系统:. 

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

【图像识别】基于模板匹配和主成分分析实现笔检测附matlab代码_协方差矩阵_03