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

📄 llefacedetection.m

📁 It is for Face Recognition
💻 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 + -