MATLAB--数字图像处理 简单人脸识别
【摘要】 简单人脸识别
思路 找到图像中连通域面积最大的那块连通域。
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')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
结果
文章来源: haihong.blog.csdn.net,作者:海轰Pro,版权归原作者所有,如需转载,请联系作者。
原文链接:haihong.blog.csdn.net/article/details/102526467
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)