clandmark
clandmark copied to clipboard
About LFW annotation
Hi, while looking through LFW annotation from flandmark github page, it contains 7 landmarks. However, provided flandmark_model.xml model contains 8 landmarks. What kind of model is used in LFW_annotation.txt?
Hi @xvbw,
the 8th landmark used in the model is artificial (computed from the 7 landmarks) and represents the center of the face. It serves as the root node of the underlying tree graph. If I remember correctly, the MATLAB script computing the 8th landmark is somewhere in the flandmark. If you need it, I can also paste the code here.
Yes, paste the code here please. That could be really helpful.
Thanks.
+plus, Is LFW annotation corrected by hand after flandmark algorithm performs its landmark detection or is it just an output of the flandmark algorithm? I just wonder how much it's accurate
Hi @xvbw,
the LFW annotation is manual and actually it was used to train the flandmark model.
The MATLAB code to compute the center of the face is here:
function [ s0 ] = prepareS0gt( points )
eyer = points(:, 1);
eyel = points(:, 2);
m1 = points(:, 7);
% centeroid of eyes
c1 = (eyer + eyel)/2;
% line between eyel and eyer
e = crossprod([eyer; 1], [eyel; 1]);
% shift centeroid of eyes (c1) along line perpendicular to e
c2 = c1 + e(1:2);
% create line perpendicular to e trough c1 (and c2 also)
p = crossprod([c1; 1], [c2; 1]);
% shift mouth along normal vector of p
m2 = m1 + p(1:2);
% create line m passing trough m1 and m2
m = crossprod([m1; 1], [m2; 1]);
% compute intersection of lines m and p and normalize
m3 = crossprod(m, p); m3 = m3./m3(3);
% S0 is centeroid of c1 and m3
s0 = round( (c1 + m3(1:2))/2 );
end;
where crossprod
function is defined like this:
function [ res ] = crossprod( a, b )
Ax = [ 0, -a(3), a(2);
a(3), 0, -a(1);
-a(2), a(1), 0;];
res = Ax * b(:);
end;