⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 runfacerecog.m

📁 It is for Face Recognition
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  faceRecog: monte carlo sampling and SVM
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ids = [12 17 20 30 38]; m=5;
colormap('gray');
for j=1:5
    for k=1:10
      id = ids(j);
      offs = k+(j-1)*10;
      subplot(5,10, offs); f=loadATTFace(id, k);
      imagesc(f, [0 255]); axis off; 
    end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  multi-view, multi-scale model
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
side = 0.5; top= 1.8; low = -0.2; fw=15; fh=12; 
truth = load('feretGndTruth.dat');
offs=550; hEq = 'n';
for j=1:9
 subplot(3,3,j);
 [faceIcon]=getFeretFaceIcon(truth, hEq, offs+j, side, top, low, fw, fh);
end

% hairline model: 20x12
side = 0.5; top = 1.2; low = 0.0; fw = 20; fh=12;
[T1, lat1, mf1]=computeFeretFacePCA(side, top, low, fw, fh);

% upper face model: 20x20
side = 0.5; top= 1.0; low = 1.0; fw=20; fh=20; 
[T2, lat2, mf2]=computeFeretFacePCA(side, top, low, fw, fh);

% lower face model: 16x16
side = 0.4; top= -0.4; low = 1.4; fw=16; fh=16; 
[T3, lat3, mf3]=computeFeretFacePCA(side, top, low, fw, fh);

% full face model: 16x20
side = 0.5; top= 1.0; low = 1.5; fw=16; fh=20; 
[T4, lat4, mf4]=computeFeretFacePCA(side, top, low, fw, fh);

save 'pcaFeretFaceSide05Top12Low00W20H12LumaMin60Max150.dat' T1 -ascii;
save 'meanFeretFaceSide05Top12Low00W20H12LumaMin60Max150.dat' mf1 -ascii;

save 'pcaFeretFaceSide05Top10Low10W20H20LumaMin60Max150.dat' T2 -ascii;
save 'meanFeretFaceSide05Top10Low10W20H20LumaMin60Max150.dat' mf2 -ascii;

save 'pcaFeretFaceSide04Top-04Low14W16H16LumaMin60Max150.dat' T3 -ascii;
save 'meanFeretFaceSide04Top-04Low14W16H16LumaMin60Max150.dat' mf3 -ascii;

save 'latHairLineModel.dat' lat1 -ascii;
save 'latUpperModel.dat' lat2 -ascii;
save 'latLowerModel.dat' lat3 -ascii;
save 'latFullModel.dat' lat4 -ascii;

% show eig vales
lat1=load('latHairLineModel.dat');
lat2=load('latUpperModel.dat');
lat3=load('latLowerModel.dat');
lat4=load('latFullModel.dat');
subplot(2,2,1); stem(lat1(1:40)); title('\fontsize{12} hair line');
subplot(2,2,2); stem(lat2(1:40)); title('\fontsize{12} upper');
subplot(2,2,3); stem(lat3(1:40)); title('\fontsize{12} lower');
subplot(2,2,4); stem(lat4(1:40)); title('\fontsize{12} full');


% full face model
clear;


save 'pcaFeretFaceSide05Top10Low15W16H20LumaMin60Max150.dat' T4 -ascii;
save 'meanFeretFaceSide05Top10Low15W16H20LumaMin60Max150.dat' mf4 -ascii;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  faceRecog: ATT Face luma distrb modeling
%  total 40 persons, 10 views per person
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
nFace = 40; nPose = 10; 
for j=1:nFace
  offs = (j-1)*nPose;
  for k=1:nPose
    [face]=loadATTFace(j,k);
    fluma(offs+k)=mean(mean(face));
  end
end

[luma idx]=sort(fluma);
plot(luma);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  faceRecog: ATT Face labeling 
%  total 40 persons, 10 views per person
%  plot all faces
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
annotate ='n';     
nFace = 40; nPose = 10; 
if annotate == 'y'
    attEyes = zeros(nFace*nPose, 4);
    eyes = zeros(nPose, 4);

    for id=1:nFace
       for k=1:nPose
          hold off;       
          loadATTFace(id, k); hold on;
          fprintf('\n click on left eye...');
          [eyes(k,1), eyes(k,2)]=ginput(1);
          plot(eyes(k,1), eyes(k,2), '+r');
          fprintf(' click on right eye...');
          [eyes(k,3), eyes(k,4)]=ginput(1);
          plot(eyes(k,3), eyes(k,4),'+m');
          hold off;
       end
       offs = (id-1)*nPose;
       attEyes(offs+1:offs+nPose,1:4) = eyes;
    end
    save 'attEyesAnnotation.dat' attEyes -ascii;
end

% verify the annotation
eyes=load('attEyesAnnotation.dat');
id=34;
colormap('gray');
for k=1:10
  offs = (id-1)*nPose;
  subplot(4,3,k); img=loadATTFace(id, k); imagesc(img); hold on;
  plot(eyes(offs+k,1),eyes(offs+k, 2), '.r');
  plot(eyes(offs+k,3),eyes(offs+k, 4), '.m');
end

% plot all faces
j0=33; n=8;
for j=j0:j0+n-1
  offs = (j-j0)*nPose;
  for k=1:nPose
    subplot(8,10,offs+k); f=loadATTFace(j, k); imshow(f, [0.255]);
    str=sprintf('%s %d:%d', '\fontsize{6}', j, k);
    text(1,1,str);
  end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  faceRecog: ATT faces proj, 3 models
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
path(path, '\work\SVMToolbox');
% project full face
side = 0.5; top= 1.0; low = 1.5; fw=16; fh=20; 
T = load('pcaFeretFaceSide05Top10Low15W16H20LumaMin60Max150.dat');
mf = load('meanFeretFaceSide05Top10Low15W16H20LumaMin60Max150.dat');
prj = projAttFaces(side, top, low, fw, fh, T, mf);
save 'prjAttFacesSide05Top10Low15W16H20LumaMin60Max150.dat' prj -ascii;

% project upper face
side = 0.5; top= 1.0; low = 1.0; fw=20; fh=20;     
T = load('pcaFeretFaceSide05Top10Low10W20H20LumaMin60Max150.dat');
mf = load('meanFeretFaceSide05Top10Low10W20H20LumaMin60Max150.dat');
prj = projAttFaces(side, top, low, fw, fh, T, mf);
save 'prjAttFacesSide05Top10Low10W20H20LumaMin60Max150.dat' prj -ascii;

% project lower face
side = 0.4; top= -0.4; low = 1.4; fw=16; fh=16; 
T = load('pcaFeretFaceSide04Top-04Low14W16H16LumaMin60Max150.dat');
mf = load('meanFeretFaceSide04Top-04Low14W16H16LumaMin60Max150.dat');
prj = projAttFaces(side, top, low, fw, fh, T, mf);
save 'prjAttFacesSide04Top-04Low14W16H16LumaMin60Max150.dat' prj -ascii;

% project hairline model
side = 0.5; top = 1.2; low = 0.0; fw = 20; fh=12;
[T, lat, mf]=computeFeretFacePCA(side, top, low, fw, fh);
T = load('pcaFeretFaceSide05Top12Low00W20H12LumaMin60Max150.dat');
mf = load('meanFeretFaceSide05Top12Low00W20H12LumaMin60Max150.dat');
prj4=projAttFaces(side, top, low, fw, fh, T, mf);
save 'prjAttFacesSide05Top12Low0W20H12LumaMin60Max150.dat' prj4 -ascii;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  faceRecog: identify best models
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
path(path, '\work\SVMToolbox');
% load full, uper, lower face models
prj1 = load('prjAttFacesSide05Top10Low15W16H20LumaMin60Max150.dat');
prj2 = load('prjAttFacesSide05Top10Low10W20H20LumaMin60Max150.dat');
prj3 = load('prjAttFacesSide04Top-04Low14W16H16LumaMin60Max150.dat');
prj4 = load('prjAttFacesSide05Top12Low0W20H12LumaMin60Max150.dat');

ids=[18 24 38]; pos=[3 4 5 6 7 8]; pd = 2;
for k=3:6
  subplot(2,2,1); 
  plotATTFace(prj1, ids(1), k, pd, '+'); 
  plotATTFace(prj1, ids(2), k, pd, 'om');
  plotATTFace(prj1, ids(3), k, pd, 'xr');
  xlabel('full face model');

  subplot(2,2,2); 
  plotATTFace(prj2, ids(1), k, pd, '+'); 
  plotATTFace(prj2, ids(2), k, pd, 'om');
  plotATTFace(prj2, ids(3), k, pd, 'xr');
  xlabel('upper face model');

  subplot(2,2,3); 
  plotATTFace(prj3, ids(1), k, pd, '+'); 
  plotATTFace(prj3, ids(2), k, pd, 'om');
  plotATTFace(prj3, ids(3), k, pd, 'xr');
  xlabel('middle face model');

  subplot(2,2,4); 
  plotATTFace(prj4, ids(1), k, pd, '+'); 
  plotATTFace(prj4, ids(2), k, pd, 'om');
  plotATTFace(prj4, ids(3), k, pd, 'xr');
  xlabel('lower face model');
end

