当前位置: 代码迷 >> 综合 >> 【图像识别】基于模板匹配和主成分分析实现笔检测附matlab代码
  详细解决方案

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

热度:97   发布时间:2023-12-03 20:06:23.0

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代码问题可私信交流。

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

  相关解决方案