请教matlab处理问题,请问下面每一步的意思,

%%%%% Reading of a RGB image

i=imread('face1.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<=c | 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 pr<=100
BW(x1:x2, y1:y2)=0;
r1=x1;r2=x2;s1=y1;s2=y2;
pr1=0;
end
imshow(BW);
end
y1=y1+c;
y2=y2+c;
end

x1=x1+r;
x2=x2+r;
end
figure,imshow(BW)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% detection of face object

L = bwlabel(BW,8);
BB = regionprops(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;
end
end
figure,imshow(I);
hold on;
rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j+1)],'EdgeColor','r' )

i=imread('face1.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<=c | y2>=9*c) | (x1==1 | x2==r*10)%这一判断条件就是把图像最外围全部归零
loc=find(BW(x1:x2, y1:y2)==0); %find查找矩阵中满足条件的位置,[r,c,v]=find(X),r,c为不为零元素的行列,v为其数值,X也可由逻辑表达式替代
%这里loc应该是BW窗口中的为黑像素的个数,就是后面的o值,在下面的if中做了一个条件判断
[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
imshow(BW);
pause(1);
end
y1=y1+c;
y2=y2+c;
end

x1=x1+r;
x2=x2+r;
end
figure,imshow(BW)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% detection of face object
%}
[L,num] = bwlabel(BW,8);%标记图像中的八连通区域 注:这里的num为51,即图中共分为51个区域
BB = regionprops(L, 'BoundingBox');%区域特征,boundingbox是指包围每个区域的最小矩形,数目与num相等
%区域特征还包含area,即每个区域的像素数 centroid
%即每个区域的重心
BB1=struct2cell(BB); %此函数是将结构体中各变量的值分别提取出了组成一个元细胞矩阵
BB2=cell2mat(BB1); %将单个的元组矩阵组成一个单一矩阵

[s1 s2]=size(BB2); %因为BB矩阵存储的是矩形的对角坐标,是四位,所以又元组矩阵转变成单一矩阵 %就是51*4=204也就是s2的值
mx=0;
for k=3:4:s2-1 %每四个数字对应一个矩形,matlab中的数组下标都是从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;
end
end
figure,imshow(I);
hold on;
rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j+1)],'EdgeColor','r' )
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-07
第一部分,读入图片
第二部分,最小化背景图片
第三部分,识别目标面
相似回答