今天学习了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(\'识别后的图像\')
网上找到的图片,希望不算是侵权吧。
处理后的图片