欢迎光临散文网 会员登陆 & 注册

【图像识别】基于模板匹配算法识别人脸matlab源码含GUI

2021-08-26 00:07 作者:Matlab工程师  | 我要投稿

一、简介

应用统计方法解决模式识别问题时,一再碰到的问题之一就是维数问题。在低维空间里解析上或计算上行得通的方法,在高维空间里往往行不通。因此,降低维数有时就会成为处理实际问题的关键。

1 问题描述:如何根据实际情况找到一条最好的、最易于分类的投影线,这就是Fisher判别方法所要解决的基本问题。
考虑把d维空间的样本投影到一条直线上,形成一维空间,即把维数压缩到一维。然而,即使样本在d维空间里形成若干紧凑的互相分得开的集群,当把它们投影到一条直线上时,也可能会是几类样本混在一起而变得无法识别。但是,在一般情况下,总可以找到某个方向,使在这个方向的直线上,样本的投影能分得开。下图可能会更加直观一点:

在这里插入图片描述


在这里插入图片描述


类效果。因此,上述寻找最佳投影方向的问题,在数学上就是寻找最好的变换向量w*的问题。

2 Fisher准则函数的定义
几个必要的基本参量:
2.1在d维X空间
(1)各类样本的均值向量mi

在这里插入图片描述


(2)样本类内离散度矩阵Si和总样本类内离散度矩阵Sw

在这里插入图片描述


其中Sw是对称半正定矩阵,而且当N>d时通常是非奇异的。(半正定矩阵:特征值都不小于零的实对称矩阵;非奇异矩阵:矩阵的行列式不为零)
(3)样本类间离散度矩阵Sb

在这里插入图片描述


Sb是对称半正定矩阵。
3.2 在一维Y空间
(1)各类样本的均值

在这里插入图片描述


(2)样本类内离散度 和总样本类内离散度

在这里插入图片描述


我们希望投影后,在一维Y空间中各类样本尽可能分得开些,即希望两类均值之差越大越好,同时希望各类样本内部尽量密集,即希望类内离散度越小越好。
Fisher准则函数定义

在这里插入图片描述


在这里插入图片描述


因此,

在这里插入图片描述


将上述各式代入JF(w),可得:

在这里插入图片描述


其中Sb为样本类间离散度矩阵,Sw为总样本类内离散度矩阵。

4 最佳变换向量w*的求取

在这里插入图片描述


在这里插入图片描述

二、源代码

function varargout = faceCore(varargin) % FACECORE M-file for faceCore.fig %      FACECORE, by itself, creates a new FACECORE or raises the existing %      singleton*. % %      H = FACECORE returns the handle to a new FACECORE or the handle to %      the existing singleton*. % %      FACECORE('CALLBACK',hObject,eventData,handles,...) calls the local %      function named CALLBACK in FACECORE.M with the given input arguments. % %      FACECORE('Property','Value',...) creates a new FACECORE or raises the %      existing singleton*.  Starting from the left, property value pairs are %      applied to the GUI before faceCore_OpeningFunction gets called.  An %      unrecognized property name or invalid value makes property application %      stop.  All inputs are passed to faceCore_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 % Copyright 2002-2003 The MathWorks, Inc. % Edit the above text to modify the response to help faceCore % Last Modified by GUIDE v2.5 28-May-2009 10:21:26 % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name',       mfilename, ...                   'gui_Singleton',  gui_Singleton, ...                   'gui_OpeningFcn', @faceCore_OpeningFcn, ...                   'gui_OutputFcn',  @faceCore_OutputFcn, ...                   'gui_LayoutFcn',  [] , ...                   'gui_Callback',   []); if nargin && ischar(varargin{1})    gui_State.gui_Callback = str2func(varargin{1}); end if nargout    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else    gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT % --- Executes just before faceCore is made visible. function faceCore_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 faceCore (see VARARGIN) % Choose default command line output for faceCore handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes faceCore wait for user response (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = faceCore_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) global TrainDatabasePath ; TrainDatabasePath = uigetdir(strcat(matlabroot,'\work'), '训练库路径选择...' ); % --- 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 TestDatabasePath; TestDatabasePath = uigetdir(strcat(matlabroot,'\work'), '测试库路径选择...'); % --- Executes on button press in pushbutton3. %function pushbutton3_Callback(hObject, eventdata, handles) % hObject    handle to pushbutton3 (see GCBO) % eventdata  reserved - to be defined in a future version of MATLAB % handles    structure with handles and user data (see GUIDATA) %[filename,pathname]=uigetfile({'*.jpg';'*.bmp'},''); %str=[pathname  filename]; %im=imread(str); %axes(handles.axes1); %imshow(im); % --- Executes on button press in pushbutton4. function pushbutton4_Callback(hObject, eventdata, handles) % hObject    handle to pushbutton4 (see GCBO) % eventdata  reserved - to be defined in a future version of MATLAB % handles    structure with handles and user data (see GUIDATA) global TrainDatabasePath ; global TestDatabasePath; global T; T = CreateDatabase(TrainDatabasePath); %[m V_PCA V_Fisher ProjectedImages_Fisher] = FisherfaceCore(T); % --- Executes on button press in pushbutton5. function pushbutton9_Callback(hObject, eventdata, handles) % hObject    handle to pushbutton5 (see GCBO) % eventdata  reserved - to be defined in a future version of MATLAB % handles    structure with handles and user data (see GUIDATA) global im; [filename,pathname]=uigetfile({'*.jpg';'*.bmp'},'选择测试图片...'); str=[pathname  filename]; im=imread(str); axes(handles.axes1); imshow(im); function OutputName = Recognition(TestImage, m_database, V_PCA, V_Fisher, ProjectedImages_Fisher) % Recognizing step.... % % Description: This function compares two faces by projecting the images into facespace and % measuring the Euclidean distance between them. % % Argument:      TestImage              - Path of the input test image % %                m_database             - (M*Nx1) Mean of the training database %                                         database, which is output of 'EigenfaceCore' function. % %                V_PCA                  - (M*Nx(P-1)) Eigen vectors of the covariance matrix of %                                         the training database %                V_Fisher               - ((P-1)x(C-1)) Largest (C-1) eigen vectors of matrix J = inv(Sw) * Sb %                ProjectedImages_Fisher - ((C-1)xP) Training images, which %                                         are projected onto Fisher linear space % % Returns:       OutputName             - Name of the recognized image in the training database. % % See also: RESHAPE, STRCAT % Original version by Amir Hossein Omidvarnia, October 2007 %                     Email: aomidvar@ece.ut.ac.ir                   Train_Number = size(ProjectedImages_Fisher,2); %%%%%%%%%%%%%%%%%%%%%%%% Extracting the FLD features from test image %InputImage = imread(TestImage); temp=TestImage(:,:,1); %temp = InputImage(:,:,1); [irow icol] = size(temp); InImage = reshape(temp',irow*icol,1); Difference = double(InImage)-m_database; % Centered test image ProjectedTestImage = V_Fisher' * V_PCA' * Difference; % Test image feature vector

三、运行结果

在这里插入图片描述


在这里插入图片描述

 


【图像识别】基于模板匹配算法识别人脸matlab源码含GUI的评论 (共 条)

分享到微博请遵守国家法律