资源简介

人脸检测定位算法,对人脸区域进行预检测,确定人脸可能区域,然后再根据眼睛的粗略定位进一步确定人脸区域。

资源截图

代码片段和文件信息

function facedetection(img_name)  
% 读取RGB图像  
I = imread(img_name);  
% 转换为灰度图像  
gray = rgb2gray(I);  
% 将图像转化为YCbCr颜色空间  
YCbCr = rgb2ycbcr(I);  
% 获得图像宽度和高度  
heigth = size(gray1);  
width = size(gray2);  
% 根据肤色模型将图像二值化  
for i = 1:heigth  
    for j = 1:width  
        Y = YCbCr(ij1);  
        Cb = YCbCr(ij2);  
        Cr = YCbCr(ij3);  
        if(Y < 80)  
            gray(ij) = 0;  
        else  
            if(skin(YCbCr) == 1)  
                gray(ij) = 255;  
            else  
                gray(ij) = 0;  
            end  
        end  
    end  
end  
% 二值图像形态学处理  
SE=strel(‘arbitrary‘eye(5));    
%gray = bwmorph(gray‘erode‘);  
% imopen先腐蚀再膨胀  
gray = imopen(graySE);  
% imclose先膨胀再腐蚀  
%gray = imclose(graySE);  
imshow(gray);  
% 取出图片中所有包含白色区域的最小矩形  
[Lnum] = bwlabel(gray8);  
STATS = regionprops(L‘BoundingBox‘);  
% 存放经过筛选以后得到的所有矩形块  
n = 1;  
result = zeros(n4);  
figureimshow(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.62)内  
    %   3、函数findeye返回值为1  
    if w < 20 || h < 20 || w*h < 400  
        continue  
    elseif ratio < 2 && ratio > 0.6 && findeye(grayuxuywh) == 1  
        % 记录可能为人脸的矩形区域  
        result(n:) = [ux uy w h];  
        n = n+1;  
    end  
end  
% 对可能是人脸的区域进行标记  
if  size(result1) == 1 && result(11) > 0  
    rectangle(‘Position‘[result(11)result(12)result(13)result(14)]‘EdgeColor‘‘r‘);  
else  
    % 如果满足条件的矩形区域大于1则再根据其他信息进行筛选  
    for m = 1:size(result1)  
        m1 = result(m1);  
        m2 = result(m2);  
        m3 = result(m3);  
        m4 = result(m4);  
        % 标记最终的人脸区域  
        if m1 + m3 < width && m2 + m4 < heigth  
            rectangle(‘Position‘[m1m2m3m4]‘EdgeColor‘‘r‘);  
        end  
    end  
end   

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件       43878  2017-07-20 14:20  22.bmp
     文件        2478  2017-07-20 14:10  facedetection.m
     文件         723  2017-07-20 14:10  findeye.m
     文件         327  2017-07-20 14:11  main.m
     文件         687  2017-07-20 14:09  skin.m
     文件      175350  2017-07-20 14:30  11.bmp

评论

共有 条评论