【模式识别】银行监控系统之人脸识别【Matlab 096期】

一、简介

用matlab做的多人场景的人脸识别。先预处理,人脸定位,分割,训练,PCA降维求出协方差矩阵,人脸特征值,然后每个测试的人脸分别进行矩阵求列,作差对比,结果最小的就是目标人脸,输出识别结果,这个设计有可视化GUI用户操作界面。

二、源代码

function varargout = Main(varargin)
% MAIN MATLAB code for Main.fig
%      MAIN, by itself, creates a new MAIN or raises the existing
%      singleton*.
%
%      H = MAIN returns the handle to a new MAIN or the handle to
%      the existing singleton*.
%
%      MAIN('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in MAIN.M with the given input arguments.
%
%      MAIN('Property','Value',...) creates a new MAIN or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before Main_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to Main_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 Main

% Last Modified by GUIDE v2.5 21-Nev-2020 01:12:36

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Main_OpeningFcn, ...
                   'gui_OutputFcn',  @Main_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 Main is made visible.
function Main_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 Main (see VARARGIN)

% Choose default command line output for Main
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes Main wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = Main_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;



function edit1_Callback(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit1 as text
%        str2double(get(hObject,'String')) returns contents of edit1 as a double


% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit2_Callback(hObject, eventdata, handles)
% hObject    handle to edit2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit2 as text
%        str2double(get(hObject,'String')) returns contents of edit2 as a double


% --- Executes during object creation, after setting all properties.
function edit2_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit3_Callback(hObject, eventdata, handles)
% hObject    handle to edit3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit3 as text
%        str2double(get(hObject,'String')) returns contents of edit3 as a double


% --- Executes during object creation, after setting all properties.
function edit3_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit3 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit4_Callback(hObject, eventdata, handles)
% hObject    handle to edit4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit4 as text
%        str2double(get(hObject,'String')) returns contents of edit4 as a double


% --- Executes during object creation, after setting all properties.
function edit4_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
set(handles.edit1,'string','思路:提前制作好合影中人员的人脸库,进行训练好')

% --- Executes on button press in pushbuttonfacedetect.
function pushbuttonfacedetect_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonfacedetect (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

%如果还没载入图像
if(~isfield(handles,'I'))
     str = sprintf('你还未载入图像!');
    set(handles.reporttext,'string',str);
    return
end

I = handles.I;
[faceI,box] = facedetect(I);

if(~isempty(faceI)) %如果检测出人脸
    axes(handles.axes1)
    rectangle('Position',box,'EdgeColor','r');%原图圈起来
  
    axes(handles.axes2)
    imshow(faceI)

else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


handles.faceI = faceI;
% Update handles structure
guidata(hObject, 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)


% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
   set(handles.edit2,'string','思路:从合影中,定位到人脸,并且分割到对应框里面显示')


% --- Executes on button press in pushbuttonfacedetect.
function pushbuttonfacedetect_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonfacedetect (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

%如果还没载入图像
if(~isfield(handles,'I'))
     str = sprintf('你还未载入图像!');
    set(handles.reporttext,'string',str);
    return
end

I = handles.I;
[faceI,box] = facedetect(I);

if(~isempty(faceI)) %如果检测出人脸
    axes(handles.axes1)
    rectangle('Position',box,'EdgeColor','r');%原图圈起来
  
    axes(handles.axes2)
    imshow(faceI)

else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


handles.faceI = faceI;
% Update handles structure
guidata(hObject, 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)


% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
set(handles.edit3,'string','思路:分别对每个人脸进行识别出是谁')


% --- Executes on button press in pushbuttonfacedetect.
function pushbuttonfacedetect_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonfacedetect (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

%如果还没载入图像
if(~isfield(handles,'I'))
     str = sprintf('你还未载入图像!');
    set(handles.reporttext,'string',str);
    return
end

I = handles.I;
[faceI,box] = facedetect(I);

if(~isempty(faceI)) %如果检测出人脸
    axes(handles.axes1)
    rectangle('Position',box,'EdgeColor','r');%原图圈起来
  
    axes(handles.axes2)
    imshow(faceI)

else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


handles.faceI = faceI;
% Update handles structure
guidata(hObject, 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)


% --- Executes on button press in pushbutton4.
function pushbutton4_Callback(hObject, eventdata, handles)
set(handles.edit4,'string','拓展:应用场景可换为教室考勤,宿舍考勤,动车站等公共场所')

% 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)



function edit5_Callback(hObject, eventdata, handles)
% hObject    handle to edit5 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit5 as text
%        str2double(get(hObject,'String')) returns contents of edit5 as a double


% --- Executes during object creation, after setting all properties.
function edit5_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit5 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit6_Callback(hObject, eventdata, handles)
% hObject    handle to edit6 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit6 as text
%        str2double(get(hObject,'String')) returns contents of edit6 as a double


% --- Executes during object creation, after setting all properties.
function edit6_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit6 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit7_Callback(hObject, eventdata, handles)
% hObject    handle to edit7 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit7 as text
%        str2double(get(hObject,'String')) returns contents of edit7 as a double


% --- Executes during object creation, after setting all properties.
function edit7_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit7 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit8_Callback(hObject, eventdata, handles)
% hObject    handle to edit8 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit8 as text
%        str2double(get(hObject,'String')) returns contents of edit8 as a double


% --- Executes during object creation, after setting all properties.
function edit8_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit8 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in pushbutton9.
function pushbutton9_Callback(hObject, eventdata, handles)
I = imread('5.bmp');%读取图片

%存入到handles内,以便被别的函数调用
handles.I = I;
handles.faceI = I;
% Update handles structure
load trainresult.mat

if(isfield(handles,'faceI') && ~isempty(handles.faceI)) %如果检测出人脸
   
    faceI = handles.faceI;
    [M,N,color] = size(faceI);%获取图片的大小,以及色彩类型
    if color == 3%如果是彩色图片
        I = rgb2gray(faceI);%转为灰度图片
    else
        I = faceI;
    end
    % I1= imadjust(I1,stretchlim(I1));%灰度变换,图像增强
    if (isequal([M,N],goalsize) == 0)%如果不是64*64的
        I = imresize(I,goalsize);%转为固定的64*64的
    end

    samplesnum = size(PCAfeatures,1);%训练样本个数

    I1 = I(:);%图像转为1列矩阵
    I1 = double(I1');
    Z=(I1-mA);%减去均值
    feature1 = Z*V;%降维得到PCA特征
    dd = zeros(1,samplesnum);
    for j = 1:samplesnum%遍历训练样本
        feature2 = PCAfeatures(j,:);%取出一个特征
        d = mydist(feature1,feature2);%计算特征之间的距离
        dd(j) = d;%距离存起来 用于排序
    end
    [value,minindex] = min(dd);%最小值,以及所在位置
    
   
    
    classlabel = trainlabel(minindex);%测出的类别序号

    %str = sprintf('识别完成,识别此照片为第%d人。',classlabel);
    set(handles.edit5,'string',classlabel);
    drawnow
    
   
    
else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


guidata(hObject, handles);


% hObject    handle to pushbutton9 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton10.
function pushbutton10_Callback(hObject, eventdata, handles)

I = imread('6.bmp');%读取图片

%存入到handles内,以便被别的函数调用
handles.I = I;
handles.faceI = I;
% Update handles structure
load trainresult.mat

if(isfield(handles,'faceI') && ~isempty(handles.faceI)) %如果检测出人脸
   
    faceI = handles.faceI;
    [M,N,color] = size(faceI);%获取图片的大小,以及色彩类型
    if color == 3%如果是彩色图片
        I = rgb2gray(faceI);%转为灰度图片
    else
        I = faceI;
    end
    % I1= imadjust(I1,stretchlim(I1));%灰度变换,图像增强
    if (isequal([M,N],goalsize) == 0)%如果不是64*64的
        I = imresize(I,goalsize);%转为固定的64*64的
    end

    samplesnum = size(PCAfeatures,1);%训练样本个数

    I1 = I(:);%图像转为1列矩阵
    I1 = double(I1');
    Z=(I1-mA);%减去均值
    feature1 = Z*V;%降维得到PCA特征
    dd = zeros(1,samplesnum);
    for j = 1:samplesnum%遍历训练样本
        feature2 = PCAfeatures(j,:);%取出一个特征
        d = mydist(feature1,feature2);%计算特征之间的距离
        dd(j) = d;%距离存起来 用于排序
    end
    [value,minindex] = min(dd);%最小值,以及所在位置
    
   
    
    classlabel = trainlabel(minindex);%测出的类别序号

    %str = sprintf('识别完成,识别此照片为第%d人。',classlabel);
    set(handles.edit4,'string',classlabel);
    drawnow
    
    %axes(handles.axes1)
    %imshow(faceI)
    strtitle = sprintf('识别结果第%d人',classlabel);
    title(strtitle)

    
else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


guidata(hObject, handles);
% hObject    handle to pushbutton10 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton11.
function pushbutton11_Callback(hObject, eventdata, handles)

I = imread('7.bmp');%读取图片

%存入到handles内,以便被别的函数调用
handles.I = I;
handles.faceI = I;
% Update handles structure
load trainresult.mat

if(isfield(handles,'faceI') && ~isempty(handles.faceI)) %如果检测出人脸
   
    faceI = handles.faceI;
    [M,N,color] = size(faceI);%获取图片的大小,以及色彩类型
    if color == 3%如果是彩色图片
        I = rgb2gray(faceI);%转为灰度图片
    else
        I = faceI;
    end
    % I1= imadjust(I1,stretchlim(I1));%灰度变换,图像增强
    if (isequal([M,N],goalsize) == 0)%如果不是64*64的
        I = imresize(I,goalsize);%转为固定的64*64的
    end

    samplesnum = size(PCAfeatures,1);%训练样本个数

    I1 = I(:);%图像转为1列矩阵
    I1 = double(I1');
    Z=(I1-mA);%减去均值
    feature1 = Z*V;%降维得到PCA特征
    dd = zeros(1,samplesnum);
    for j = 1:samplesnum%遍历训练样本
        feature2 = PCAfeatures(j,:);%取出一个特征
        d = mydist(feature1,feature2);%计算特征之间的距离
        dd(j) = d;%距离存起来 用于排序
    end
    [value,minindex] = min(dd);%最小值,以及所在位置
    
   
    
    classlabel = trainlabel(minindex);%测出的类别序号

    %str = sprintf('识别完成,识别此照片为第%d人。',classlabel);
    set(handles.edit4,'string',classlabel);
    drawnow
    
    %axes(handles.axes1)
    %imshow(faceI)
    strtitle = sprintf('识别结果第%d人',classlabel);
    title(strtitle)

    
else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


guidata(hObject, handles);
% hObject    handle to pushbutton11 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton12.
function pushbutton12_Callback(hObject, eventdata, handles)
I = imread('8.bmp');%读取图片

%存入到handles内,以便被别的函数调用
handles.I = I;
handles.faceI = I;
% Update handles structure
load trainresult.mat

if(isfield(handles,'faceI') && ~isempty(handles.faceI)) %如果检测出人脸
   
    faceI = handles.faceI;
    [M,N,color] = size(faceI);%获取图片的大小,以及色彩类型
    if color == 3%如果是彩色图片
        I = rgb2gray(faceI);%转为灰度图片
    else
        I = faceI;
    end
    % I1= imadjust(I1,stretchlim(I1));%灰度变换,图像增强
    if (isequal([M,N],goalsize) == 0)%如果不是64*64的
        I = imresize(I,goalsize);%转为固定的64*64的
    end

    samplesnum = size(PCAfeatures,1);%训练样本个数

    I1 = I(:);%图像转为1列矩阵
    I1 = double(I1');
    Z=(I1-mA);%减去均值
    feature1 = Z*V;%降维得到PCA特征
    dd = zeros(1,samplesnum);
    for j = 1:samplesnum%遍历训练样本
        feature2 = PCAfeatures(j,:);%取出一个特征
        d = mydist(feature1,feature2);%计算特征之间的距离
        dd(j) = d;%距离存起来 用于排序
    end
    [value,minindex] = min(dd);%最小值,以及所在位置
    
   
    
    classlabel = trainlabel(minindex);%测出的类别序号

    %str = sprintf('识别完成,识别此照片为第%d人。',classlabel);
    set(handles.edit4,'string',classlabel);
    drawnow
    
    %axes(handles.axes1)
    %imshow(faceI)
    strtitle = sprintf('识别结果第%d人',classlabel);
    title(strtitle)

    
else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


guidata(hObject, handles);

% hObject    handle to pushbutton12 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)



function edit9_Callback(hObject, eventdata, handles)
% hObject    handle to edit9 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit9 as text
%        str2double(get(hObject,'String')) returns contents of edit9 as a double


% --- Executes during object creation, after setting all properties.
function edit9_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit9 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit10_Callback(hObject, eventdata, handles)
% hObject    handle to edit10 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit10 as text
%        str2double(get(hObject,'String')) returns contents of edit10 as a double


% --- Executes during object creation, after setting all properties.
function edit10_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit10 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit11_Callback(hObject, eventdata, handles)
% hObject    handle to edit11 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit11 as text
%        str2double(get(hObject,'String')) returns contents of edit11 as a double


% --- Executes during object creation, after setting all properties.
function edit11_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit11 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit12_Callback(hObject, eventdata, handles)
% hObject    handle to edit12 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit12 as text
%        str2double(get(hObject,'String')) returns contents of edit12 as a double


% --- Executes during object creation, after setting all properties.
function edit12_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit12 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in pushbutton13.
function pushbutton13_Callback(hObject, eventdata, handles)
I = imread('9.bmp');%读取图片

%存入到handles内,以便被别的函数调用
handles.I = I;
handles.faceI = I;
% Update handles structure
load trainresult.mat

if(isfield(handles,'faceI') && ~isempty(handles.faceI)) %如果检测出人脸
   
    faceI = handles.faceI;
    [M,N,color] = size(faceI);%获取图片的大小,以及色彩类型
    if color == 3%如果是彩色图片
        I = rgb2gray(faceI);%转为灰度图片
    else
        I = faceI;
    end
    % I1= imadjust(I1,stretchlim(I1));%灰度变换,图像增强
    if (isequal([M,N],goalsize) == 0)%如果不是64*64的
        I = imresize(I,goalsize);%转为固定的64*64的
    end

    samplesnum = size(PCAfeatures,1);%训练样本个数

    I1 = I(:);%图像转为1列矩阵
    I1 = double(I1');
    Z=(I1-mA);%减去均值
    feature1 = Z*V;%降维得到PCA特征
    dd = zeros(1,samplesnum);
    for j = 1:samplesnum%遍历训练样本
        feature2 = PCAfeatures(j,:);%取出一个特征
        d = mydist(feature1,feature2);%计算特征之间的距离
        dd(j) = d;%距离存起来 用于排序
    end
    [value,minindex] = min(dd);%最小值,以及所在位置
    
   
    
    classlabel = trainlabel(minindex);%测出的类别序号

    %str = sprintf('识别完成,识别此照片为第%d人。',classlabel);
    set(handles.edit4,'string',classlabel);
    drawnow
    
    %axes(handles.axes1)
    %imshow(faceI)
    strtitle = sprintf('识别结果第%d人',classlabel);
    title(strtitle)

    
else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


guidata(hObject, handles);

% hObject    handle to pushbutton13 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton14.
function pushbutton14_Callback(hObject, eventdata, handles)

I = imread('10.bmp');%读取图片

%存入到handles内,以便被别的函数调用
handles.I = I;
handles.faceI = I;
% Update handles structure
load trainresult.mat

if(isfield(handles,'faceI') && ~isempty(handles.faceI)) %如果检测出人脸
   
    faceI = handles.faceI;
    [M,N,color] = size(faceI);%获取图片的大小,以及色彩类型
    if color == 3%如果是彩色图片
        I = rgb2gray(faceI);%转为灰度图片
    else
        I = faceI;
    end
    % I1= imadjust(I1,stretchlim(I1));%灰度变换,图像增强
    if (isequal([M,N],goalsize) == 0)%如果不是64*64的
        I = imresize(I,goalsize);%转为固定的64*64的
    end

    samplesnum = size(PCAfeatures,1);%训练样本个数

    I1 = I(:);%图像转为1列矩阵
    I1 = double(I1');
    Z=(I1-mA);%减去均值
    feature1 = Z*V;%降维得到PCA特征
    dd = zeros(1,samplesnum);
    for j = 1:samplesnum%遍历训练样本
        feature2 = PCAfeatures(j,:);%取出一个特征
        d = mydist(feature1,feature2);%计算特征之间的距离
        dd(j) = d;%距离存起来 用于排序
    end
    [value,minindex] = min(dd);%最小值,以及所在位置
    
   
    
    classlabel = trainlabel(minindex);%测出的类别序号

    %str = sprintf('识别完成,识别此照片为第%d人。',classlabel);
    set(handles.edit4,'string',classlabel);
    drawnow
       
else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


guidata(hObject, handles);
% hObject    handle to pushbutton14 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton15.
function pushbutton15_Callback(hObject, eventdata, handles)

I = imread('11.bmp');%读取图片

%存入到handles内,以便被别的函数调用
handles.I = I;
handles.faceI = I;
% Update handles structure
load trainresult.mat

if(isfield(handles,'faceI') && ~isempty(handles.faceI)) %如果检测出人脸
   
    faceI = handles.faceI;
    [M,N,color] = size(faceI);%获取图片的大小,以及色彩类型
    if color == 3%如果是彩色图片
        I = rgb2gray(faceI);%转为灰度图片
    else
        I = faceI;
    end
    % I1= imadjust(I1,stretchlim(I1));%灰度变换,图像增强
    if (isequal([M,N],goalsize) == 0)%如果不是64*64的
        I = imresize(I,goalsize);%转为固定的64*64的
    end

    samplesnum = size(PCAfeatures,1);%训练样本个数

    I1 = I(:);%图像转为1列矩阵
    I1 = double(I1');
    Z=(I1-mA);%减去均值
    feature1 = Z*V;%降维得到PCA特征
    dd = zeros(1,samplesnum);
    for j = 1:samplesnum%遍历训练样本
        feature2 = PCAfeatures(j,:);%取出一个特征
        d = mydist(feature1,feature2);%计算特征之间的距离
        dd(j) = d;%距离存起来 用于排序
    end
    [value,minindex] = min(dd);%最小值,以及所在位置
    
   
    
    classlabel = trainlabel(minindex);%测出的类别序号

    %str = sprintf('识别完成,识别此照片为第%d人。',classlabel);
    set(handles.edit4,'string',classlabel);
    drawnow
    
    %axes(handles.axes1)
    %imshow(faceI)
    strtitle = sprintf('识别结果第%d人',classlabel);
    title(strtitle)

    
else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


guidata(hObject, handles);
% hObject    handle to pushbutton15 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton16.
function pushbutton16_Callback(hObject, eventdata, handles)
I = imread('12.bmp');%读取图片
%存入到handles内,以便被别的函数调用
handles.I = I;
handles.faceI = I;
% Update handles structure
load trainresult.mat

if(isfield(handles,'faceI') && ~isempty(handles.faceI)) %如果检测出人脸
   
    faceI = handles.faceI;
    [M,N,color] = size(faceI);%获取图片的大小,以及色彩类型
    if color == 3%如果是彩色图片
        I = rgb2gray(faceI);%转为灰度图片
    else
        I = faceI;
    end
    % I1= imadjust(I1,stretchlim(I1));%灰度变换,图像增强
    if (isequal([M,N],goalsize) == 0)%如果不是64*64的
        I = imresize(I,goalsize);%转为固定的64*64的
    end

    samplesnum = size(PCAfeatures,1);%训练样本个数

    I1 = I(:);%图像转为1列矩阵
    I1 = double(I1');
    Z=(I1-mA);%减去均值
    feature1 = Z*V;%降维得到PCA特征
    dd = zeros(1,samplesnum);
    for j = 1:samplesnum%遍历训练样本
        feature2 = PCAfeatures(j,:);%取出一个特征
        d = mydist(feature1,feature2);%计算特征之间的距离
        dd(j) = d;%距离存起来 用于排序
    end
    [value,minindex] = min(dd);%最小值,以及所在位置
    
   
    
    classlabel = trainlabel(minindex);%测出的类别序号

    %str = sprintf('识别完成,识别此照片为第%d人。',classlabel);
    set(handles.edit4,'string',classlabel);
    drawnow
    
    

    
else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


guidata(hObject, handles);

% hObject    handle to pushbutton16 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton17.
function pushbutton17_Callback(hObject, eventdata, handles)


[filename, pathname] = uigetfile( ...
{
     '*.jpg;*.png;*.jpeg', 'Image Files (*.bmp;*.jpg;*.png;*.jpeg)'; ...
'*.*', 'All Files (*.*)'}, ...
'Pick an image');
if isequal(filename,0) || isequal(pathname,0),
return;
end
fpath=[pathname filename];      %将文件名和目录名组合成一个完整的路径
img=imread(fpath);
axes(handles.axes1)
imshow(img)
title('合影图片')
msgbox('感兴趣,可加Q讨论,1183814288')

% hObject    handle to pushbutton17 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton18.
function pushbutton18_Callback(hObject, eventdata, handles)
msgbox('数数部分思路:定位器实现')
set(handles.reporttext,'string','课题定制,Q:1183814288')
% hObject    handle to pushbutton18 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton19.
function pushbutton19_Callback(hObject, eventdata, handles)
ax2=(handles.axes2);cla(ax2,'reset')
ax3=(handles.axes3);cla(ax3,'reset')
ax4=(handles.axes4);cla(ax4,'reset')
ax5=(handles.axes5);cla(ax5,'reset')

% hObject    handle to pushbutton19 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)



function edit13_Callback(hObject, eventdata, handles)
% hObject    handle to edit13 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit13 as text
%        str2double(get(hObject,'String')) returns contents of edit13 as a double


% --- Executes during object creation, after setting all properties.
function edit13_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit13 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function reporttext_Callback(hObject, eventdata, handles)
% hObject    handle to reporttext (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of reporttext as text
%        str2double(get(hObject,'String')) returns contents of reporttext as a double


% --- Executes during object creation, after setting all properties.
function reporttext_CreateFcn(hObject, eventdata, handles)
% hObject    handle to reporttext (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit15_Callback(hObject, eventdata, handles)
% hObject    handle to edit15 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit15 as text
%        str2double(get(hObject,'String')) returns contents of edit15 as a double


% --- Executes during object creation, after setting all properties.
function edit15_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit15 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit16_Callback(hObject, eventdata, handles)
% hObject    handle to edit16 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit16 as text
%        str2double(get(hObject,'String')) returns contents of edit16 as a double


% --- Executes during object creation, after setting all properties.
function edit16_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit16 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit17_Callback(hObject, eventdata, handles)
% hObject    handle to edit17 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit17 as text
%        str2double(get(hObject,'String')) returns contents of edit17 as a double


% --- Executes during object creation, after setting all properties.
function edit17_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit17 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function edit18_Callback(hObject, eventdata, handles)
% hObject    handle to edit18 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit18 as text
%        str2double(get(hObject,'String')) returns contents of edit18 as a double


% --- Executes during object creation, after setting all properties.
function edit18_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit18 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in pushbutton20.
function pushbutton20_Callback(hObject, eventdata, handles)

I = imread('10.bmp');%读取图片

%存入到handles内,以便被别的函数调用
handles.I = I;
handles.faceI = I;
% Update handles structure
load trainresult.mat

if(isfield(handles,'faceI') && ~isempty(handles.faceI)) %如果检测出人脸
   
    faceI = handles.faceI;
    [M,N,color] = size(faceI);%获取图片的大小,以及色彩类型
    if color == 3%如果是彩色图片
        I = rgb2gray(faceI);%转为灰度图片
    else
        I = faceI;
    end
    % I1= imadjust(I1,stretchlim(I1));%灰度变换,图像增强
    if (isequal([M,N],goalsize) == 0)%如果不是64*64的
        I = imresize(I,goalsize);%转为固定的64*64的
    end

    samplesnum = size(PCAfeatures,1);%训练样本个数

    I1 = I(:);%图像转为1列矩阵
    I1 = double(I1');
    Z=(I1-mA);%减去均值
    feature1 = Z*V;%降维得到PCA特征
    dd = zeros(1,samplesnum);
    for j = 1:samplesnum%遍历训练样本
        feature2 = PCAfeatures(j,:);%取出一个特征
        d = mydist(feature1,feature2);%计算特征之间的距离
        dd(j) = d;%距离存起来 用于排序
    end
    [value,minindex] = min(dd);%最小值,以及所在位置
    
   
    
    classlabel = trainlabel(minindex);%测出的类别序号

    %str = sprintf('识别完成,识别此照片为第%d人。',classlabel);
    set(handles.edit4,'string',classlabel);
    drawnow
       
else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


guidata(hObject, handles);
% hObject    handle to pushbutton14 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton15.
function pushbutton15_Callback(hObject, eventdata, handles)

I = imread('13.bmp');%读取图片

%存入到handles内,以便被别的函数调用
handles.I = I;
handles.faceI = I;
% Update handles structure
load trainresult.mat

if(isfield(handles,'faceI') && ~isempty(handles.faceI)) %如果检测出人脸
   
    faceI = handles.faceI;
    [M,N,color] = size(faceI);%获取图片的大小,以及色彩类型
    if color == 3%如果是彩色图片
        I = rgb2gray(faceI);%转为灰度图片
    else
        I = faceI;
    end
    % I1= imadjust(I1,stretchlim(I1));%灰度变换,图像增强
    if (isequal([M,N],goalsize) == 0)%如果不是64*64的
        I = imresize(I,goalsize);%转为固定的64*64的
    end

    samplesnum = size(PCAfeatures,1);%训练样本个数

    I1 = I(:);%图像转为1列矩阵
    I1 = double(I1');
    Z=(I1-mA);%减去均值
    feature1 = Z*V;%降维得到PCA特征
    dd = zeros(1,samplesnum);
    for j = 1:samplesnum%遍历训练样本
        feature2 = PCAfeatures(j,:);%取出一个特征
        d = mydist(feature1,feature2);%计算特征之间的距离
        dd(j) = d;%距离存起来 用于排序
    end
    [value,minindex] = min(dd);%最小值,以及所在位置
    
   
    
    classlabel = trainlabel(minindex);%测出的类别序号

    %str = sprintf('识别完成,识别此照片为第%d人。',classlabel);
    set(handles.edit4,'string',classlabel);
    drawnow
    
    %axes(handles.axes1)
    %imshow(faceI)
    strtitle = sprintf('识别结果第%d人',classlabel);
    title(strtitle)

    

guidata(hObject, handles);
% hObject    handle to pushbutton20 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton21.
function pushbutton21_Callback(hObject, eventdata, handles)

I = imread('10.bmp');%读取图片

%存入到handles内,以便被别的函数调用
handles.I = I;
handles.faceI = I;
% Update handles structure
load trainresult.mat

if(isfield(handles,'faceI') && ~isempty(handles.faceI)) %如果检测出人脸
   
    faceI = handles.faceI;
    [M,N,color] = size(faceI);%获取图片的大小,以及色彩类型
    if color == 3%如果是彩色图片
        I = rgb2gray(faceI);%转为灰度图片
    else
        I = faceI;
    end
    % I1= imadjust(I1,stretchlim(I1));%灰度变换,图像增强
    if (isequal([M,N],goalsize) == 0)%如果不是64*64的
        I = imresize(I,goalsize);%转为固定的64*64的
    end

    samplesnum = size(PCAfeatures,1);%训练样本个数

    I1 = I(:);%图像转为1列矩阵
    I1 = double(I1');
    Z=(I1-mA);%减去均值
    feature1 = Z*V;%降维得到PCA特征
    dd = zeros(1,samplesnum);
    for j = 1:samplesnum%遍历训练样本
        feature2 = PCAfeatures(j,:);%取出一个特征
        d = mydist(feature1,feature2);%计算特征之间的距离
        dd(j) = d;%距离存起来 用于排序
    end
    [value,minindex] = min(dd);%最小值,以及所在位置
    
   
    
    classlabel = trainlabel(minindex);%测出的类别序号

    %str = sprintf('识别完成,识别此照片为第%d人。',classlabel);
    set(handles.edit4,'string',classlabel);
    drawnow
       
else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


guidata(hObject, handles);
% hObject    handle to pushbutton14 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton15.
function pushbutton15_Callback(hObject, eventdata, handles)

I = imread('14.bmp');%读取图片

%存入到handles内,以便被别的函数调用
handles.I = I;
handles.faceI = I;
% Update handles structure
load trainresult.mat

if(isfield(handles,'faceI') && ~isempty(handles.faceI)) %如果检测出人脸
   
    faceI = handles.faceI;
    [M,N,color] = size(faceI);%获取图片的大小,以及色彩类型
    if color == 3%如果是彩色图片
        I = rgb2gray(faceI);%转为灰度图片
    else
        I = faceI;
    end
    % I1= imadjust(I1,stretchlim(I1));%灰度变换,图像增强
    if (isequal([M,N],goalsize) == 0)%如果不是64*64的
        I = imresize(I,goalsize);%转为固定的64*64的
    end

    samplesnum = size(PCAfeatures,1);%训练样本个数

    I1 = I(:);%图像转为1列矩阵
    I1 = double(I1');
    Z=(I1-mA);%减去均值
    feature1 = Z*V;%降维得到PCA特征
    dd = zeros(1,samplesnum);
    for j = 1:samplesnum%遍历训练样本
        feature2 = PCAfeatures(j,:);%取出一个特征
        d = mydist(feature1,feature2);%计算特征之间的距离
        dd(j) = d;%距离存起来 用于排序
    end
    [value,minindex] = min(dd);%最小值,以及所在位置
    
   
    
    classlabel = trainlabel(minindex);%测出的类别序号

    %str = sprintf('识别完成,识别此照片为第%d人。',classlabel);
    set(handles.edit4,'string',classlabel);
    drawnow
    
    %axes(handles.axes1)
    %imshow(faceI)
    strtitle = sprintf('识别结果第%d人',classlabel);
    title(strtitle)

    
else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


guidata(hObject, handles);
% hObject    handle to pushbutton21 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton22.
function pushbutton22_Callback(hObject, eventdata, handles)

I = imread('10.bmp');%读取图片

%存入到handles内,以便被别的函数调用
handles.I = I;
handles.faceI = I;
% Update handles structure
load trainresult.mat

if(isfield(handles,'faceI') && ~isempty(handles.faceI)) %如果检测出人脸
   
    faceI = handles.faceI;
    [M,N,color] = size(faceI);%获取图片的大小,以及色彩类型
    if color == 3%如果是彩色图片
        I = rgb2gray(faceI);%转为灰度图片
    else
        I = faceI;
    end
    % I1= imadjust(I1,stretchlim(I1));%灰度变换,图像增强
    if (isequal([M,N],goalsize) == 0)%如果不是64*64的
        I = imresize(I,goalsize);%转为固定的64*64的
    end

    samplesnum = size(PCAfeatures,1);%训练样本个数

    I1 = I(:);%图像转为1列矩阵
    I1 = double(I1');
    Z=(I1-mA);%减去均值
    feature1 = Z*V;%降维得到PCA特征
    dd = zeros(1,samplesnum);
    for j = 1:samplesnum%遍历训练样本
        feature2 = PCAfeatures(j,:);%取出一个特征
        d = mydist(feature1,feature2);%计算特征之间的距离
        dd(j) = d;%距离存起来 用于排序
    end
    [value,minindex] = min(dd);%最小值,以及所在位置
    
   
    
    classlabel = trainlabel(minindex);%测出的类别序号

    %str = sprintf('识别完成,识别此照片为第%d人。',classlabel);
    set(handles.edit4,'string',classlabel);
    drawnow
       
else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


guidata(hObject, handles);
% hObject    handle to pushbutton14 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton15.
function pushbutton15_Callback(hObject, eventdata, handles)

I = imread('15.bmp');%读取图片

%存入到handles内,以便被别的函数调用
handles.I = I;
handles.faceI = I;
% Update handles structure
load trainresult.mat

if(isfield(handles,'faceI') && ~isempty(handles.faceI)) %如果检测出人脸
   
    faceI = handles.faceI;
    [M,N,color] = size(faceI);%获取图片的大小,以及色彩类型
    if color == 3%如果是彩色图片
        I = rgb2gray(faceI);%转为灰度图片
    else
        I = faceI;
    end
    % I1= imadjust(I1,stretchlim(I1));%灰度变换,图像增强
    if (isequal([M,N],goalsize) == 0)%如果不是64*64的
        I = imresize(I,goalsize);%转为固定的64*64的
    end

    samplesnum = size(PCAfeatures,1);%训练样本个数

    I1 = I(:);%图像转为1列矩阵
    I1 = double(I1');
    Z=(I1-mA);%减去均值
    feature1 = Z*V;%降维得到PCA特征
    dd = zeros(1,samplesnum);
    for j = 1:samplesnum%遍历训练样本
        feature2 = PCAfeatures(j,:);%取出一个特征
        d = mydist(feature1,feature2);%计算特征之间的距离
        dd(j) = d;%距离存起来 用于排序
    end
    [value,minindex] = min(dd);%最小值,以及所在位置
    
   
    
    classlabel = trainlabel(minindex);%测出的类别序号

    %str = sprintf('识别完成,识别此照片为第%d人。',classlabel);
    set(handles.edit4,'string',classlabel);
    drawnow
    
    %axes(handles.axes1)
    %imshow(faceI)
    strtitle = sprintf('识别结果第%d人',classlabel);
    title(strtitle)

    
else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


guidata(hObject, handles);
% hObject    handle to pushbutton22 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton23.
function pushbutton23_Callback(hObject, eventdata, handles)

I = imread('10.bmp');%读取图片

%存入到handles内,以便被别的函数调用
handles.I = I;
handles.faceI = I;
% Update handles structure
load trainresult.mat

if(isfield(handles,'faceI') && ~isempty(handles.faceI)) %如果检测出人脸
   
    faceI = handles.faceI;
    [M,N,color] = size(faceI);%获取图片的大小,以及色彩类型
    if color == 3%如果是彩色图片
        I = rgb2gray(faceI);%转为灰度图片
    else
        I = faceI;
    end
    % I1= imadjust(I1,stretchlim(I1));%灰度变换,图像增强
    if (isequal([M,N],goalsize) == 0)%如果不是64*64的
        I = imresize(I,goalsize);%转为固定的64*64的
    end

    samplesnum = size(PCAfeatures,1);%训练样本个数

    I1 = I(:);%图像转为1列矩阵
    I1 = double(I1');
    Z=(I1-mA);%减去均值
    feature1 = Z*V;%降维得到PCA特征
    dd = zeros(1,samplesnum);
    for j = 1:samplesnum%遍历训练样本
        feature2 = PCAfeatures(j,:);%取出一个特征
        d = mydist(feature1,feature2);%计算特征之间的距离
        dd(j) = d;%距离存起来 用于排序
    end
    [value,minindex] = min(dd);%最小值,以及所在位置
    
   
    
    classlabel = trainlabel(minindex);%测出的类别序号

    %str = sprintf('识别完成,识别此照片为第%d人。',classlabel);
    set(handles.edit4,'string',classlabel);
    drawnow
       
else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


guidata(hObject, handles);
% hObject    handle to pushbutton14 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton15.
function pushbutton15_Callback(hObject, eventdata, handles)

I = imread('16.bmp');%读取图片

%存入到handles内,以便被别的函数调用
handles.I = I;
handles.faceI = I;
% Update handles structure
load trainresult.mat

if(isfield(handles,'faceI') && ~isempty(handles.faceI)) %如果检测出人脸
   
    faceI = handles.faceI;
    [M,N,color] = size(faceI);%获取图片的大小,以及色彩类型
    if color == 3%如果是彩色图片
        I = rgb2gray(faceI);%转为灰度图片
    else
        I = faceI;
    end
    % I1= imadjust(I1,stretchlim(I1));%灰度变换,图像增强
    if (isequal([M,N],goalsize) == 0)%如果不是64*64的
        I = imresize(I,goalsize);%转为固定的64*64的
    end

    samplesnum = size(PCAfeatures,1);%训练样本个数

    I1 = I(:);%图像转为1列矩阵
    I1 = double(I1');
    Z=(I1-mA);%减去均值
    feature1 = Z*V;%降维得到PCA特征
    dd = zeros(1,samplesnum);
    for j = 1:samplesnum%遍历训练样本
        feature2 = PCAfeatures(j,:);%取出一个特征
        d = mydist(feature1,feature2);%计算特征之间的距离
        dd(j) = d;%距离存起来 用于排序
    end
    [value,minindex] = min(dd);%最小值,以及所在位置
    
   
    
    classlabel = trainlabel(minindex);%测出的类别序号

    %str = sprintf('识别完成,识别此照片为第%d人。',classlabel);
    set(handles.edit4,'string',classlabel);
    drawnow
    
   

    
else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


guidata(hObject, handles);
% hObject    handle to pushbutton23 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton24.
function pushbutton24_Callback(hObject, eventdata, handles)

I = imread('10.bmp');%读取图片

%存入到handles内,以便被别的函数调用
handles.I = I;
handles.faceI = I;
% Update handles structure
load trainresult.mat

if(isfield(handles,'faceI') && ~isempty(handles.faceI)) %如果检测出人脸
   
    faceI = handles.faceI;
    [M,N,color] = size(faceI);%获取图片的大小,以及色彩类型
    if color == 3%如果是彩色图片
        I = rgb2gray(faceI);%转为灰度图片
    else
        I = faceI;
    end
    % I1= imadjust(I1,stretchlim(I1));%灰度变换,图像增强
    if (isequal([M,N],goalsize) == 0)%如果不是64*64的
        I = imresize(I,goalsize);%转为固定的64*64的
    end

    samplesnum = size(PCAfeatures,1);%训练样本个数

    I1 = I(:);%图像转为1列矩阵
    I1 = double(I1');
    Z=(I1-mA);%减去均值
    feature1 = Z*V;%降维得到PCA特征
    dd = zeros(1,samplesnum);
    for j = 1:samplesnum%遍历训练样本
        feature2 = PCAfeatures(j,:);%取出一个特征
        d = mydist(feature1,feature2);%计算特征之间的距离
        dd(j) = d;%距离存起来 用于排序
    end
    [value,minindex] = min(dd);%最小值,以及所在位置
    
   
    
    classlabel = trainlabel(minindex);%测出的类别序号

    %str = sprintf('识别完成,识别此照片为第%d人。',classlabel);
    set(handles.edit4,'string',classlabel);
    drawnow
       
else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


guidata(hObject, handles);
% hObject    handle to pushbutton14 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


% --- Executes on button press in pushbutton15.
function pushbutton15_Callback(hObject, eventdata, handles)

I = imread('11.bmp');%读取图片

%存入到handles内,以便被别的函数调用
handles.I = I;
handles.faceI = I;
% Update handles structure
load trainresult.mat

if(isfield(handles,'faceI') && ~isempty(handles.faceI)) %如果检测出人脸
   
    faceI = handles.faceI;
    [M,N,color] = size(faceI);%获取图片的大小,以及色彩类型
    if color == 3%如果是彩色图片
        I = rgb2gray(faceI);%转为灰度图片
    else
        I = faceI;
    end
    % I1= imadjust(I1,stretchlim(I1));%灰度变换,图像增强
    if (isequal([M,N],goalsize) == 0)%如果不是64*64的
        I = imresize(I,goalsize);%转为固定的64*64的
    end

    samplesnum = size(PCAfeatures,1);%训练样本个数

    I1 = I(:);%图像转为1列矩阵
    I1 = double(I1');
    Z=(I1-mA);%减去均值
    feature1 = Z*V;%降维得到PCA特征
    dd = zeros(1,samplesnum);
    for j = 1:samplesnum%遍历训练样本
        feature2 = PCAfeatures(j,:);%取出一个特征
        d = mydist(feature1,feature2);%计算特征之间的距离
        dd(j) = d;%距离存起来 用于排序
    end
    [value,minindex] = min(dd);%最小值,以及所在位置
    
   

   
    
else
   set(handles.reporttext,'string','没有检测到人脸,无法识别!');
end


guidata(hObject, handles);
% hObject    handle to pushbutton24 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

二、运行结果

在这里插入图片描述

三、备注

完整代码或者代写添加QQ912100926
往期回顾>>>>>>
【图像压缩】图像处理教程系列之图像压缩【Matlab 074期】
【图像分割】图像处理教程系列之图像分割(一)【Matlab 075期】
【图像分割】图像处理教程系列之图像分割(二)【Matlab 076期】
【模式识别】银行卡号之识别【Matlab 077期】
【模式识别】指纹识别【Matlab 078期】
【图像处理】基于GUI界面之DWT+DCT+PBFO改进图像水印隐藏提取【Matlab 079期】
【图像融合】CBF算法之图像融合【Matlab 080期】
【图像去噪】自适应形态学之图像去噪【Matlab 081期】
【图像增强】DEHAZENET和HWD之水下去散射图像增强【Matlab 082期】
【图像增强】PSO寻优ACE之图像增强【Matlab 083期】
【图像重建】ASTRA算法之图像重建【Matlab 084期】
【图像分割】四叉树之图像分割【Matlab 085期】
【图像分割】心脏中心线之提取【Matlab 086期】
【图像识别】SVM植物叶子之疾病检测和分类【Matlab 087期】
【图像识别】基于GUI界面之模板匹配手写数字识别系统【Matlab 088期】
【图像识别】基于GUI界面之不变矩的数字验证码识别【Matlab 089期】
【图像识别】条形码识别系统【Matlab 090期】
【图像识别】基于GUI界面RGB和BP神经网络之人民币识别系统【Matlab 091期】
【图像识别】CNN卷积神经网络之验证码识别【Matlab 092期】
【图像分类】极限学习分类器之对遥感图像分类【Matlab 093期】
【图像变换】DIBR-3D之图像变换【Matalb 094期】
【图像分割】模糊聚类算法之FCM图像分割【Matlab 095期】

你可能感兴趣的:(matlab,图像处理)