简介

在模式识别中一个最基本的方法,就是模板匹配法(template matching),它基本上是一种统计识别方法。 为了在图像中检测出已知形状的目标物,我们使用这个目标物的形状模板(或窗口)与图像匹配,在约定的某种准则下检测出目标物图像,通常称其为模板匹配法。它能检测出图像中上线条、曲线、图案等等。它的应用包括:目标模板与侦察图像相匹配;文字识别和语音识别等。

原理

我们采用以下的算式来衡量模板T(m,n)与所覆盖的子图Sij(i,j)的关系,已知原始图像S(W,H),如图所示:

利用以下公式衡量它们的相似性:

上述公式中第一项为子图的能量,第三项为模板的能量,都和模板匹配无关。第二项是模板和子图的互为相关,随(i,j)而改变。当模板和子图匹配时,该项由最大值。在将其归一化后,得到模板匹配的相关系数:

当模板和子图完全一样时,相关系数R(i,j) = 1。在被搜索图S中完成全部搜索后,找出R的最大值Rmax(im,jm),其对应的子图Simjm即位匹配目标。显然,用这种公式做图像匹配计算量大、速度慢。我们可以使用另外一种算法来衡量T和Sij的误差,其公式为:

计算两个图像的向量误差,可以增加计算速度,根据不同的匹配方向选取一个误差阀值E0,当E(i,j)>E0时就停止该点的计算,继续下一点的计算。

最终的实验证明,被搜索的图像越大,匹配的速度越慢;模板越小,匹配的速度越快;阀值的大小对匹配速度影响大;

改进的模板匹配算法

将一次的模板匹配过程更改为两次匹配;

第一次匹配为粗略匹配。取模板的隔行隔列数据,即1/4的模板数据,在被搜索土上进行隔行隔列匹配,即在原图的1/4范围内匹配。由于数据量大幅减少,匹配速度显著提高。同时需要设计一个合理的误差阀值E0:

E0 = e0 * (m + 1) / 2 * (n + 1) / 2

式中:e0为各点平均的最大误差,一般取40~50即可;

m,n为模板的长宽;

第二次匹配是精确匹配。在第一次误差最小点(imin, jmin)的邻域内,即在对角点为(imin -1, jmin -1), (Imin + 1, jmin + 1)的矩形内,进行搜索匹配,得到最后结果。

流程图

算法实现的关键问题是进行匹配,求最小距离,其解决方法是和训练集的样品逐一进行距离的计算,最后找出最相邻的样品得到类别号。

function varargout = face(varargin)
% FACE MATLAB code for face.fig
%      FACE, by itself, creates a new FACE or raises the existing
%      singleton*.
%
%      H = FACE returns the handle to a new FACE or the handle to
%      the existing singleton*.
%
%      FACE('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in FACE.M with the given input arguments.
%
%      FACE('Property','Value',...) creates a new FACE or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before face_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to face_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help face% Last Modified by GUIDE v2.5 18-Dec-2014 12:02:18% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @face_OpeningFcn, ...'gui_OutputFcn',  @face_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before face is made visible.
function face_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to face (see VARARGIN)% Choose default command line output for face
handles.output = hObject;% Update handles structure
guidata(hObject, handles);% UIWAIT makes face wait for user response (see UIRESUME)
% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.
function varargout = face_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structure
varargout{1} = handles.output;% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% read image to be recognize
global im;
[filename, pathname] = uigetfile({'*.bmp'},'choose photo');
str = [pathname, filename];
im = imread(str);
axes( handles.axes1);
imshow(im);% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)global im
global reference
global W
global imgmean
global col_of_data
global pathname
global img_path_list% 预处理新数据
im = double(im(:));
objectone = W'*(im - imgmean);
distance = 100000000;% 最小距离法,寻找和待识别图片最为接近的训练图片
for k = 1:col_of_datatemp = norm(objectone - reference(:,k));if(distance>temp)aimone = k;distance = temp;aimpath = strcat(pathname, '/', img_path_list(aimone).name);axes( handles.axes2 )imshow(aimpath)end
end% 显示测试结果
% aimpath = strcat(pathname, '/', img_path_list(aimone).name);
% axes( handles.axes2 )
% imshow(aimpath)

【人脸识别】基于模板匹配算法实现人脸识别matlab源码相关推荐

  1. 【笔检测】基于模板匹配+PCA笔检测matlab源码

    ​ 一.简介 1 PCA PCA(Principal Component Analysis)是常用的数据分析方法.PCA是通过线性变换,将原始数据变换为一组各维度线性无关的数据表示方法,可用于提取数据 ...

  2. 【图像处理基础】基于matlab霍夫变换直线识别(拟合角平分线)【含Matlab源码 2575期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像处理基础]基于matlab霍夫变换直线识别(拟合角平分线)[含Matlab源码 2575期] 点击上面蓝色字体,直接付费下载,即可. ...

  3. 【图像去噪】基于最小二乘方滤波实现图像去噪含Matlab源码

    1 简介 基于最小二乘方滤波实现图像去噪含Matlab源码​ 2 部分代码 function varargout = zuixiaoercheng(varargin)% ZUIXIAOERCHENG ...

  4. matlab代做mhslogic,MATLAB代做|FPGA代做|simulink代做——基于遗传算法的车间布局优化MATLAB源码...

    MATLAB代做|FPGA代做|simulink代做--基于遗传算法的车间布局优化MATLAB源码 添加时间:2019-12-8 来源:本站整理 基于遗传算法的车间布局优化MATLAB源码 车间布局优 ...

  5. matlab和投影寻踪,基于遗传算法的投影寻踪模型Matlab源码

    基于遗传算法的投影寻踪模型Matlab源码 %% "投影寻踪+遗传算法优化"的主仿真程序 % GreenSim团队原创作品,转载请注明 % Email:greensim@http: ...

  6. 【图像识别】基于模板匹配算法求解车牌识别问题matlab代码含GUI界面

    1 简介 随着经济社会的迅速发展,人民对生活水平的要求也不断提高,从而引起汽车的数量的增加.给出行带来便捷的同时,车辆的管理问题也日益显著.车牌识别系统是指能将监控中运动的车辆的汽车牌照信息从复杂背景 ...

  7. 【车牌识别】基于模板匹配算法的车牌识别门禁系统附matlab代码

    1 简介 随着社会的进步,汽车数量日益增加,城市交通状况越来越受到人们的重视,如何进行有效的交通管理成为目前亟待解决的问题.针对此问题,人们相继研制出了各种交通道路监管系统,各种各样的车牌识别系统也应 ...

  8. 【车牌识别】基于matlab GUI阈值分割车牌识别(带面板)【含Matlab源码 721期】

    ⛄一.车牌识别简介 1 车牌图像处理 车牌图像处理主要有五个组成部分:图像灰度化.图像二值化.图像边缘检测.图像形态学运算和图像滤波处理.它是车牌识别系统中最根本且最基础的操作,车牌图像处理的好坏情况 ...

  9. 【裂缝识别】基于matlab GUI路面裂缝识别(带面板)【含Matlab源码 1648期】

    ⛄一.简介 1 案例背景 随着国家对公路建设的大力投入,我国的公路通车总里程己经位居世界前列,这样进一步促进了我国经济建设的发展.随着公路的大量投运,公路日常养护和管理已经成为制约公路运营水平提高的瓶 ...

  10. 【图像识别】基于 Haar分类器实现五官定位matlab源码含 GUI

    一.简介 1 Haar分类器的前世今生 人脸检测属于计算机视觉的范畴,早期人们的主要研究方向是人脸识别,即根据人脸来识别人物的身份,后来在复杂背景下的人脸检测需求越来越大,人脸检测也逐渐作为一个单独的 ...

最新文章

  1. java基础 知识点
  2. oracle里的ols机制,Oracle ASM的AU(Allocation units)分配
  3. 邬贺铨:区块链技术将确保物联网隐私和安全
  4. js中判断-0 ,js无穷数Infinity
  5. Box2D教程3-刚体绑定外观
  6. BZOJ1693: [Usaco2007 Demo]Asteroids
  7. response细节点
  8. jq苹果手机全屏下点击无效果_苹果系统自带外挂?无需越狱也可录制动作脚本...
  9. Linux打印介绍【转贴】
  10. CCF-CSP认证备考要点
  11. Latex:TexStudio的使用
  12. Go语言实战 - 网站性能优化第一弹“七牛云存储”
  13. rabbitmq使用_RabbitMQ 简介以及使用场景
  14. Ubuntu Eclipse 解决中文乱码
  15. 完美解决 WinRAR V5.XX的广告弹窗
  16. 【CSRF-01】跨站请求伪造漏洞基础原理及攻防
  17. windows无法访问共享文件 所有解决方法(非复制粘贴的烂大街处理方法)
  18. 双重差分法之PSM - DID
  19. 数据结构习题——第一章 绪论
  20. docker java -jar_使用Docker安装Java镜像运行jar包方法

热门文章

  1. Qt官方示例Demo介绍
  2. 【算法设计与分析】01 算法涉及的研究内容概述
  3. CCNA学习指南第六章
  4. 安装LoadRunner时提示缺少vc2005_sp1_with_atl_fix_redist解决方案
  5. 吃一堑长一智,作为程序员的我们记住这几点,2021年Android开发实战
  6. 单片机C语言程序设计实训100例大集合
  7. Java使用POI导出Excel
  8. 详解贪心算法的几个经典问题(代码详解)
  9. windows如何在局域网下共享文件(传输文件、修改文件)
  10. 人生七大纲要——道、德、仁、义礼、智、信