for j=1:3
for k=3:6
  id = ids(j);
  f = loadATTFace(id, k);
  subplot(3,4,(j-1)*4+k-2); colormap('gray'); 
  imagesc(f); hold on;
  str=sprintf('%d:%d', id, k); axis off;
  title(str);
end
end

for k=1:6

  subplot(2,2,1);
  plotATTFace(prj1, ids(1), k, pd, '+r'); plotATTFace(prj1, ids(2), k, pd, '.b');
  plotATTFace(prj1, ids(3), k, pd, 'om'); plotATTFace(prj1, ids(4), k, pd, 'xk');

  subplot(2,2,2);
  plotATTFace(prj2, ids(1), k, pd,'+r'); plotATTFace(prj2, ids(2), k, pd,'.b');
  plotATTFace(prj2, ids(3), k, pd,'om'); plotATTFace(prj2, ids(4), k, pd,'xk');

  subplot(2,2,3);
  plotATTFace(prj3, ids(1), k, pd,'+r'); plotATTFace(prj3, ids(2), k, pd,'.b');
  plotATTFace(prj3, ids(3), k, pd,'om'); plotATTFace(prj3, ids(4), k, pd,'xk');

  subplot(2,2,4);
  plotATTFace(prj4, ids(1), k, pd,'+r'); plotATTFace(prj4, ids(2), k, pd,'.b');
  plotATTFace(prj4, ids(3), k, pd,'om'); plotATTFace(prj4, ids(4), k, pd,'xk');

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% faceRecog: Kerenel Relevance Function Regression
%   positive samples only case  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
axis([0 60 0 60]); hold on;
for k=1:8
   [x y]=ginput(1);
   plot(x,y, '+r');
end 
for k=1:8
   [x y]=ginput(1);
   plot(x,y, 'xb');
end 
for k=1:8
   [x y]=ginput(1);
   plot(x,y, '*m');
end 

for j=1:3
  for k=1:5
     img = loadATTFace(j,k);
     subplot(3,5, (j-1)*5+k); imshow(img, [0 255]);
  end
end
img=loadATTFace(2, 10);
imshow(img, [0 255]);


% test kfda
model = prj1(1:12,:);
ids = [18 24 36]; pos=[1 2 3 4 6 7 8];

[d, N]=size(model);
nPose=10; K=length(ids); nj=length(pos);
x=zeros(d, K*nj); cnt=1;
y=zeros(K*nj, 1);

for j=1:K
  for k=1:nj
    offs = (ids(j)-1)*nPose + pos(k);
    x(:,cnt) = model(:,offs); y(cnt)=j;
    cnt=cnt+1;
  end
end

[A, ev]=fda(K, x, y);



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 5.10 bhavan's report
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% full face
T1  = load('pcaFeretFaceSide05Top10Low15W16H20LumaMin60Max150.dat');
mf1 = load('meanFeretFaceSide05Top10Low15W16H20LumaMin60Max150.dat');

% eyes-mouth 
T2 = load('pcaFeretFaceSide05Top10Low10W20H20LumaMin60Max150.dat');
mf2 = load('meanFeretFaceSide05Top10Low10W20H20LumaMin60Max150.dat');

% lower face
T3 = load('pcaFeretFaceSide04Top-04Low14W16H16LumaMin60Max150.dat');
mf3 = load('meanFeretFaceSide04Top-04Low14W16H16LumaMin60Max150.dat');

% hairline model
T4 = load('pcaFeretFaceSide05Top12Low00W20H12LumaMin60Max150.dat');

h=20; w=16; T=T1; 
h=20; w=20; T=T2; 
h=16; w=16; T=T3; 
h=12; w=20; T=T4;


for dim=1:16
    img=zeros(h, w);
    for j=1:h
      for k=1:w
        offs = (j-1)*w+k;
        img(j,k)=T(dim,offs);
      end 
    end
    subplot(4,4,dim); colormap('gray'); imagesc(img); axis off;
end


T=T4;
for k=1:16
  subplot(4,4,k); plot(T(k,:));
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  multi-view, multi-scale model face detection
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
% build models

f=loadATTFace(12, 5);
size(f);
imshow(f, [0 255]);

nP=10; nF=40; w= 20; h=24;
faces=zeros(400, 481);

for j=1:nF
  for k=1:nP
     f = loadATTFace(j, k);
     icon = imresize(f, [h w], 'bilinear');
     subplot(5, 8, j); colormap('gray'); imagesc(icon);
     faces((j-1)*nP+k, 1:h*w)=im2vec(icon);
     faces((j-1)*nP+k, h*w+1)=j;
  end
end

size(faces)

[PcaEigenVal, LdaEigenVal, LdaMat, SphereMat] = pcalda(faces, 80, 16, 0.00001);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -