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

举报
海轰Pro 发表于 2021/08/06 00:27:42 2021/08/06
4.6k+ 0 0
【摘要】 简单人脸识别 思路 找到图像中连通域面积最大的那块连通域。 i=imread('face.jpg'); I=rgb2gray(i); BW=im2bw(I); %利用阈值值变换法将灰度图像转换成二进制图像 figure(1); imshow(BW); %最小化背景 [n1 n2]=size(BW); r=floor(n1/10); %分成10块 行 c=fl...

简单人脸识别

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

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')

  
 

结果
在这里插入图片描述

文章来源: haihong.blog.csdn.net,作者:海轰Pro,版权归原作者所有,如需转载,请联系作者。

原文链接:haihong.blog.csdn.net/article/details/102526467

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。