MATLAB抽取widerface数据集人脸

写在前面:

这篇博文主要是由于验证人脸检测的需要,考虑到widerface数据集的多样性,差异性,因此,需要将该数据集中的人脸都扣取出来。

widerface数据集链接http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/

widerface的官网给出了其数据集的mat格式的标签,因此一个读取其标签,将人脸扣取出的程序就迫在眉睫。本文的这个程序是一个很普通的程序,但是这个程序经过了验证,处理结果的正确性完全有保证。你可以花1个小时写一个这样的程序,但是你需要花3个小时进行验证和测试。这也就是本程序的意义所在。

 

本程序实现的功能:

1,读取所有图像,并将人脸图像保存到当前目录的filesave目录下

2,将新生成的图像保存到imagelist.txt中

3,将原始图像保存到train.txt中

4,对原始mat中的不在图像里面的人脸,进行了四舍五入和相应的处理

5,原始mat的人脸是亚像素的,进行了像素级别的处理

其中imagelist.txt和train.txt的格式如下注释所示。

 

% train.txt数据格式event_list\file_list\numx y w h

% 例如.\0--Parade\0_Parade_marchingband_1_849.jpg1 449 330 121 148

% imagelist.txt数据格式event_list_file_list_num.jpg

% 例如0--Parade_0_Parade_marchingband_1_849_1.jpg

程序:

clc;clear;
load('wider_face_train.mat');
filesave='.\filesave\';
train = fopen('train.txt','w');
imagelist = fopen('imagelist.txt','w');  %以只读方式打开文件'imagelist.txt'
for i=1:size(event_list,1)%便利所有的event_list
   for j=1:size(file_list{i},1)%遍历所有图片
       num=1;
       imlist=strcat(strcat('.\',strcat(event_list{i},'\')),strcat(file_list{i}{j},'.jpg'));
       imlistsave=strcat(strcat(event_list{i},'_'),strcat(file_list{i}{j},'_'));
       image=imread(imlist);
       fprintf(train, '%s', imlist); fprintf(train, ' %g', size(face_bbx_list{i,1}{j},1));  %写入train
         for k=1:size(face_bbx_list{i,1}{j},1)%遍历所有框
             y=max(1,round(face_bbx_list{i,1}{j}(k,2)));
             y1=min(size(image,1),round((y+face_bbx_list{i,1}{j}(k,4))));
             x=max(1,round(face_bbx_list{i,1}{j}(k,1)));
             x1=min(size(image,2),round((x+face_bbx_list{i,1}{j}(k,3))));
             if(x1<=0||y1<=0||x>size(image,2)||y>size(image,1))%去掉不满足的
                 continue;
             end
             imagetmp=image(y:y1,x:x1,:);
             imwrite(imagetmp,strcat(filesave,strcat(strcat(imlistsave,num2str(num)),'.jpg')));
             fprintf(imagelist, '%s', strcat(strcat(imlistsave,num2str(num)),'.jpg')); fprintf(imagelist, '\n');  %写入imagelist
             
             fprintf(train, ' %g %g %g %g', x,y,x1-x,y1-y);%写入train
             if (k==size(face_bbx_list{i,1}{j},1)) 
                 fprintf(train, '\n');
             end
             num=num+1;
             
         end
       
   end
end

实验结果:

MATLAB抽取widerface数据集人脸_第1张图片

MATLAB抽取widerface数据集人脸_第2张图片

MATLAB抽取widerface数据集人脸_第3张图片

你可能感兴趣的:(图像数据库)