matlab人脸识别_MATLAB--数字图像处理 简单人脸识别

4988030b79238920d582be40852839f7.png

简单人脸识别

思路
找到图像中连通域面积最大的那块连通域。

i=imread('face.jpg');
I=rgb2gray(i);        
BW=im2bw(I);             %利用阈值值变换法将灰度图像转换成二进制图像
figure(1);
imshow(BW);


%最小化背景
[n1 n2]=size(BW);

r=floor(n1/10); %分成10块  行
c=floor(n2/10);%分成10块  列
x1=1;x2=r;%对应行初始化
s=r*c; %块面积

for i=1:10
    y1=1;y2=c;%对应列初始化
    for j=1:10
    %对四周区域进行处理 
        if(y2<=c || y2>=9*c) || (x1==1 || x2==r*10)
            loc=find(BW(x1:x2,y1:y2)==0);%找到一块中像素为0的坐标 结果存在矩阵中
            [o p]=size(loc);
            pr=o*100/s;%黑色像素所占比例
      
            if pr<=100
                BW(x1:x2,y1:y2)=0;% 该块变成全黑
            end
            imshow(BW);
        end
        %列跳跃 就是移到下一块
        y1=y1+c;
        y2=y2+c;
    end
    %行跳跃 也就是移到下一行
    x1=x1+r;
    x2=x2+c;
end
figure(2)
subplot(1,2,1);
imshow(BW)
title('图像处理');
%人脸识别
L=bwlabel(BW,8);%利用bwlabel()函数得到连通域区间
BB=regionprops(L,'BoundingBox');%得到矩形框 去框住每一个连通域

%对每个矩形框进行记录,记录其左上角点,长,宽   然后转换成矩阵形式
BB1=struct2cell(BB);
BB2=cell2mat(BB1);

[s1 s2]=size(BB2);
mx=0;
for k=3:4:s2-1
    p=BB2(1,k)*BB2(1,k+1); %连通域矩形面积
    %找出最大连通域面积 那块连通域就是我们寻找的人脸了
    if p>mx && (BB2(1,k)/BB2(1,k+1))<1.8
        mx=p;
        j=k;
    end
end
subplot(1,2,2);
title('人脸识别');
imshow(I);
hold on;
%画出人脸区域
rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j)],'EdgeColor','r')

结果

2d112750744a4c83af63299023225965.png

74d13384dcbf80acd470e95e44eaf869.png
  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值