解释以下MATLAB代码?

解释以下MATLAB代码?,第1张

这段MATLAB代码似乎是用来在摄像头中实时检测人脸的。让我来帮你解释一下各个部分的作用:

clc:清除命令行上的所有输出。

clear all:删除所有变量。

close all:关闭所有图窗。

web = webcam():创建一个webcam对象。

pic =web.snapshot:使用webcam对象捕获一张图像

detface=vision.CascadeObjectDetector():创建一个脸部检测器。

imshow(pic):显示图像。

while true:开始一个无限循环。

pic=web.snapshot:使用webcam对象捕获一张图像。

pic2=rgb2gray(pic):将图像转换为灰度图像。

bbox = step(detface,pic):使用脸部检测器在图像中检测脸部。

img = insertObjectAnnotation(pic,... 'rectangle',bbox,'Face'):在图像中标记出检测到的脸部。

imshow(img):显示标记后的图像。

希望这些解释能帮助您理解代码的作用。

大概看了一下,这个程序编得一团糟,肯定有问题~~~~看完头两个IF我已经疯了。编算法人的思路我说一下你就明白了。

读进一幅图,二进制化,也就是说比如200X120的矩阵,只有黑白,要么1,要么0.

用网格把它打成10X10的格子图,每格就有个20X12的小矩阵。然后

for i = 1:10

...

for j = 1:10

这两个FOR就是对这100个格子逐个进行分析,从格子1,一直到格子100,但实际上后面就发现是对对这100个格子的边缘格子进行分析 ,中间不动(就是假设 边缘最没用,脸不会出现在那儿,能扔就扔掉)

if (y2<=c | 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 pr<=100

BW(x1:x2, y1:y2)=0

r1=x1r2=x2s1=y1s2=y2% 这句话P用没有,整个程序前后都没出现r1,r2,s1,s2,在这儿定义有什么用?

pr1=0%同样是句P话,其他地方都没出现过pr1

end

end

y1=y1+c

y2=y2+c

end

x1=x1+r

x2=x2+r

然后这几句就是格子赋值 结束,继续前进,找下一个格子呗,又回到初始。。。

所以,上面这段程序,什么人脸不人脸检测的,就是把边缘全部变黑而己……

所以下面我也看不进去了。。。

补充:

还是说完吧,后面一段程序,其实就是把所有变黑的边缘的边界给勾了出来。没有任何新东西。。。

所以你这段程序,就是先把边缘全部抹黑,然后勾出这个边缘的边界,画出来,就行了。没有任何“人脸定位”的东西,就是假设人脸在图的中间,边缘没有任何信息。。。仅此而己~~~

function []=TwoDPCA

%%%%%%%%%%%%%特征脸显示已正确,训练与测试没有分开。

% Face recognition

clear all

close all

clc

M=200%%%%

traincopy=5%%%表示同一个人有几张相片。

eignum=3%%%选取的特征个数。

cel=cell(1,M)

cellafter=cell(1,M)

tt=clock

S=[]

ii=1

str=strcat('E:\三维人脸\2dfacedatabase\ORL\s1\1.pgm')

img=imread(str)

[ia ib]=size(img)

sum=zeros(ia,ib)

B=zeros(ia,ib)

for i=1:40

for j=1:5

str=strcat('E:\三维人脸\2dfacedatabase\ORL\s',int2str(i),'\',int2str(j),'.pgm')

eval('img=imread(str)')

sum=double(sum)+double(img)

cel{1,ii}=img

ii=ii+1

end

end

meanA=sum/M

cov=zeros(ib)

for i=1:M

img=cel{1,i}

B=double(img)-double(meanA)

temp=B'*B

cov=double(cov)+double(temp)

end

[vv dd]=eig(cov)

num2=size(vv)

% Sort and eliminate those whose eigenvalue is zero

v=[]

d=[]

for i=1:size(vv,2)

if(dd(i,i)>1e-4)

v=[v vv(:,i)]

d=[d dd(i,i)]

end

end

num1=size(v,2)

%sort, will return an ascending sequence

[B index]=sort(d)

ind=zeros(size(index))

dtemp=zeros(size(index))

vtemp=zeros(size(v))

len=length(index)

for i=1:len

dtemp(i)=B(len+1-i)

ind(i)=len+1-index(i)

vtemp(:,ind(i))=v(:,i)

end

d=dtemp

v=vtemp

imgafter=[]

for i=1:M

for j=1:eignum

img=cel{1,i}

temp1=double(img)*double(v(:,j))

imgafter=[imgafter temp1]

end

cellafter{1,i}=imgafter

imgafter=[]

end

timeconsume=etime(clock,tt)

testimg=M/traincopy

findimgnum=traincopy

suc=0

% figure(5)

for k=1:testimg

InputImage =imread(strcat('E:\三维人脸\2dfacedatabase\ORL\s',int2str(k),'\10.pgm'))

testafter=[]

for j=1:eignum

temp=double(InputImage)*double(v(:,j))

testafter=[testafter temp]

end

% Find Euclidean distance

e=[]

for i=1:M

tempA=double(testafter)-double(cellafter{1,i})

total=0

for j=1:eignum

aa=norm(tempA(:,j))

total=total+aa

end

e=[e total]

end

[C index]=sort(e)

min=index(1)

%%%%%%%计算正确率

testingroup=floor((min-1)/traincopy)+1%%计算要测试的图像所在的组

if testingroup==k

suc=suc+1

else

fprintf('%d.jpg fails to match!\n',k)

end

% %%%%%%%%%%%%%%%%%%%显示所有找到的与测试图像为同一个人的图片(可)。(显示所有与测试图片最小距离的那组,而不是比较出来的最小的5个)

% subplot(testimg,findimgnum+1,(k-1)*(findimgnum+1)+1)% subplot(行数,列数,放图像位置的序数)

% imshow(InputImage)

%

% for i=1:findimgnum

% temppos=(testingroup-1)*traincopy+i

% str=strcat('E:\三维人脸\testpic\orl\',int2str(temppos),'.pgm') %concatenates two strings that form the name of the image

% eval('img1=imread(str)')

% subplot(testimg,findimgnum+1,(k-1)*(findimgnum+1)+i+1)

% imshow(img1)

% drawnow

% end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

end

sucrate=suc/M*traincopy*100

fprintf('%2.1f%% matched successfully!\n',sucrate)

fprintf('it takes %3.2f S\n',timeconsume)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8047347.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存