首先把人脸库中的图片进行标准化,根据两个眼睛来切割出人脸区域,形如下图所示:
matlab程序如下
%函数介绍: 人脸的大小归一化 手工点击自动切割图片为规定大小
function Unitery(Height,Width,M) %Wdith为切割后图像的宽度。Height为切割后图像的长度。M为图像的个数。
clear;close all;
Height=490;%set Image size
Width=640;
M=12;%set numbers of Image
%set path of Image
mydir = 'H:\CMU表情库\cohn-kanade\cohn-kanade\cohn-kanade\S010\001\';
%set suffix
DIRS = dir([mydir,'*.png']);
for i=1:M
str=[mydir,DIRS(i).name];
eval('OriImg=imread(str);'); %执行字符串每次循环读入img %读入图像
figure,imshow(OriImg),[x,y]=ginput(2); %手工获取人眼E1,E2坐标
d=x(2,1)-x(1,1); %计算两眼之间的宽度d
Ox=sum(x)/2;
Oy=sum(y)/2; %求E1,E2的中心O(Ox,Oy)
I1=imcrop(OriImg,[Ox-0.9*d Oy-0.5*d 1.8*d 2*d]); %切割人脸
str=strcat('H:\CMU表情库\cohn-kanade\cohn-kanade\cohn-kanade\S010\001\Standard\',int2str(i),'.bmp');
eval('imwrite(I1,str);'); %执行字符串 每次循环读入img %读入图像 %保存归一化后的人脸图像
close all;
end
标准化之后的任务就是上下分块,平均分割开。
形如:
matlab程序如下:
function ShangXiaFenKuai
mydir = 'C:\Users\user\Desktop\Database\CMU\test_test\';
DIRS = dir([mydir,'*bmp']);
for i=1:18
if ~DIRS(i).isdir
filename = [mydir,DIRS(i).name];
disp(filename)
I = imread(filename);
ImageUp = I(1:50,:);
ImageDown = I(51:100,:);
savefileUp = [mydir,'Up\',DIRS(i).name];
imwrite(ImageUp,savefileUp);
savefileDown = [mydir,'Down\',DIRS(i).name];
imwrite(ImageDown,savefileDown);
end
i = i