matlab 面部识别源码

今天学习了matlab面部识别的的小算法,虽然功能不是很强大,但是感觉挺好玩的,分享一下

 1 clear all;
 2 %% 
 3 %读取原始图像,进行二值化处理
 4 
 5 img=imread('face.jpg'); %读入图像
 6 subplot(221),imshow(img);
 7 title('原图')
 8 I=rgb2gray(img);  %转换为灰度图像
 9 I=wiener2(I,[5 5]);
10 BW=im2bw(I);      %二值化
11 subplot(222),imshow(BW);
12 title('二值图像')
13 
14 %%
15 % 对二值图像进行预处理,减少北京区域,尽量除去
16 % 背景区域,为应用人脸识别算法做准备
17 [n1 n2]=size(BW); %图片尺寸
18 r=floor(n1/10);    %尺寸除以10
19 c=floor(n2/10);
20 x1=1;
21 x2=r;
22 s=r*c;
23 %减小背景区域,将图像部分边缘区域设置为黑色
24 for i=1:10;
25     y1=1;y2=c;
26     for j=1:10
27         if(y2<=c|y2>=9*c)|(x1==1|x2==r*10)
28             BW(x1:x2,y1:y2)=0;
29         end
30         y1=y1+c;
31         y2=y2+c;
32     end
33     x1=x1+r;
34     x2=x2+r;
35 end
36 subplot(223),,imshow(BW)
37 title('预处理后的处理二维值图')
38 
39 %%
40 % 通过确认人脸面积在包含连通域的矩形中面积最大,且面部的长度
41 % 与宽度比小于2来识别脸部区域
42 L=bwlabel(BW,4);
43 BB=regionprops(L,'BoundingBox');
44 BB1=struct2cell(BB);
45 BB2=cell2mat(BB1);
46 [s1 s2]=size(BB2);
47 mx=0;
48 for k=3:4:s2-1
49     p=BB2(1,k)*BB2(1,k+1);
50     if p>mx & (BB2(1,k+1)/BB2(1,k))<2
51         mx=p;
52         j=k;
53     end
54 end
55 subplot(224),imshow(img)
56 hold on;
57 rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j+1)],'EdgeColor','y')
58 title('识别后的图像')

网上找到的图片,希望不算是侵权吧。

处理后的图片

posted @ 2013-06-28 23:27  起风啦  阅读(1194)  评论(0)    收藏  举报