测试很简单了,只需要载入数据,然后做正则化处理,使用训练模型产生的{Rk},就可以预测特征点了。
face_alignment.m:用来预测特征点
function shape = face_alignment( ShapeModel, DataVariation,...LearnedCascadedModel, Data, img, shape, options )%% setup the fixed parameters %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
nData = length(Data);
shapeDim = size(ShapeModel.MeanShape,1);
n_init_randoms_test = options.n_init_randoms_test;MeanShape2 = vec_2_shape(ShapeModel.MeanShape);aligned_shape = zeros(n_init_randoms_test,shapeDim);%% detect the face region using face detectors or ground-truth %%%%%%%%%%%%
%% if using ground-truthboxes = detect_face( img , options );
%% predict the face boxbbox2 = get_correct_region2( boxes, shape,img, 1 );
bbox= [];if isempty(bbox)%% if using ground-truthbbox = getbbox(shape);
end%% randomize n positions for initial shapes
[rbbox] = random_init_position( ...bbox, DataVariation, n_init_randoms_test );
[rbbox2] = random_init_position( ...bbox2, DataVariation, n_init_randoms_test );
%% randomize which shape is used for initial position
rIdx = randi([1,nData],n_init_randoms_test);%% iterations of n initial points %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for ir = 1 : n_init_randoms_test%% get random positions and inital shape indexsidx = rIdx(ir);init_shape = Data(idx).shape; %% get randomly shape from otherscbbox = rbbox(ir,:);cbbox2 = rbbox2(ir,:);%init_shape = resetshape(cbbox, init_shape);init_shape = resetshape(cbbox, MeanShape2);init_shape2 = resetshape(cbbox2, MeanShape2);%test box between ground-truth and face detectorif 0figure(1); imshow(img); hold on;draw_shape(init_shape(:,1), init_shape(:,2),'r');draw_shape(init_shape2(:,1), init_shape2(:,2),'g');hold on;rectangle('Position', cbbox, 'EdgeColor', 'y');rectangle('Position', cbbox2, 'EdgeColor', 'k');hold off;pause;end%% detect landmarks using cascaded regressionaligned_shape(ir,:) = cascaded_regress( ShapeModel, ...LearnedCascadedModel, img, init_shape, options );end
if n_init_randoms_test == 1shape = vec_2_shape(aligned_shape');
elseshape = vec_2_shape(mean(aligned_shape)');
endend
我们来看一下效果: