1 简介
本文主要阐述的是在模板匹配框架下,如何设计图像识别系统的问题.由于硬件设备的不断翻新,图像信息的精度以及规模也在快速提升,这就要求计算机要具备更加高效的图像识别能力,以此来保证处理信息的效率.
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 仿真结果
4 参考文献
[1]刘永峰, 陈有, 姬新智,等. 基于模板匹配的图像识别方法和系统:.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。