SDM For Face Alignment流程介绍及Matlab代码实现之测试篇

来源:互联网 发布:mac风扇一直转 编辑:程序博客网 时间:2024/05/27 12:21

测试很简单了,只需要载入数据,然后做正则化处理,使用训练模型产生的{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-truth boxes = detect_face( img , options );%% predict the face box bbox2 = get_correct_region2( boxes, shape,img, 1 );bbox= [];if isempty(bbox)    %% if using ground-truth    bbox = 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 positionrIdx = 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 indexs    idx    = rIdx(ir);    init_shape = Data(idx).shape; %% get randomly shape from others    cbbox  = 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 detector    if 0        figure(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 regression    aligned_shape(ir,:) = cascaded_regress( ShapeModel, ...        LearnedCascadedModel, img, init_shape, options );endif n_init_randoms_test == 1    shape = vec_2_shape(aligned_shape');else    shape = vec_2_shape(mean(aligned_shape)');endend

我们来看一下效果:


0 0
原创粉丝点击