精华内容
下载资源
问答
  • GUI人脸识别MATLAB代码

    2019-06-10 16:11:36
    使用MATLAB代码实现人脸识别,使用GUI显示,希望对大家有所帮助。
  • 该代码是利用PCA(主成分分析法)进行人脸识别,并且融合了GUI,有着很好的学习价值。
  • 人脸识别】基于matlab GUI LBP人脸识别【含Matlab源码 1282期】
  • 基于matlab,gui人脸识别(PCA) 要源码联系,希望对大家有所帮助。
  • 这个压缩包里包含了一个人脸识别软件系统,可以批量处理拍摄照片,训练模型,并更改参数,可以识别人脸,并包含一个GUI界面
  • 人脸识别】基于KL变换人脸识别matlab源码含GUI.md
  • matlab实现人脸识别

    2021-01-12 16:45:53
    mablab、GUI人脸识别。值得学习
  • 人脸检测是人脸识别、人机交互、智能视觉监控等:工作的前提。近年来,在模式识别与计算机视觉领域,人脸检测已经成为一个受到普遍 重视、研究十分活跃的方向。本文针对复杂背景下的彩色正面人脸图像,将肤色分割、模板...

    一、简介

    人脸检测是人脸识别、人机交互、智能视觉监控等:工作的前提。近年来,在模式识别与计算机视觉领域,人脸检测已经成为一个受到普遍 重视、研究十分活跃的方向。本文针对复杂背景下的彩色正面人脸图像,将肤色分割、模板匹配与候选人脸图像块筛选结合起来,构建了人脸检测实验系统,并用自制的人脸图像数据库在该系统下进行了一系列的实验统计。本文首先介绍了人脸检测技术研究的背景和现状,阐明人脸检测技术发展的重要意义,对目前常用的一一些检测算法进行了总结,然后着重阐述了基于肤色分割和模板匹配验证的人脸检测算法。肤色是人脸重要特征,在通过肤色采样统计和聚类分析后,确立一种在YCbCr空间下的基于高斯模型的肤色分割方法。在YCbCr色彩空间中建立肤色分布的高斯模型,得到肤色概率似然图像,在最佳动态阈值选取算法下完成肤色区域的分割。采用 数学形态学和一些先验知识对所得到的肤色区域进行人脸特征筛选,进–步剔除非人脸肤色区域,减少候选人脸数量,简化后续检测过程的处理。本文使用平均模板匹配方法对候选人脸进行确认,并针对图像中的人脸通常有一定角度旋转和尺寸大小不确定的问题,通过计算候选人脸图像块的偏转角度和面积,并以此调整模板,优化模板配准,提高模板匹配的准确性,同时避免使用多尺度模板进行多次匹配运算,提高算法效率。提出利用候选人脸图像区域和模板质心作为配准的原点,抑制人脸图像噪声的干扰。最后构建了基于肤色分割和模板验证的人脸检测试验系统,并对该系统采用自制人脸图像数据库进行测试。实验结果表明,系统算法是有效的,具有较高的检测性能和低的误判率。

    二、部分源代码

    function varargout = untitled(varargin)
    % UNTITLED MATLAB code for untitled.fig
    %      UNTITLED, by itself, creates a new UNTITLED or raises the existing
    %      singleton*.
    %
    %      H = UNTITLED returns the handle to a new UNTITLED or the handle to
    %      the existing singleton*.
    %
    %      UNTITLED('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in UNTITLED.M with the given input arguments.
    %
    %      UNTITLED('Property','Value',...) creates a new UNTITLED or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before untitled_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to untitled_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 untitled
    
    % Last Modified by GUIDE v2.5 19-May-2020 15:25:06
    
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
        'gui_Singleton',  gui_Singleton, ...
        'gui_OpeningFcn', @untitled_OutputFcn, ...
        'gui_OutputFcn',  @untitled_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 untitled is made visible.
    function untitled_OutputFcn(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 untitled (see VARARGIN)
    
    % Choose default command line output for untitled
    handles.output = hObject;
    
    % Update handles structure
    guidata(hObject, handles);
    
    % UIWAIT makes untitled wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    
    
    % --- Outputs from this function are returned to the command line.
    %-------------------------------------- pushbutton1_Callback(回调函数)
    % --- Executes on button press in pushbutton1.
    function pushbutton1_Callback(hObject, eventdata, handles)
    global im imycbcr skin1 skin2 lpf %----------------宣布为全域变量
    % 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)
    if get (gcbo, 'Value' ) ==1;
        im=imread('10.jpg' ) ; %------------------------------读入彩色图像
        axes(handles.axes1)
        set(handles.axes1, 'XMinorTick' , 'on' ) %-------------嵌入Axes(1) 回调函数
        imshow(im) ; %------------------------------显示彩色图像
    else
        imformats
    end
    % Hint: get(hObject, ' Value' ) returns push state of togglebutton1
    %-------------------------------------- pushbutton2_Callback(回调函数)
    % --- 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 imycbcr skin1 skin2 lpf %------
        cr = filter2(lpf, cr) ;
        cr = reshape(cr, 1, prod(size(cr) ) ) ;
        bmean = mean(cb) ; %--------------------------------求平均值
        rmean = mean(cr) ;
        brcov = cov(cb, cr) ;
        skin1 = zeros(dim(1) , dim(2) ) ;
        for i = 1: dim(1)
            for j = 1: dim(2)
                cb = double(imycbcr(i, j, 2) ) ;
                cr = double(imycbcr(i, j, 3) ) ;
                x =[(cb-bmean);(cr-rmean)] ;
                skin1(i,j) = exp(-0.5*x'*inv(brcov)*x) ; %---------------------------------计算任意像素为皮肤的概率
          
        skin1 = skin1./max(max(skin1) ) ;
        axes(handles. axes3)
        set(handles. axes3, 'XMinorTick' , 'on' ) %-------------嵌入Axes(3) 回调函数
        imshow(skin1) ; %------------------------------显示皮肤概率图像
    else
        imformats
    end
    % Hint: get(hObject, ' Value' ) returns push state of pushbutton3
    %-------------------------------------- pushbutton4_Callback(回调函数)
    % --- 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 im imycbcr skin1 skin2 lpf %----------------: 0.05
            skin2 = zeros(size(skin1,1),size(skin1,2)) ;
            skin2(find(skin1>threshold)) = 1;
            change = sum(sum(skin2 - previousSkin2) ) ;
            changelist = [changelist change] ;
            previousSkin2 = skin2;
        end
        %----------------------------------找出最佳门限值
        [C, I] = min(changelist) ;
        optimalThreshold = (7-I) *0.1;
        skin2 = ones(size(skin1,1),size(skin1,2)) ;
        skin2(find(skin1>optimalThreshold))= 0;
        skin2 = filter2(lpf, skin2) ; %------------------------中值滤波
        axes(handles.axes5)
        set(handles. axes5, 'XMinorTick','on' ) %-------------嵌入Axes(4) 回调函数
        imshow(skin2); %------------------------------显示皮肤二值化图像
    else
        imformats
    end
    % Hint: get(hObject, ' Value' ) returns push state of pushbutton4
    %-------------------------------------- pushbutton5_Callback(回调函数)
    % --- Executes on button press in pushbutton5.
    function pushbutton5_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 imycbcr skin1 skin2 lpf %----------------宣布为全域变量
    if get (gcbo, 'Value' ) ==1;
        sumarea = bwarea(skin2) ; %-----------计算对象的总面积, 为利用面积进行判别做准备
        [L,numobj] =bwlabel(skin2, 8) ;
        avearea = sumarea/numobj; %-----------计算出对象的平均面积
        A = zeros(4, numobj) ;%179
        n = 1;
       
            % ------------------------获得一副只包含该区域的图像, 让图像其他区域为黑色
            bwsegment = bwselect(skin2, y, x, 8) ;
            % --------------------- 计算出该区域内分割块的数目
            [L, numobjs] = bwlabel(bwsegment, 4) ;
            % ---------------------------------得到区域孔的数目
            numfeatures = bweuler(bwsegment, 4) ;
            numholes = 1 - numfeatures;
            % --------------------------------扫描得出区域坐标
            top = -1;
            buttom =-1;
            left = -1;
            right = -1;
            dim=size(bwsegment);
            for i=1:dim(1)
                for j=1:dim(2)
                    if(bwsegment(i,j) ~= 0)
                        top=i;
                        break;
                    end;
                end;
                if (top ~= -1) break; end;
            end;
    

    三、运行结果

    在这里插入图片描述

    四、matlab版本及参考文献

    1 matlab版本
    2014a

    2 参考文献
    [1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
    [2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
    [3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
    [4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

    展开全文
  • 人脸识别】基于 Gabor+SV和PCA+SVM实现人脸识别matlab源码含 GUI.
  • 例如,将LBP算子用于纹理分类或人脸识别时,常采用LBP模式的统计直方图来表达图像的信息,而较多的模式种类将使得数据量过大,且直方图过于稀疏。因此,需要对原始的LBP模式进行降维,使得数据量减少的情况下能最好...

    一、LBP简介

    LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。它是首先由T. Ojala, M.Pietikäinen, 和D. Harwood 在1994年提出,用于纹理特征提取。而且,提取的特征是图像的局部的纹理特征;

    1 LBP特征的描述
    原始的LBP算子定义为在33的窗口内,以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,33邻域内的8个点经比较可产生8位二进制数(通常转换为十进制数即LBP码,共256种),即得到该窗口中心像素点的LBP值,并用这个值来反映该区域的纹理信息。如下图所示:
    在这里插入图片描述
    LBP的改进版本:
    原始的LBP提出后,研究人员不断对其提出了各种改进和优化。

    (1)圆形LBP算子:
    基本的 LBP 算子的最大缺陷在于它只覆盖了一个固定半径范围内的小区域,这显然不能满足不同尺寸和频率纹理的需要。为了适应不同尺度的纹理特征,并达到灰度和旋转不变性的要求,Ojala 等对 LBP 算子进行了改进,将 3×3 邻域扩展到任意邻域,并用圆形邻域代替了正方形邻域,改进后的 LBP 算子允许在半径为 R 的圆形邻域内有任意多个像素点。从而得到了诸如半径为R的圆形区域内含有P个采样点的LBP算子;
    在这里插入图片描述
    (2)LBP旋转不变模式
    从 LBP 的定义可以看出,LBP 算子是灰度不变的,但却不是旋转不变的。图像的旋转就会得到不同的 LBP值。
    Maenpaa等人又将 LBP 算子进行了扩展,提出了具有旋转不变性的 LBP 算子,即不断旋转圆形邻域得到一系列初始定义的 LBP 值,取其最小值作为该邻域的 LBP 值。
    图 2.5 给出了求取旋转不变的 LBP 的过程示意图,图中算子下方的数字表示该算子对应的 LBP 值,图中所示的 8 种 LBP模式,经过旋转不变的处理,最终得到的具有旋转不变性的 LBP 值为 15。也就是说,图中的 8 种 LBP 模式对应的旋转不变的 LBP 模式都是00001111。
    在这里插入图片描述
    (3)LBP等价模式
    一个LBP算子可以产生不同的二进制模式,对于半径为R的圆形区域内含有P个采样点的LBP算子将会产生2P2P种模式。很显然,随着邻域集内采样点数的增加,二进制模式的种类是急剧增加的。例如:5×5邻域内20个采样点,有220220=1,048,576种二进制模式。如此多的二值模式无论对于纹理的提取还是对于纹理的识别、分类及信息的存取都是不利的。同时,过多的模式种类对于纹理的表达是不利的。例如,将LBP算子用于纹理分类或人脸识别时,常采用LBP模式的统计直方图来表达图像的信息,而较多的模式种类将使得数据量过大,且直方图过于稀疏。因此,需要对原始的LBP模式进行降维,使得数据量减少的情况下能最好的代表图像的信息。
    为了解决二进制模式过多的问题,提高统计性,Ojala提出了采用一种“等价模式”(Uniform Pattern)来对LBP算子的模式种类进行降维。Ojala等认为,在实际图像中,绝大多数LBP模式最多只包含两次从1到0或从0到1的跳变。因此,Ojala将“等价模式”定义为:当某个LBP所对应的循环二进制数从0到1或从1到0最多有两次跳变时,该LBP所对应的二进制就称为一个等价模式类。如00000000(0次跳变),00000111(只含一次从0到1的跳变),10001111(先由1跳到0,再由0跳到1,共两次跳变)都是等价模式类。除等价模式类以外的模式都归为另一类,称为混合模式类,例如10010111(共四次跳变)(这是我的个人理解,不知道对不对)。
    通过这样的改进,二进制模式的种类大大减少,而不会丢失任何信息。模式数量由原来的2P2P种减少为 P ( P-1)+2种,其中P表示邻域集内的采样点数。对于3×3邻域内8个采样点来说,二进制模式由原始的256种减少为58种,这使得特征向量的维数更少,并且可以减少高频噪声带来的影响。
    2 LBP特征用于检测的原理
    显而易见的是,上述提取的LBP算子在每个像素点都可以得到一个LBP“编码”,那么,对一幅图像(记录的是每个像素点的灰度值)提取其原始的LBP算子之后,得到的原始LBP特征依然是“一幅图片”(记录的是每个像素点的LBP值)。
    在这里插入图片描述
    从上图可以看出LBP对光照具有很强的鲁棒性
    LBP的应用中,如纹理分类、人脸分析等,一般都不将LBP图谱作为特征向量用于分类识别,而是采用LBP特征谱的统计直方图作为特征向量用于分类识别。
      因为,从上面的分析我们可以看出,这个“特征”跟位置信息是紧密相关的。直接对两幅图片提取这种“特征”,并进行判别分析的话,会因为“位置没有对准”而产生很大的误差。后来,研究人员发现,可以将一幅图片划分为若干的子区域,对每个子区域内的每个像素点都提取LBP特征,然后,在每个子区域内建立LBP特征的统计直方图。如此一来,每个子区域,就可以用一个统计直方图来进行描述;整个图片就由若干个统计直方图组成;
      例如:一幅100100像素大小的图片,划分为1010=100个子区域(可以通过多种方式来划分区域),每个子区域的大小为1010像素;在每个子区域内的每个像素点,提取其LBP特征,然后,建立统计直方图;这样,这幅图片就有1010个子区域,也就有了1010个统计直方图,利用这1010个统计直方图,就可以描述这幅图片了。之后,我们利用各种相似性度量函数,就可以判断两幅图像之间的相似性了;
    3 对LBP特征向量进行提取的步骤
      (1)首先将检测窗口划分为16×16的小区域(cell);
      (2)对于每个cell中的一个像素,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,3*3邻域内的8个点经比较可产生8位二进制数,即得到该窗口中心像素点的LBP值;
      (3)然后计算每个cell的直方图,即每个数字(假定是十进制数LBP值)出现的频率;然后对该直方图进行归一化处理。
      (4)最后将得到的每个cell的统计直方图进行连接成为一个特征向量,也就是整幅图的LBP纹理特征向量;
      然后便可利用SVM或者其他机器学习算法进行分类了。

    LPQ(Local Phase Quantization)算法的原理是假设平滑函数h(x)中心对称,则其傅里叶变换为H(u),对所有H(u)≥0有∠G(u)= ∠F(u),其中F(u)和G(u)分别为原图像和平滑后图像的傅里叶变换,因而在H(u)≥0条件下,图像对平滑有不变性。

    为使H(u)≥0,a取为不超过第一个过零点的频率点,其值为a=1/winSize(winSize为输入参数)。分别用f(x)对u1=(a,0),u2=(0,a),u3=(a,a),u4=(a,-a)四个点作STFT,然后分别把四个点的实部和虚部分开,形成一个向量W=[Re{F(u1,x)},Re{F(u2,x)},Re{F(u3,x)},Re{F(u4,x)},Im{F(u1,x)},Im{F(u2,x)},Im{F(u3,x)},Im{F(u4,x)}]T 。

    最终得到LPQ变换即为Fx=W*fx。然后对参数进行统计分析,若参数是相关的,则用奇异值分解去相关并且量化。

    二、部分源代码

    function varargout = identification(varargin)
    % IDENTIFICATION MATLAB code for identification.fig
    %      IDENTIFICATION, by itself, creates a new IDENTIFICATION or raises the existing
    %      singleton*.
    %
    %      H = IDENTIFICATION returns the handle to a new IDENTIFICATION or the handle to
    %      the existing singleton*.
    %
    %      IDENTIFICATION('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in IDENTIFICATION.M with the given input arguments.
    %
    %      IDENTIFICATION('Property','Value',...) creates a new IDENTIFICATION or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before identification_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to identification_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 identification
    
    % Last Modified by GUIDE v2.5 06-Aug-2021 03:03:30
    
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @identification_OpeningFcn, ...
                       'gui_OutputFcn',  @identification_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 identification is made visible.
    function identification_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 identification (see VARARGIN)
    
    % Choose default command line output for identification
    handles.output = hObject;
    
    % Update handles structure
    guidata(hObject, handles);
    
    % UIWAIT makes identification wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    
    
    % --- Outputs from this function are returned to the command line.
    function varargout = identification_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)
    [filename,pathname]=uigetfile({'*.jpg';'*.tif'},'file selector');
    str=[pathname filename];
    I=imread(str);
    axes(handles.axes1);
    
    imshow(I);
    
    lbp_face=[];
    [lbp_face,feature]=lbpfeaturevector2(I,100,20);
    axes(handles.axes2);
    imshow(feature);
    load('fb_lbp_face.mat')
    ss=[];
    ss=LBP_face(:,:);
    ref_labels=label;
    ref_label=number_label;
    L=zeros(1,size(ss,2));
    text=[];
    %d=sum((A-B).^2);
    
       for j=1:size(ss,2)
            w=0;
        for i=1:size(lbp_face,1) 
               %w=w+(h(i,1)-ss(i,j))^2;%欧式距离
                %w=w-ss(i,j)*(log(h(i,1)+1e-100));%log-likelihood statistic
               %w=w+min(ss(i,j),h(i,1));%histogram intersection
               w=w+(((ss(i,j)-lbp_face(i,1)).^2)./(ss(i,j)+lbp_face(i,1)+(1e-10)));%chi aquare statistic
        end
        w=sqrt(w);
        L(j)=w;
        end
    
    
    axes(handles.axes3);
    imshow(str);
    
    % --- 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)
    %5*5模板计算LBP特征值
    %法一
    function [out]=calculatelbp2(mat)
    [m,n]=size(mat);
    %mat=double(mat);
    in=mat;
    r=m+4;
    c=n+4;
    %out=zeros(m,n);
    A=zeros(r,c);
    r0=3:r-2;
    c0=3:c-2;
    A(r0,c0)=in;
    %alpha=2-sqrt(2);
    alpha=0.5;
    beta=1-alpha;
    d0=A(r0,c0-2)-in;
    d2=A(r0+2,c0)-in;
    d4=A(r0,c0+2)-in;
    d6=A(r0-2,c0)-in;
    d1=alpha*A(r0+1,c0-1)+beta*A(r0+2,c0-2)-in;
    d3=alpha*A(r0+1,c0+1)+beta*A(r0+2,c0+2)-in;
    d5=alpha*A(r0-1,c0+1)+beta*A(r0-2,c0+2)-in;
    d7=alpha*A(r0-1,c0-1)+beta*A(r0-2,c0-2)-in;
    
    
    
    d=[d0(:),d1(:),d2(:),d3(:),d4(:),d5(:),d6(:),d7(:)];
    code=2.^(7:-1:0)';
    out =reshape((d>=0)*code,m,n);
    %法二
    %out=mat2gray(out);
    %imshow(out);
    %可先声明一个大矩阵,把mat放入矩阵中
    % [m,n]=size(mat);
    % mat=[zeros(m,2) mat zeros(m,2)];
    % mat=[zeros(2,n+4);mat;zeros(2,n+4)];
    % A=zeros(5,5);
    % p=zeros(1,8);
    % k=0;
    % lbp=zeros(size(mat));
    % h=zeros(1,8);
    % for i=3:(m+2)
    %  for j=3:(n+4)
    %         lbpnumber=0;
    %         A=mat(i:i+4,j:j+4);
    %         k=A(3,3);
    %         p(2)=(A(1,1)+A(2,2))/2;
    %         p(3)=A(1,3);
    %         p(4)=(A(1,5)+A(2,4))/2;
    %         p(1)=A(3,1);
    %         p(5)=A(3,5);
    %         p(8)=(A(5,1)+A(4,2))/2;
    %         p(7)=A(5,3);
    %         p(6)=(A(5,5)+A(5,4))/2;
    %         h=(p>=k);
    %         for q=1:8
    %             lbpnumber=lbpnumber+(h(q)*2^(8-q));
    %         end
    %         lbp(i+2,j+2)=lbpnumber;
    %     end
    % end、
    %对应3*3模板特征值形成特征向量
    function [m,f]=lbpfeaturevector(mat,s,n)
    [~,~,d]=size(mat);
    if d==3
        mat=rgb2gray(mat);
    end
    mat=double(mat);
    mat=imresize(mat,[100 100],'bicubic');%归一化
    
    k=calculatelbp(mat);
    f=mat2gray(k);
    %imshow(f);
    k=uint8(k);
    m=[];
    for i=1:n:s
        for j=1:n:s
            A=k(i:(i+19),j:(j+19));
            h=[];
            h=imhist(A);
            m=[m;h/(n*n)];
        end
    end
    %     lbp(1:2,:)=[];
    %    lbp((1+m):end,:)=[];
    %     lbp(:,1:2)=[];
    %     lbp(:,(1+n):end)=[];
    % end
    % imshow(lbp,[]);%强制转换为double 类型
    

    三、运行结果

    在这里插入图片描述
    在这里插入图片描述

    四、matlab版本及参考文献

    1 matlab版本
    2014a

    2 参考文献
    [1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
    [2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
    [3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
    [4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

    展开全文
  • PCA+GUI人脸识别程序

    2013-05-09 20:52:31
    也是刚学的matlab,学习GUI编程,还是直接看程序,写代码比较好。看书吧,程序敲下来都有不通的。自己结合别人代码稍微改了下,训练和测试库都带了,界面简单明了,可以运行。为了像自己一样的matlab小白,我还写了...
  • 应用统计方法解决模式识别问题时,一再碰到的问题之一就是维数问题。在低维空间里解析上或计算上行得通的方法,在高维空间里往往行不通。因此,降低维数有时就会成为处理实际问题的关键。 1 问题描述:如何根据实际...

    一、FISHER人脸识别简介

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

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

    2 Fisher准则函数的定义
    几个必要的基本参量:
    2.1在d维X空间
    (1)各类样本的均值向量mi
    在这里插入图片描述
    (2)样本类内离散度矩阵Si和总样本类内离散度矩阵Sw
    在这里插入图片描述
    其中Sw是对称半正定矩阵,而且当N>d时通常是非奇异的。(半正定矩阵:特征值都不小于零的实对称矩阵;非奇异矩阵:矩阵的行列式不为零)
    (3)样本类间离散度矩阵Sb
    在这里插入图片描述
    Sb是对称半正定矩阵。
    3 在一维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版本及参考文献

    1 matlab版本
    2014a

    2 参考文献
    [1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
    [2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
    [3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
    [4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
    [5]孟逸凡,柳益君.基于PCA-SVM的人脸识别方法研究[J].科技视界. 2021,(07)
    [6]张娜,刘坤,韩美林,陈晨.一种基于PCA和LDA融合的人脸识别算法研究[J].电子测量技术. 2020,43(13)
    [7]陈艳.基于BP神经网络的人脸识别方法分析[J].信息与电脑(理论版). 2020,32(23)
    [8]戴骊融,陈万米,郭盛.基于肤色模型和SURF算法的人脸识别研究[J].工业控制计算机. 2014,27(02)

    展开全文
  • 点击“人脸识别”按钮调用子函数GUI reg, 通过每张图片所对应的标签来进行匹配, 从而得出识别结果。 3 PCA-SⅤM人脸识别模型的建立 3.1人脸库构建 人脸识别模型的建立首先需要适当的人脸库。本文分两步构建人脸库...

    一、简介

    1 PCA-SVM原理
    1.1 主成分分析PCA
    本文处理的所有原始图片都是112x 92大小的pgm格式图片, 每幅图片包含10304个像素点, 每一行代表一个样本,维数就是10304维。维数过大使得数据处理工作十分复杂,同时,图片特征之间的强相关性还会导致“维数灾难”。快速高效的人脸识别,其关键在于提取到精准表征人脸的特征。从人脸图像中找出最能表征人脸的特征空间,是主成分分析(Principal Component Analysis, PC A) [2] 在人脸特征提取中的基本思想。在这个过程中, 不能表征人脸的属性会被剔除(降维的过程),也就是在一个高维特征空间中利用一组系数对特征加权,来重新表示一张人脸图片。PCA过程的数学描述如下:
    在这里插入图片描述
    在这里插入图片描述
    1.2 支持向量机SVM
    给定训练集,在特征空间上找到一个分类超平面,将样本点分到不同的类。存在唯一的分类超平面,使得样本点距离分类超平面的距离最大。其中,距离超平面最近的点为该超平面的支持向量。找到该超平面后,对于待测点,通过计算该点相对于超平面的位置进行分类。其中,一个点距离分类超平面的距离越大,表明分类预测的确信程度越高。
    支持向量机(Support Vector Machine, SVM) 需要做的就是找出一个超平面, 使得在两类样本点能完全分离的情况下,尽可能使样本边界的距离最大。
    在这里插入图片描述
    SVM是一个两类分类器, 而大多数实际分类问题都是多类分类问题, 那么就需要利用SVM这个二分类器去实现一个多类问题的分类。本文人脸识别程序中, 采用的是一对一的投票策略, 即在任意两类样本之间设计一个SVM分类器,分类为得票最多的类。

    2 MATLAB工具软件
    本文通过MATLAB工具软件, 对PC A-SVM人脸识别方法进行仿真计算。MATLAB人脸识别程序的使用界面上分为三个按钮:“测试准确率”“选择照片”和“图像匹配”,既可以方便操作,又可以使识别结果直观地显示出来。点击“开始运行”按钮调用的是主函数face.m, 对人脸数据进行处理; 点击“选择照片”按钮调用子函数GUl open, 用户可以在相应的文件路径下选择人脸照片; 点击“人脸识别”按钮调用子函数GUI reg, 通过每张图片所对应的标签来进行匹配, 从而得出识别结果。

    3 PCA-SⅤM人脸识别模型的建立
    3.1人脸库构建
    人脸识别模型的建立首先需要适当的人脸库。本文分两步构建人脸库。
    (1) 选择OR L人脸数据库加入本文人脸库, 其中包含40个人的每人10张人脸图片, 一共400张图片, 每张大小是112×92像素, 图片格式是pgm。
    (2) 作者利用电脑摄像头拍了10张本人的照片, 将这10张图片的格式转化为pgm格式, 同时大小也转化为112×92像素,加入本文人脸库。
    3.2训练集数据处理
    这里将每个人的前5张人脸图片作为训练集,后5张人脸图片作为测试集。训练集数据处理步骤如下:
    (1) 读入训练集数据, 储存在矩阵f_matrix(205*10304) 中。
    (2) 对训练集数据进行PC A降维, 本文选择的降维维数是100。
    (3)规范化特征数据,将同一个样本中的不同维度归一化,从而对于不同的属性之间也可以进行比较。
    这里特别增加了一个显示特征脸的步骤。由于数据降至100维,在低维空间中的基就是100张特征脸,其他所有经过降维的脸都可以通过这100张特征脸线性表示。图1显示了前10个特征脸。
    在这里插入图片描述
    图1 特征脸显示
    3.3 参数选择
    在PCA-SVM人脸识别模型建立中, 参数取值如下:
    (1) n persons:样本包含41个人的人脸, 将n persons设置为41。
    (2)flag:flag为0时子函数ReadFace.m读取训练样本数据, flag为1时读取测试样本数据。
    (3) k:表示降维至k维。该参数在子函数fast PC A.m中以输入参数出现, 在后面的SVM训练中也有用处。k值与gamma值有很大关联, 这里经过反复调整将k设置为100。
    (4) low vec:经过降维后的图像数据pc a face的最小值, 通过设置low new,即新的边界的下限,对数据进行归一化处理。
    (5) up vec:经过降维后的图像数据pc a face的最大值, 通过设置up new, 即新的边界的上限, 对数据进行归一化处理。
    (6)核函数:本文选择的是高斯核函数。
    (7) gamma:参数gamma是选择高斯核函数RBF作为核函数后该函数自带的一个参数。它隐含地决定了数据映射到新的特征空间后的分布。gamma越大, 支持向量越少, 反之支持向量越多。支持向量的个数直接影响到训练与预测的速度。gamma如果设置得很大, 会使得高斯分布显得高而窄,只作用于支持向量样本附近,对于未知样本的分类效果很差,最终会导致训练准确率很高,而识别准确率很低的结果,即过拟合。而gamma设置过小, 则会造成平滑效应过大, 对于噪声不敏感。本文设置参数gamma时, 在10-3~103的范围依次尝试,最终设置为0.01。
    (8)c:参数c可以理解为惩罚参数,类似于正则化中一的作用。c越大,意味着拟合非线性的能力越强,但是容易入出现过拟合的情况,而c过小会导致出现欠拟合的情况,总而言之,c过大或者过小,泛化能力都会变差。本文设置参数c为1。

    4 PCA-SⅤM人脸识别模型的测试
    测试时,首先读取测试数据,类似于处理训练数据,需要对测试数据进行降维和归一化处理,然后利用训练所得的模型对测试数据集进行分类识别。将识别结果与本身自带的标签(即这是第几个人的人脸图片)进行比对,可以获得识别准确率。测试结果表明, 基于PCA-SVM的人脸识别方法准确率为83.9024%。这里选取第8个人的人脸图片作为示例,可以看到在最终的人脸识别阶段可以准确地进行人脸识别。
    备注:简介部分仅作为理论参考,与本文程序和运行结果略有出入。

    二、源代码

    function varargout = FaceRecognitionDemo(varargin)
    % FACERECOGNITIONDEMO M-file for FaceRecognitionDemo.fig
    %      FACERECOGNITIONDEMO, by itself, creates a new FACERECOGNITIONDEMO or raises the existing
    %      singleton*.
    %
    %      H = FACERECOGNITIONDEMO returns the handle to a new FACERECOGNITIONDEMO or the handle to
    %      the existing singleton*.
    %
    %      FACERECOGNITIONDEMO('CALLBACK',hObject,eventData,handles,...) calls the local
    %      function named CALLBACK in FACERECOGNITIONDEMO.M with the given input arguments.
    %
    %      FACERECOGNITIONDEMO('Property','Value',...) creates a new FACERECOGNITIONDEMO or raises the
    %      existing singleton*.  Starting from the left, property value pairs are
    %      applied to the GUI before FaceRecognitionDemo_OpeningFcn gets called.  An
    %      unrecognized property name or invalid value makes property application
    %      stop.  All inputs are passed to FaceRecognitionDemo_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 FaceRecognitionDemo
    
    % Last Modified by GUIDE v2.5 16-Mar-2015 21:04:37
    
    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name',       mfilename, ...
                       'gui_Singleton',  gui_Singleton, ...
                       'gui_OpeningFcn', @FaceRecognitionDemo_OpeningFcn, ...
                       'gui_OutputFcn',  @FaceRecognitionDemo_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 FaceRecognitionDemo is made visible.
    function FaceRecognitionDemo_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 FaceRecognitionDemo (see VARARGIN)
    
    % Choose default command line output for FaceRecognitionDemo
    handles.output = hObject;
    
    % Update handles structure
    guidata(hObject, handles);
    
    % UIWAIT makes FaceRecognitionDemo wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    
    
    % --- Outputs from this function are returned to the command line.
    function varargout = FaceRecognitionDemo_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 selectPCA.
    function selectPCA_Callback(hObject, eventdata, handles)
    % hObject    handle to selectPCA (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    set(handles.selectPCA,'value',1);
    % Hint: get(hObject,'Value') returns toggle state of selectPCA
    
    
    % --- Executes on button press in clickBeginSim.
    function clickBeginSim_Callback(hObject, eventdata, handles)
    % hObject    handle to clickBeginSim (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    if get(handles.selectPCA,'value')
        gMetholdSelect=1;
    end
    
    
    if get(handles.selectSinglaImageRec,'value')
        gOneImgOrRate=1;
    end
    if get(handles.selectRecogRate,'value')
        gOneImgOrRate=2;
    end
    
    gTrainNum = str2double(get(handles.inputTrainNum,'string'));
    if gTrainNum<=0 || gTrainNum>10
        disp('error!');
    end
    %% face detect
    if gOneImgOrRate == 1%检测单幅图片
        %
        if gMetholdSelect==1%
            pic = double(handles.pic);
            testImgData=reshape(pic,size(pic,1)*size(pic,2),1);
            trainPcaData = handles.trainPcaData;
            ImageIndex = recognizeSingleImgPCA(trainPcaData,testImgData);
            RealIndex = ceil(ImageIndex/gTrainNum);
        end
        
        path = strcat('att_faces\s',num2str(RealIndex));
        matchImg=imread(strcat(path,'\',num2str(2),'.pgm'));
        axes(handles.axes2);
        imshow(matchImg);
        title('从人脸库中匹配出的人脸图像');
    end
    
    if gOneImgOrRate == 2%计算识别概率
        if gMetholdSelect == 1
            processPCARecognizeRate(handles);
        end
    end
    % --- Executes on button press in selectRecogRate.
    function selectRecogRate_Callback(hObject, eventdata, handles)
    % hObject    handle to selectRecogRate (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    set(handles.selectSinglaImageRec,'value',0);
    set(handles.selectRecogRate,'value',1);
    set(handles.inputTrainNum,'Enable','off');
    set(handles.buttonTrainSamples,'Enable','off');
    set(handles.buttonSelectImg,'Enable','off');
    % Hint: get(hObject,'Value') returns toggle state of selectRecogRate
    
    
    % --- Executes on button press in selectSinglaImageRec.
    function selectSinglaImageRec_Callback(hObject, eventdata, handles)
    % hObject    handle to selectSinglaImageRec (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    set(handles.selectSinglaImageRec,'value',1);
    set(handles.selectRecogRate,'value',0);
    
    set(handles.inputTrainNum,'Enable','on');
    set(handles.buttonTrainSamples,'Enable','on');
    set(handles.buttonSelectImg,'Enable','on');
    % Hint: get(hObject,'Value') returns toggle state of selectSinglaImageRec
    
    
    
    function inputTrainNum_Callback(hObject, eventdata, handles)
    % hObject    handle to inputTrainNum (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 inputTrainNum as text
    %        str2double(get(hObject,'String')) returns contents of inputTrainNum as a double
    
    
    % --- Executes during object creation, after setting all properties.
    function inputTrainNum_CreateFcn(hObject, eventdata, handles)
    % hObject    handle to inputTrainNum (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 buttonSelectImg.
    function buttonSelectImg_Callback(hObject, eventdata, handles)
    % hObject    handle to buttonSelectImg (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({  '*.*','All Files(*.*)';}, '选择文件');
    if isequal([filename,pathname],[0,0])
        return
    else
        %读取图片
        picPath = fullfile(pathname,filename);
        pic = imread(picPath);
        handles.pic = pic;
    end
    

    三、运行结果

    在这里插入图片描述
    在这里插入图片描述

    四、matlab版本及参考文献

    1 matlab版本
    2014a

    2 参考文献
    [1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
    [2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
    [3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
    [4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
    [5]孟逸凡,柳益君.基于PCA-SVM的人脸识别方法研究[J].科技视界. 2021,(07)
    [6]张娜,刘坤,韩美林,陈晨.一种基于PCA和LDA融合的人脸识别算法研究[J].电子测量技术. 2020,43(13)
    [7]陈艳.基于BP神经网络的人脸识别方法分析[J].信息与电脑(理论版). 2020,32(23)
    [8]戴骊融,陈万米,郭盛.基于肤色模型和SURF算法的人脸识别研究[J].工业控制计算机. 2014,27(02)

    展开全文
  • 完整代码可直接运行,运行效果图见压缩包
  • 人脸检测是人脸识别、人机交互、智能视觉监控等:工作的前提。近年来,在模式识别与计算机视觉领域,人脸检测已经成为一个受到普遍 重视、研究十分活跃的方向。本文针对复杂背景下的彩色正面人脸图像,将肤色分割、模板...
  • 点击“人脸识别”按钮调用子函数GUI reg, 通过每张图片所对应的标签来进行匹配, 从而得出识别结果。 3 PCA-SⅤM人脸识别模型的建立 3.1人脸库构建 人脸识别模型的建立首先需要适当的人脸库。本文分两步构建人脸库...
  • 基于matlab GUI KL变换人脸识别 二、源代码 function varargout = renlian(varargin) % RENLIAN MATLAB code for renlian.fig % RENLIAN, by itself, creates a new RENLIAN or raises the existing % singleton*. %...
  • 完整代码可直接运行,运行效果图见压缩包
  • 打算绘制一个简单的GUI来应用人脸识别功能。 主界面如下所示: 签到打开在点开后直接进行人脸识别,如果成功则自动关闭视频窗口。 录入新的人脸界面: 输入姓名后打开摄像头,开始拍摄镜头前的人的照片...
  • 1.python gui人脸识别系统(链接本地摄像头) 2.运行程序,打开相机,人脸识别,签到数据下载 3.关闭相机,退出程序功能
  • MATLAB人脸识别疫情防护门禁系统 课题介绍:该系统为基于MATLAB的疫情防护门禁系统。建立一个GUI可视化界面,将疑似病例录入进人脸库,对其进行训练。测试的时候,采集一张全身照人脸图片,进行人脸定位,分割,和库...
  • 人脸识别】基于PCA+SVM人脸识别(准确率)matlab源码含GUI.md
  • PCA人脸识别GUI(ORL+Yale人脸库)
  • 一、LBP简介 LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子;它具有旋转不变性和灰度不变性等显著的优点。它是首先由T. Ojala, M.Pietikäinen, 和D. Harwood 在1994年提出,用于...
  • 应用统计方法解决模式识别问题时,一再碰到的问题之一就是维数问题。在低维空间里解析上或计算上行得通的方法,在高维空间里往往行不通。因此,降低维数有时就会成为处理实际问题的关键。 1 问题描述:如何根据实际...
  • 快速高效的人脸识别,其关键在于提取到精准表征人脸的特征。从人脸图像中找出最能表征人脸的特征空间,是主成分分析(Principal Component Analysis, PC A) [2] 在人脸特征提取中的基本思想。在这个过程中, 不能...
  • 用PCA算法实现的人脸识别系统,算法经过ORL人脸库验证了有效性,上传的这个代码可以自己构建人脸库,采集摄像头数据实时进行人脸识别,不足的是考勤数据导出部分的程序没有写,MATLAB当初只是用来做算法验证,数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,305
精华内容 1,322
关键字:

gui人脸识别