失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > MATLAB--数字图像处理 简单人脸识别

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

时间:2021-01-26 00:55:46

相关推荐

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=floor(n2/10);%分成10块 列x1=1;x2=r;%对应行初始化s=r*c; %块面积for i=1:10y1=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<=100BW(x1:x2,y1:y2)=0;% 该块变成全黑endimshow(BW);end%列跳跃 就是移到下一块y1=y1+c;y2=y2+c;end%行跳跃 也就是移到下一行x1=x1+r;x2=x2+c;endfigure(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-1p=BB2(1,k)*BB2(1,k+1); %连通域矩形面积%找出最大连通域面积 那块连通域就是我们寻找的人脸了if p>mx && (BB2(1,k)/BB2(1,k+1))<1.8mx=p;j=k;endendsubplot(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')

结果

如果觉得《MATLAB--数字图像处理 简单人脸识别》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。