`
wangangie4
  • 浏览: 42783 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

基于肤色和眼睛定位的人脸检测算法

 
阅读更多

  本文提出了一种基于肤色信息和眼睛粗略定位的人脸检测算法。该算法先对Anil K.Jain 的Cb、Cr椭圆聚类方法进行了改进,用改进的算法进行肤色提取,经过肤色区域的分析,对人脸区域进行预检测,确定人脸可能区域,然后再根据眼睛的粗略定位进一步确定人脸区域。
  一、肤色分析(skin.m)
  Anil K.Jain提出的基于YCbCr颜色空间的肤色模型,根据当前点的Cb Cr值判断是否为肤色。 % Anil K.Jain提出的基于YCbCr颜色空间的肤色模型 % 根据当前点的Cb Cr值判断是否为肤色 function result = skin(Y,Cb,Cr) % 参数 a = 25.39; b = 14.03; ecx = 1.60; ecy = 2.41; sita = 2.53; cx = 109.38; cy = 152.02; xishu = [cos(sita) sin(sita);-sin(sita) cos(sita)]; % 如果亮度大于230,则将长短轴同时扩大为原来的1.1倍 if(Y > 230) a = 1.1*a; b = 1.1*b; end % 根据公式进行计算 Cb = double(Cb); Cr = double(Cr); t = [(Cb-cx);(Cr-cy)]; temp = xishu*t; value = (temp(1) - ecx)^2/a^2 + (temp(2) - ecy)^2/b^2; % 大于1则不是肤色,返回0;否则为肤色,返回1 if value > 1 result = 0; else result = 1; end 二、眼睛粗略定位(findeye.m) % 判断二值图像中是否含有可能是眼睛的块 % bImage----二值图像 % x---------矩形左上角顶点X坐标 % y---------矩形左上角顶点Y坐标 % w---------矩形宽度 % h---------矩形长度 % 如果有则返回值eye等于1,否则为0 function eye = findeye(bImage,x,y,w,h) % 根据矩形相关属性得到二值图像中矩形区域中的数据 % 存放矩形区域二值图像信息 part = zeros(h,w); % 二值化 for i = y:(y+h) for j = x:(x+w) if bImage(i,j) == 0 part(i-y+1,j-x+1) = 255; else part(i-y+1,j-x+1) = 0; end end end [L,num] = bwlabel(part,8); % 如果区域中有两个以上的矩形则认为有眼睛 if num skin(Y,Cb,Cr) == 1) gray(i,j) = 255; else gray(i,j) = 0; end end end end % 二值图像形态学处理 SE=strel('arbitrary',eye(5)); %gray = bwmorph(gray,'erode'); % imopen先腐蚀再膨胀 gray = imopen(gray,SE); % imclose先膨胀再腐蚀 %gray = imclose(gray,SE); imshow(gray); % 取出图片中所有包含白色区域的最小矩形 [L,num] = bwlabel(gray,8); STATS = regionprops(L,'BoundingBox'); % 存放经过筛选以后得到的所有矩形块 n = 1; result = zeros(n,4); figure,imshow(I); hold on; for i = 1:num box = STATS(i).BoundingBox; x = box(1); %矩形坐标x y = box(2); %矩形坐标y w = box(3); %矩形宽度w h = box(4); %矩形高度h % 宽度和高度的比例 ratio = h/w; ux = uint8(x); uy = uint8(y); if ux > 1 ux = ux - 1; end if uy > 1 uy = uy - 1; end % 可能是人脸区域的矩形应满足以下条件: % 1、高度和宽度必须都大于20,且矩形面积大于400 % 2、高度和宽度比率应该在范围(0.6,2)内 % 3、函数findeye返回值为1 if w  0.6 && findeye(gray,ux,uy,w,h) == 1 % 记录可能为人脸的矩形区域 result(n,:) = [ux uy w h]; n = n+1; end end % 对可能是人脸的区域进行标记 if size(result,1) == 1 && result(1,1) > 0 rectangle('Position',[result(1,1),result(1,2),resu lt(1,3),result(1,4)],'EdgeColor','r'); else % 如果满足条件的矩形区域大于1则再根据其他信息进行筛选 for m = 1:size(result,1) m1 = result(m,1); m2 = result(m,2); m3 = result(m,3); m4 = result(m,4); % 标记最终的人脸区域 if m1 + m3 < width && m2 + m4 < heigth rectangle('Position',[m1,m2,m3,m4],'EdgeColor','r' ); end end end 四、主函数(main.m) %清理窗口 close all clear all clc % 输入图像名字 img_name = input('请输入图像名字(图像必须为RGB图像,输入0结束):','s'); % 当输入0时结束 while ~strcmp(img_name,'0') % 进行人脸识别 facedetection(img_name); img_name = input('请输入图像名字(图像必须为RGB图像,输入0结束):','s'); end
分享到:
评论

相关推荐

    Matlab 基于肤色和眼睛定位的人脸检测算法

    本文提出了一种基于肤色信息和眼睛粗略定位的人脸检测算法。该算法先对 Anil K.Jain的 Cb 、 Cr 椭圆聚类方法进行了改进,用改进的算法进行肤色提取,经过肤色区域的分析,对人脸区域进行预检测,确定人脸可能区域,...

    【老生谈算法】基于肤色和眼睛定位的人脸检测算法——MATLAB实现.doc

    【老生谈算法】基于肤色和眼睛定位的人脸检测算法——MATLAB实现.doc

    基于肤色的实时人脸检测算法研究

    研究了一种基于肤色的人脸检测算法的设计与实现过程。在YIQ颜色空间中,进行了有效的肤色提取,把提取到的肤色与背景图像信息转为二值图像进行形态学降噪处理,再采用质心定位法进行准确的眼睛定位,最后对检测到的...

    基于YCbCr空间的高斯肤色模型的人脸检测

    主要研究人脸检测算法,分析了现有人脸检测算法的特点和不足之处。采用基于YCbCr 空间的高斯肤色模 型,利用颜色信息把彩色图像分割成皮肤区、头发区和背景区。对皮肤区进行去噪处理,实现脸部区域的具体定位, 然后...

    基于肤色检测的人眼定位的源程序

    基于肤色检测的人眼定位的源程序,简单实用快速。

    基于彩色图像特征的人脸识别

    提出了一种基于判定肤色和人眼几何位置关系的人脸检测方法。首先通过对人脸图像光照增强与平滑去噪等预处理归一化彩色图像,再将图像在HSV色彩空间进行肤色分割。生成二值化图像,采用形态学滤波器对其降噪,并使用...

    基于颜色空间的眼睛与下巴的定位

    主要研究人脸检测算法,分析了现有人脸检测算法的特点和不足之处。采用基于YCbCr 空间的高斯肤色模型,利用颜色信息把彩色图像分割成皮肤区、头发区和背景区。对皮肤区进行去噪处理,实现脸部区域的具体定位, 然后...

    基于PCA的人脸识别技术的研究

    系统测试过程中发现,基于肤色模型的人脸检测对正面人脸的检测效果较好,而对多尺度检测的能力较弱并且对光线的变化敏感。 (3)比较深入的分析了PCA人脸识别方法的原理,并对PCA在应用过程中遇到的特征值选择和距离...

    驾驶员疲劳检测中的眼睛定位与状态分析 (2013年)

    针对驾驶员头部多角度变化时眼睛定位困难的现状,提出了基于肤色检测和纹理特征的驾驶员眼睛定位算法。该算法采用肤色检测定位出人脸图像;根据眼睛灰度范围与其他部位的差异进行人脸图像二值化和形态学图像处理,...

    基于特征提取与认证的彩色图像人脸检测

    利用人脸面部构造产生的灰度特性提取眼睛,利用嘴唇的色度特征分割出嘴巴,进而根据眼睛和嘴巴构成三角形模板的特性,精确定位人脸在图像中的位置。实验结果表明,这种结合肤色和面部特征的算法,能够对人脸进行较...

Global site tag (gtag.js) - Google Analytics