📄 runfacerecog.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 + -