【人脸定位】基于matlab图像处理的人脸定位系统【源码97期】

本文介绍了MATLAB在人脸定位中的应用,包括使用RGB到YCbCr转换、肤色概率计算、阈值化、数学形态学处理等步骤,并展示了部分源码,以R2019a版本为例,旨在提供一个基础的人脸定位实现框架。
摘要由CSDN通过智能技术生成

一、简介

基于matlab图像处理的人脸定位系统,人脸定位是计算机视觉领域的一个重要研究方向,其主要目的是从图像或视频中准确地检测出人脸的位置,并定位面部的关键特征点。MATLAB作为一款强大的数值计算与数据分析软件,为人脸定位提供了丰富的算法工具和实现平台。本文将介绍MATLAB在人脸定位中的应用,包括基本原理、常用算法及实现方法。

二、部分源码

clc;
clear all;
close all;
tic
x=imread('3.jpg');
y=rgb2ycbcr(x); %将彩色图片从RGB空间转换到YCbCr色彩空间
[a b c]=size(y); %获取图像的行数、列数、页数;注意新空间里图像是三维数组
cb=double(y(:,:,2)); %得到图像的Cb分量
cr=double(y(:,:,3)); %得到图像的Cr分量
%下面开始计算每个像素点的肤色概率
for i=1:a;
    for j=1:b
        w=[cb(i,j) cr(i,j)]; %色度矩阵
        n=[97.0916 23.3700;23.3700 137.9966]; %协方差矩阵,对应此处离散高斯分布
        p(i,j)=exp((-0.5)*(w-m)*inv(n)*(w-m)'); %计算肤色概率,即相似度
        end
end
z=p./max(max(p));%归一化结果
%下面开始阈值化
%figure
th=0.5;
for i=1:a
    for j=1:b
        if(z(i,j)>th) 
            z(i,j)=1;
        else
            z(i,j)=0;
        end
    end
end
figure;%%开始一边处理一边出图了!
subplot(2,2,1);
imshow(z);
title('阈值化图像') %阈值化结果
%下面做数学形态学处理,先后进行了开运算、闭运算、填洞、腐蚀及膨胀操作
se=strel('square',3);
    f=imopen(z,se); %开运算
    f=imclose(f,se); %闭运算
        f=imfill(f,'holes');%填洞
       se1=strel('square',8); 
%构造结构元素(strel是Structuring element的简写)
    f=imerode(f,se1); %腐蚀
    f=imdilate(f,se1); %膨胀
    %至此得到了一个较纯净的肤色区域
%下面试图将人脸区域与其它肤色区域分割开
 [L,num]=bwlabel(f,4); num(连通区域的个数)
    for i=1:num;
        [r,c]=find(L==i);%第i个连通区域
        len=max(r)-min(r)+1;%区域长度
        wid=max(c)-min(c)+1;%区域宽度
                area_sq=len*wid;%区域面积
        area=size(r,1);%区域大小,即像素点的个数
        %开始判定第i个连通区域是不是人脸区域
        for j=1:size(r,1)
            if(len/wid<.8)|(len/wid>2.4)|size(r,1)<200|area/area_sq<0.55
                L(r(j),c(j))=0;%如果不是人脸区域,则通过赋值将其融入背景色
            else
                continue;
            end
        end
    end
    subplot(2,2,2);
imshow(L);
title('人脸区域')%人脸区域显示
    w=L&z;
    subplot(2,2,3);
imshow(w);
title('人脸特征图像')%人脸特征点显示
%开始标记人脸区域,这里用矩形标记,读者也可以尝试用
    [r c]=find(L~=0);
    r_min=min(r);
r_max=max(r);
    subplot(2,2,4);
imshow(x); 
title('人脸定位图像')
    rectangle('Position',[c_min r_min c_max-c_min r_max-r_min],'EdgeColor','r');
%以矩形区域为人脸检测的结果
toc

三、运行结果

 四、matlab版本

MATLAB R2019a

五、学习与交流

文中不足之处请大家多多指教,学习与交流可以联系企鹅:3752243968
文中部分源码仅供参考,若需要全部代码可以私信

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值