【人脸检测】使用Gabor特征提取和神经网络进行人脸检测(Matlab代码实现)

 👨‍🎓个人主页:研学社的博客    

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

人脸检测(Face De tec tion)是在输入图像中确定所有人脸(如果存在)的位置,大小,位姿的过程。人
脸检测作为人脸信息处理中的一项关键技术,近年来成为模式识别与计算机视觉领域一项受到普遍重视,研究十分活跃的课题﹐人脸检测问题最初来源于人脸识别(Face Recogn ition)八人脸识别的研究可以追溯到20世纪六、七十年代,经过几十年的曲折发展已日趋成熟人脸检测是自动人脸识别系统的一个关键环节,但是早期的人脸识别研究主要针对具有较强约束条件的人脸图像(如无背景的图像),往往假设人脸位置已知或很容易获得,因此人脸检测问题并未受到重视,近几年随着电子商务等
应用的发展,人脸识别成为最有潜力的生物身份验证手段,这种应用背景要求自动人脸识别系统能够对一般环境图像具有一定的适应能力,因此所面临的一系列问题使得人脸检测开始作为一个独立的课题受到研究者的重视。今天,人脸检测的研究已得到蓬勃的发展。
目前,在人脸检测方面的研究主要有两类方法;基于特征的方法和基于分类的方法""。基于特征的
方法依靠搜索人脸的面部特征以及这些特征的几何关系检测人脸。这种方法在这特征点明显的情况下检测效果较好。但在光照变化比较大时候,人脸的检测就比较困难。基于分类的方法使用分类器把输入图像分成人脸与非人脸检测人脸[21。这样特征提取与分类器的设计就显得非常的重要。许多分类模型已经提出来了,但是它们当中有许多都是使用图像的像素值作为分类器的输入特征。
这种像素值特征不能表达出检测物体的形状以及纹理特征。所以应该找出具有相邻关系的更有效的特征正来提高检测性能。

现选用Gabor滤波器进行特征提取。Gabor滤波器具有良好的多尺度特性,能最好的兼顾信号在时
域和频域中的分辨能力,同时具有与生物视觉系统相近的特点3,所以近年来广泛应用于面部表情识
别[4,人脸识别5,指纹鉴别等领域。
 

📚2 运行结果

跟着步骤:选择任意图片。

 

部分代码:

function menuLoadImages

%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
face_folder = '../face/';  %LOCATION OF FACE IMAGES
non_face_folder = '../non-face/'; %LOCATION OF NON-FACE IMAGES
file_ext = '.png';
out_max = 1;  % DESIRED OUTPUT FOR DETECTING A FACE          
out_min = 2;  % DESIRED OUTPUT FOR NOT DETECTING A FACE      
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

IMGDB = cell (3,[]);

fprintf ('Loading Faces ');

folder_content = dir ([face_folder,'*',file_ext]);
nface = size (folder_content,1);
for k=1:nface
    string = [face_folder,folder_content(k,1).name];
    image = imread(string);    
    [m,n] = size(image);
    if (m~=27 || n~=18)
        continue;
    end
    f=0;
    for i=1:length(IMGDB)
        if strcmp(IMGDB{1,i},string)
            f=1;
        end
    end
    if f==1
        continue;
    end
    fprintf ('.');    
    IM {1} = im2vec (image);    % ORIGINAL FACE IMAGE
    IM {2} = im2vec (fliplr(image));    % MIRROR OF THE FACE 
    IM {3} = im2vec (circshift(image,1)); 
    IM {4} = im2vec (circshift(image,-1));
    IM {5} = im2vec (circshift(image,[0 1]));
    IM {6} = im2vec (circshift(image,[0 -1]));
    IM {7} = im2vec (circshift(fliplr(image),1));
    IM {8} = im2vec (circshift(fliplr(image),-1));
    IM {9} = im2vec (circshift(fliplr(image),[0 1]));
    IM {10} = im2vec (circshift(fliplr(image),[0 -1]));
    for i=1:10
        IMGDB {1,end+1}= string;
        IMGDB {2,end} = out_max;
        IMGDB (3,end) = {IM{i}};
    end    
end

fprintf ('\nLoading non-faces ');

folder_content = dir ([non_face_folder,'*',file_ext]);
nnface = size (folder_content,1);
for k=1:nnface
    string = [non_face_folder,folder_content(k,1).name];
    image = imread(string);
    [m n] = size(image);
    if (m~=27 || n~=18)
        continue;
    end
    f=0;
    for i=1:length(IMGDB)
        if strcmp(IMGDB{1,i},string)
            f=1;
        end
    end
    if f==1
        continue;
    end    
    fprintf ('.');
    IM {1} = im2vec (image);
    IM {2} = im2vec (fliplr(image));
    IM {3} = im2vec (flipud(image));
    IM {4} = im2vec (flipud(fliplr(image)));    
    for i=1:4
        IMGDB {1,end+1}= string;
        IMGDB {2,end} = out_min;
        IMGDB (3,end) = {IM{i}};
    end    
end
fprintf('\n');
save ('../data/imgdb.mat','IMGDB');

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]李建璞.基于Gabor滤波特征和一类分类器的人脸检测[J].石家庄铁道学院学报(自然科学版),2009,22(02):73-77.DOI:10.13319/j.cnki.sjztddxxbzrb.2009.02.030.

[2]曲仕茹,熊波.基于Gabor滤波和神经网络的人脸检测方法研究[J].西北工业大学学报,2011,29(05):690-694.

🌈4 Matlab代码实现

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值