求MATLAB大神翻译一下这个人脸识别程序,以及大段落分别要要实现什么功能?虽然有的有注释,但是不全。
%%%%%ReadingofaRGBimagei=imread('touxiang.jpg');I=rgb2gray(i);BW=im2bw(I);%二值化figure,...
%%%%%Reading of a RGB image
i=imread('touxiang.jpg');
I=rgb2gray(i);
BW=im2bw(I);% 二值化
figure,imshow(BW)
[n1n2]=size(BW);
r=floor(n1/10);% 分成10块,行
c=floor(n2/10);% 分成10块,列 %取最近的较小整数
x1=1;x2=r;% 对应行初始化
s=r*c;%块面积
fori=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);
end
y1=y1+c; % 列跳跃
y2=y2+c; % 列跳跃
end
x1=x1+r;% 行跳跃
x2=x2+r; % 行跳跃
end
figure,imshow(BW)
L =bwlabel(BW,8); ;%标记图像中的八连通区域
BB = regionprops(L, 'BoundingBox'); %区域特征,boundingbox是指包围每个区域的最小矩形,数目与num相等
%区域特征还包含area,即每个区域的像素数centroid
%即每个区域的重心
BB1=struct2cell(BB); %此函数是将结构体中各变量的值分别提取出了组成一个元胞矩阵
BB2=cell2mat(BB1);%将单个的元胞矩阵组成一个单一矩阵
[s1s2]=size(BB2);%因为BB矩阵存储的是矩形的对角坐标,是四位,所以又元组矩阵转变成单一矩阵
mx=0;
fork=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% 如果满足面积块大,而且宽/高<1.8
mx=p;
j=k;
end
end
figure,imshow(I);
holdon;
rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j+1)],'EdgeColor','r') 展开
i=imread('touxiang.jpg');
I=rgb2gray(i);
BW=im2bw(I);% 二值化
figure,imshow(BW)
[n1n2]=size(BW);
r=floor(n1/10);% 分成10块,行
c=floor(n2/10);% 分成10块,列 %取最近的较小整数
x1=1;x2=r;% 对应行初始化
s=r*c;%块面积
fori=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);
end
y1=y1+c; % 列跳跃
y2=y2+c; % 列跳跃
end
x1=x1+r;% 行跳跃
x2=x2+r; % 行跳跃
end
figure,imshow(BW)
L =bwlabel(BW,8); ;%标记图像中的八连通区域
BB = regionprops(L, 'BoundingBox'); %区域特征,boundingbox是指包围每个区域的最小矩形,数目与num相等
%区域特征还包含area,即每个区域的像素数centroid
%即每个区域的重心
BB1=struct2cell(BB); %此函数是将结构体中各变量的值分别提取出了组成一个元胞矩阵
BB2=cell2mat(BB1);%将单个的元胞矩阵组成一个单一矩阵
[s1s2]=size(BB2);%因为BB矩阵存储的是矩形的对角坐标,是四位,所以又元组矩阵转变成单一矩阵
mx=0;
fork=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% 如果满足面积块大,而且宽/高<1.8
mx=p;
j=k;
end
end
figure,imshow(I);
holdon;
rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j+1)],'EdgeColor','r') 展开
2个回答
展开全部
% % % % %的RGB图像
我= imread(“touxiang.jpg”);
我= rgb2gray(我);
BW = im2bw(I);%二值化
图中,imshow(BW)
[n1n2]=大小(BW);
r =地板(n1/10);%分成十块,行
c =地板(n2/10);%分成十块,列%取最近的较小整数
x1 = 1;x2 = r %对应行初始化
s = r * c;%块面积
市中心= 1:10 %以图像尺寸百分之一的窗口大小滑动
日元= 1;y2 = c;%对应列初始化
j = 1:10
如果(y2 < = c | y2 > = 9 * c)|(x1 = = 1 | x2 = = r * 10)%这一判断条件就是把图像最外围全部归零
loc =找到(BW(x1,x2,y1,y2)= = 0);%找到查找矩阵中满足条件的位置,[r、c、v]=找到(X),r、c为不为零元素的行,列v为其数值,X也可由逻辑表达式替代
%这里loc应该是BW窗口中的为黑像素的个数,就是后面的o值,在下面的如果中做了一个条件判断
[o p]=大小(loc);
公关= o * 100 / s;%黑色像素所占的比例数
如果公关< = 100
BW(x1,x2,y1,y2)= 0;
r1 = x1,x2 r2 =;s1 = y1,s2 =日元;
pr1 = 0;
结束
imshow(BW);
结束
日元= y1 + c;%列跳跃
y2 = y2 + c;%列跳跃
结束
x1 = x1 + r;%行跳跃
x2 = x2 + r;%行跳跃
结束
图中,imshow(BW)
L = bwlabel(BW,8);;%标记图像中的八连通区域
的边界框(BB = regionprops(L’,大小));%区域特征,BoundingBox是指包围每个区域的最小矩形,数目与数字相等
%区域特征还包含区域,即每个区域的像素数重心
%即每个区域的重心
位= struct2cell(BB);%此函数是将结构体中各变量的值分别提取出了组成一个元胞矩阵
BB2组= cell2mat(位);%将单个的元胞矩阵组成一个单一矩阵
[s1s2]=大小(BB2组);%因为BB矩阵存储的是矩形的对角坐标,是四位,所以又元组矩阵转变成单一矩阵
mx = 0;
叉= 3:4:s2 - 1%每四个数字对应一个矩形,matlab中的数组下标都是从1开始
p = BB2组(k)* BB2组(k + 1);%宽*高
如果p > mx &(BB2组(k)/ BB2组(1、k + 1))< 1.8%如果满足面积块大,而且宽/高< 1.8
mx = p;
j = k;
结束
结束
图中,imshow(我);
holdon;
矩形(“位置”,[BB2组(1、j-2)BB2组(j - 1),BB2组(j),BB2组(1 + 1)]、“EdgeColor”、“r”)
我= imread(“touxiang.jpg”);
我= rgb2gray(我);
BW = im2bw(I);%二值化
图中,imshow(BW)
[n1n2]=大小(BW);
r =地板(n1/10);%分成十块,行
c =地板(n2/10);%分成十块,列%取最近的较小整数
x1 = 1;x2 = r %对应行初始化
s = r * c;%块面积
市中心= 1:10 %以图像尺寸百分之一的窗口大小滑动
日元= 1;y2 = c;%对应列初始化
j = 1:10
如果(y2 < = c | y2 > = 9 * c)|(x1 = = 1 | x2 = = r * 10)%这一判断条件就是把图像最外围全部归零
loc =找到(BW(x1,x2,y1,y2)= = 0);%找到查找矩阵中满足条件的位置,[r、c、v]=找到(X),r、c为不为零元素的行,列v为其数值,X也可由逻辑表达式替代
%这里loc应该是BW窗口中的为黑像素的个数,就是后面的o值,在下面的如果中做了一个条件判断
[o p]=大小(loc);
公关= o * 100 / s;%黑色像素所占的比例数
如果公关< = 100
BW(x1,x2,y1,y2)= 0;
r1 = x1,x2 r2 =;s1 = y1,s2 =日元;
pr1 = 0;
结束
imshow(BW);
结束
日元= y1 + c;%列跳跃
y2 = y2 + c;%列跳跃
结束
x1 = x1 + r;%行跳跃
x2 = x2 + r;%行跳跃
结束
图中,imshow(BW)
L = bwlabel(BW,8);;%标记图像中的八连通区域
的边界框(BB = regionprops(L’,大小));%区域特征,BoundingBox是指包围每个区域的最小矩形,数目与数字相等
%区域特征还包含区域,即每个区域的像素数重心
%即每个区域的重心
位= struct2cell(BB);%此函数是将结构体中各变量的值分别提取出了组成一个元胞矩阵
BB2组= cell2mat(位);%将单个的元胞矩阵组成一个单一矩阵
[s1s2]=大小(BB2组);%因为BB矩阵存储的是矩形的对角坐标,是四位,所以又元组矩阵转变成单一矩阵
mx = 0;
叉= 3:4:s2 - 1%每四个数字对应一个矩形,matlab中的数组下标都是从1开始
p = BB2组(k)* BB2组(k + 1);%宽*高
如果p > mx &(BB2组(k)/ BB2组(1、k + 1))< 1.8%如果满足面积块大,而且宽/高< 1.8
mx = p;
j = k;
结束
结束
图中,imshow(我);
holdon;
矩形(“位置”,[BB2组(1、j-2)BB2组(j - 1),BB2组(j),BB2组(1 + 1)]、“EdgeColor”、“r”)
追问
大哥,你真逗
追答
????????????????????????????????????????????????????????????????????????
博思aippt
2024-07-20 广告
2024-07-20 广告
博思AIPPT是基于ai制作PPT的智能在线工具,它提供了4种AI制作PPT的方式,包括AI生成大纲、AI直接生成PPT、文本生成PPT、AI提炼文档生成PPT,一站式集成多种AI生成PPT的方式,可满足办公用户的不同需求和使用场景。ai生...
点击进入详情页
本回答由博思aippt提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询