📄 llefacedetection.m
字号:
function [pos]=lleFaceDetection(img, fW, fH, detW, detH, T, mf, lat, fm, nfm)
dbg='y';
if dbg=='y'
img = imread('data\fd2.jpg');
imshow(img, [0 255]);
modW = 20; modH=25; detW = 28; detH = 35;
T = load('T-fd1.dat');
mf = load('Mf-fd1.dat');
lat = load('lat-fd1.dat');
fm = load('faceIconsW20H25.dat'); % n x d
nfm = load('nfW20H25.dat')'; % m x d
end
% const
K = 24; % total num of dim used
R = 800; % local neibourhood radius
minNullEnergyRatio = 0.2;
method = 'linear'
% var
fm=double(fm); nfm=double(nfm);
[n, d]=size(fm);
[m, d]=size(nfm);
[imgHt, imgWd]=size(img);
% face detection: scale image
scale = modH/detH; % horiz and vert must agree in scale
dImgH = fix(imgHt*scale); dImgW = fix(imgWd*scale);
detImg = imresize(img, [dImgH, dImgW], 'bilinear');
detImg = double(detImg);
lbl = zeros(dImgH, dImgW);
% run null/face space energy ratio test
pf=zeros(K, n); npf=zeros(K,m);
for k=1:n
pf(:,k) =T(1:K,:)*(fm(k,:)-mf)';
epf(k) = pf(:,k)'*pf(:,k);
end
for k=1:m
pnf(:,k) =T(1:K,:)*(nfm(k,:)-mf)';
epnf(k)= pnf(:,k)'*npf(:,k);
end
% detection
for y=1:dImgH-modH
fprintf('\n');
for x=1:dImgW-modW
% get icon at (x,y)
x=120; y=80;
icon = detImg(y:y+modH-1,x:x+modW-1);
vec = im2vec(icon); % a row vec
% projection
% check null space energy
e1 = vec(1:K)*vec(1:K)';
e2 = vec(K+1:d)*vec(K+1:d)';
if e1/e2 < minNullEnergyRatio
lbl(y,x)=-1; fprintf('^');
continue; % skip this one
end
% build a local model
[X1, Y1, err1, d1, d2]=buildLocalModel(vec, R, fm, nfm, 'quadratic');
if err1 < 0 % if quadratic model singular
[X1, Y1, err1, d1, d2]=buildLocalModel(vec, R, fm, nfm, 'linear');
if err1 < 0
fprintf('?'); % bad local model, need more data
lbl(y, x)=-1;
else
c=mixedClassify(vec, X1, Y1, 'linear');
lbl(y, x) = c;
if c== 1
fprintf('+');
else
fprintf('-');
end
end
else % quadratic model okay
c=mixedClassify(vec, X1, Y1, 'quadratic');
lbl(y,x) = c;
if c== 1
fprintf('+');
else
fprintf('-');
end
end % quadratic model okay
end % for x
end % for y
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -