人脸定位程序,有写地方看不懂,求指点!
这是一个用matlab写的人脸定位的程序,经过测试,当背景颜色暗而且单一,人脸较亮时,定位结果还可以。
上面的一些注释是我自己写的,不知道对不对。
剩下没有写注释的地方我就看不懂,有没有高手帮忙指点一下撒,多谢了!
I=imread('face12.jpg');if ndims(I)>2 I=rgb2gray(I);%彩色图像灰度化end;%I=histeq(I);%imshow(I);BW=im2bw(I);%二值化imshow(BW);%显示二值化后的图片[n1 n2]=size(BW);%图片长和宽%把图片分成100块r=floor(n1/10);%每一小块长度(floor:向下取整)c=floor(n2/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) if x1==1|x2==10*r|y1==1|y2==10*c loc=find(BW(x1:x2, y1:y2)==0); [o p]=size(loc);%区域长和宽 pr=o*100/s; if pr<=100 BW(x1:x2, y1:y2)=0;%把这一小块填充成黑色 r1=x1;r2=x2;s1=y1;s2=y2;%????? pr1=0;%????? end end y1=y1+c; y2=y2+c; end x1=x1+r; x2=x2+r;endfigure,imshow(BW)%显示去边缘后的图片L=bwlabel(BW,8);%8连通区BB=regionprops(L, 'BoundingBox');%用来测量标注矩阵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; endendfigure,imshow(I);hold on;rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j+1)],'EdgeColor','r' )