作业帮 > 综合 > 作业

用Matlab实现的人脸定位,急,

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/06/04 06:00:42
用Matlab实现的人脸定位,急,
i=imread('ent.jpg'); %读入图像
I=rgb2gray(i); %转换为灰度图像
BW=im2bw(I); %将图像转换为二值图像
%figure,imshow(BW) %显示图像
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% minimisation of background portion
[n1 n2]=size(BW);
r=floor(n1/10);
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=9*c) | (x1==1 | x2==r*10)
loc=find(BW(x1:x2,y1:y2)==0);
[o p]=size(loc);
pr=o*100/s;
if prmx & (BB2(1,k)/BB2(1,k+1))
用Matlab实现的人脸定位,急,
大概看了一下,这个程序编得一团糟,肯定有问题~~~~看完头两个IF我已经疯了.编算法人的思路我说一下你就明白了.
读进一幅图,二进制化,也就是说比如200X120的矩阵,只有黑白,要么1,要么0.
用网格把它打成10X10的格子图,每格就有个20X12的小矩阵.然后
for i = 1:10
...
for j = 1:10
这两个FOR就是对这100个格子逐个进行分析,从格子1,一直到格子100,但实际上后面就发现是对对这100个格子的边缘格子进行分析 ,中间不动(就是假设 边缘最没用,脸不会出现在那儿,能扔就扔掉)
if (y2=9*c) | (x1==1 | x2==r*10) % 保证是在边缘的格子里面
loc=find(BW(x1:x2, y1:y2)==0); % 这个格子(矩阵)里,有多少值为0的元素,即为背景元素,没用的,不是人脸.(所以这段 程序开头写了“将背景部分弱化”.
[o p]=size(loc); % 噢,找到了这么多个0
pr=o*100/s;
% 用pr值 来判断是否应该将这整个格子全部值 赋为0,比如一个格子里面只有几个1(比如几根头发),其它全是无用的信息0,那么干脆就把这个格子全部变成0,免得影响判断.pr的定义是有问题的,因为o永远小于s(你可以自己算算),所以所有的边缘格都会强行被赋为0,就是“全黑了”.
if p