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

📄 runkfda.m

📁 It is for Face Recognition
💻 M
📖 第 1 页 / 共 3 页
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Multiple Face Models
% total bad projection: 21. 
%  1: 2     4     5     6     9    
%  5: 45    47    
% 10: 93    96    99   
% 17: 167  
% 18: 170   
% 19: 183   
% 22: 216   
% 25: 245   
% 26: 255   
% 32: 314   
% 34: 332   
% 35: 341   342   
% 39: 386
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% upper face model: 18x16, eyes-nose
side = 0.4; top= 0.8; low = 0.8; fw=18; fh=16; 
[T1, lat1, mf1]=computeFeretFacePCA(side, top, low, fw, fh);
showFaceModel(T1, mf1, fw, fh);
save 'pcaUpperFaceS04T08L08W18H16.dat' T1 -ascii;
save 'mfUpperFaceS04T08L08W18H16.dat' mf1 -ascii;
save 'latUpperFaceS04T08L08W18H16.dat' lat1 -ascii;
% projection: ATT face lib:
K1 = 16
prj1 = projAttFaces(side, top, low, fw, fh, T1(1:K1,:), mf1);
save 'prjATTUpperFaceS04T08L08W18H16K16.dat' prj1 -ascii;

% lower face model: 
side = 0.1; top= -0.6; low = 1.4; fw=18; fh=12; 
[T2, lat2, mf2]=computeFeretFacePCA(side, top, low, fw, fh);
showFaceModel(T2, mf2, fw, fh);
save 'pcaLowerFaceS01T-06L14W18H12.dat' T2 -ascii;
save 'mfLowerFaceS01T-06L14W18H12.dat' mf2 -ascii;
save 'latLowerFaceS01T-06L14W18H12.dat' lat2 -ascii;
% projection: ATT face lib:
K2 = 12
prj2 = projAttFaces(side, top, low, fw, fh, T2(1:K2,:), mf2);
save 'prjATTLowerFaceS01T-06L14W18H12K12.dat' prj2 -ascii;


% full face model 1: for FD
side = 0.5; top= 1.0; low = 1.5; fw=20; fh=25; 
[T3, lat3, mf3]=computeFeretFacePCA(side, top, low, fw, fh);
showFaceModel(T3, mf3, fw, fh);
save 'pcaFullFaceS05T10L15W20H25.dat' T3 -ascii;
save 'mfFullFaceS05T10L15W20H25.dat' mf3 -ascii;
save 'latFullFaceS05T10L15W20H25.dat' lat3 -ascii;
% projection: ATT face lib:
K3 = 20;
prj3 = projAttFaces(side, top, low, fw, fh, T3(1:K3,:), mf3);
save 'prjATTFullFaceS05T10L15W20H25K20.dat' prj3 -ascii;

% full face model 2: for FR
side = 0.4; top= 1.0; low = 1.4; fw=21; fh=28; 
[T4, lat4, mf4]=computeFeretFacePCA(side, top, low, fw, fh);
showFaceModel(T4, mf4, fw, fh);

save 'pcaFullFaceModel4.dat' T4 -ascii;
save 'mfFullFaceSModel4.dat' mf4 -ascii;
save 'latFullFaceModel4.dat' lat4 -ascii;
% projection: ATT face lib:
K4 = 20;
prj4 = projAttFaces(side, top, low, fw, fh, T4(1:K4,:), mf4);
save 'prjATTFullFaceModel4.dat' prj4 -ascii;


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Local FDA, multiple model. 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
% load uper, lower, and full face models
prj1 = load('prjATTUpperFaceS04T08L08W18H16K16.dat');
prj2 = load('prjATTLowerFaceS01T-06L14W18H12K12.dat');
prj4 = load('prjATTFullFaceModel4.dat');
nFace = 40; nPose = 10;


% before FDA
ids=[18 20 24 38]; pos=[3 4 5 6 8 9]; pd = 3;
for j=1:length(pos)
  k = pos(j);
  subplot(2,2,1); 
  plotATTFace(prj1, ids(1), k, pd, '+'); 
  plotATTFace(prj1, ids(2), k, pd, 'om');
  plotATTFace(prj1, ids(3), k, pd, 'xr');
  plotATTFace(prj1, ids(4), k, pd, '.k');
  xlabel('upper 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');
  plotATTFace(prj2, ids(4), k, pd, '.k');
  xlabel('lower face model');

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


% FDA on full face model: prj4
ids=[18 24 36]; pos=[1 2 3 4 5 6 8 9]; pd = 3;
dim = 8; nFace=40; nPose=10; 
nId=length(ids); nPos=length(pos);
model = zeros(dim+1, nId*nPos);
t=0;
for j=1:nId
  p=ids(j);
  for k=1:nPos
     t=t+1; 
     offs = (p-1)*nPose+pos(k);    
     model(1:dim,t) = prj4(1:dim,offs);
     model(dim+1,t) = p;
  end
end

% FDA
x = model(1:dim,:); y=model(dim+1,:);
[A,ev, Sb, Sw, lbl, nj]=fda2(x, y);


id = 18; pos = 7; 
offs = (id-1)*nPose + pos;
x0 = model(1:dim,offs);

K  = 60; R=-1; 
[x, y]=kNN(model, x0, K, R);



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Locally Adaptive SVM for Face Detection
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;

% collect training data: 
% X-nxd, data, Y-nx1, label
axis([0 40 0 40]); hold on; 
n1=20;n2=20;
X = zeros(n1+n2, 2); Y=zeros(n1+n2,1);
fprintf('\n input samples for class +1: ');
for j=1:n1
       [X(j,1) X(j,2)] = ginput(1);
       plot(X(j,1), X(j,2), '+r');
       Y(j) = 1;fprintf('+');
end
fprintf('\n input samples for class -1: ');
for j=n1+1:n1+n2
       [X(j,1) X(j,2)] = ginput(1);
       plot(X(j,1), X(j,2), '.b');
       Y(j) = -1; fprintf('.');
end    

% collect samples to be classified
n3=5;
sX = zeros(n3, 2); sY=zeros(n3,1);
fprintf('\n input samples for classification: ');
for j=1:n3
       [sX(j,1) sX(j,2)] = ginput(1);
       plot(sX(j,1), sX(j,2), 'om');
       sY(j) = 1; % assume all class +1
       fprintf('o');
end

% classify

c = classify(sX, X, Y, 'quadratic');
[fnf,erate] = classify(sX, X, Y, 'quadratic', [0.8, 0.2]);


% load face/nonface data
% all nxd format
clear;
t1f = load('t1Faces.dat')';
t2f = load('t2Faces.dat')';
t3f = load('t3Faces.dat')';

% size of training data
[nFace, d1]=size(t1f);
[nFace, d2]=size(t2f);
[nFace, d3]=size(t3f);

t1nf = load('nT1Faces.dat')';
t2nf = load('nT2Faces.dat')';
t3nf = load('nT3Faces.dat')';

% size of training data
[nNonFace, d1]=size(t1nf);

% classify x:
x=t1f(120,:); 

X = zeros((nFace+nNonFace), d1); 
Y = zeros((nFace+nNonFace), 1);

X(1:nFace,:)                = t1f;
X(nFace+1:nFace+nNonFace,:) = t1nf;
Y(1:nFace) = 1;
Y(nFace+1:nFace+nNonFace) = -1;

[c, err]=  classify(x, X, Y, 'quadratic');

[X1, Y1, err1]=buildModel(t1f, t1nf, 'quadratic');
[X2, Y2, err2]=buildModel(t2f, t2nf, 'quadratic');
[X3, Y3, err3]=buildModel(t3f, t3nf, 'quadratic');

x= t1f(120,:); 
R= norm(t1f(120,:)' - t1f(800,:)', 2);
[X1, Y1, err1, m1, m2]=buildLocalModel(x, R, t1f, t1nf, 'quadratic');


% test local model
offs=400; n=20; R=400; 
for k=1:n
    x=t1nf(offs+k,:);
    [X1, Y1, err1, m1, m2]=buildLocalModel(x, R, t1f, t1nf, 'quadratic');
    err(k)=err1;
    bias(:,k) = [m1, m2]';    
    if err1 == -1       % singular
        c(k) = -1;       % unknown
    else
        c(k)=classify(x, X1, Y1, 'quadratic');
    end
end
c
err
bias


% stats on average distance
for k=1:nFace
  
end


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Test local model with multiple modes of classification
% z. li
% 06.05.2004
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;
% load models: 16x12
fm1 = load('t1Faces.dat')';
fm2 = load('t2Faces.dat')';
fm3 = load('t3Faces.dat')';

nfm1 = load('nT1Faces.dat')';
nfm2 = load('nT2Faces.dat')';
nfm3 = load('nT3Faces.dat')';

% PCA models
T1 = load('pcaFaceW12H16.dat');
T2 = load('pcaUpperFaceW12H16.dat');
T3 = load('pcaLowerFaceW12H16.dat');
mT1 = [-1272.06 -15.11 -39.26 14.88 -5.77 -0.10 -27.21 -14.04 46.88 5.41 34.97 -19.03 ]';
mT2 = [-914.5640   45.0144  -20.0134   52.3669   11.8582    4.5829   -1.4717  -15.0933]';
mT3 = [-880.6135  -36.5670   -6.7102   40.6621  -26.8938   19.7570  -25.5042   -0.2695]';

modHt = 16; modWd = 12;

% load image
%img = imread('bush.jpg');
img = imread('faceTest2.jpg');
img = imread('data\fd2.jpg');
img = imread('data\fd3-cuneyt.jpg');
imshow(img, 256);


[imgHt, imgWd]=size(img);

% face detection
detHt = 52; detWd=39; 
scale = modHt/detHt;    % horiz and vert must agree in scale
plotExec = 'y';

imgHt = fix(imgHt*scale);
imgWd = fix(imgWd*scale);

detImg = imresize(img, [imgHt, imgWd], 'bilinear');
detImg = double(detImg);

% detection
R = 600; maxFaceNorm=1310;
C = zeros(imgHt, imgWd);
cntBadModel=0; cntNN=0; cntKernel=0; cntThres=0;

for y=1:imgHt-modHt
fprintf('\n');
for x=1:imgWd-modWd
  %x=73; y=4;
  icon = detImg(y:y+modHt-1,x:x+modWd-1);
  vec = im2vec(icon);   % a row vec
  % project to model 1

⌨️ 快捷键说明

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