📄 runkfda.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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 + -