【SVM+Gabor人脸识别】基于SVM+Gabor特征提取的人脸识别matlab仿真
1.软件版本
MATLAB2013b
2.本算法理论知识
人脸识别是人脸识别与匹配领域的一项重要技术。为了获得理想的识别效果,必须在具有良好的类内聚力和类间差异的特征。现有的方法包括一种基于不同颜色模型和颜色空间中人脸肤色模型的人脸识别方法。一种基于颜色直方图模型的人脸识别方法,该方法是由皮肤区域校准图像的大量颜色建立的。提出了一种基于人脸光照补偿和非线性颜色变换的人脸识别方法。
Gabor特征提取
Gabor核函数具有与人脑皮层细胞相同的二维反射区域特征,Gabor核函数能够捕捉到相应的空间频率、空间尺度和方向选择性,在计算机视觉和图像分析领域有着广泛的应用[04,05]。Gabor滤波器常用于描述和表示纹理,尤其是在人脸图像识别中,它能很好地反映人脸信息。这主要是由于Gabor滤波器的频率和方向接近人类视觉系统。图1显示了脊椎动物视觉皮层中感受野反应和Gabor滤波器的比较,第一排图是脊椎动物感受野的视觉皮层,第二排图是Gabor滤波器,第三排图是残差。在图1中,我们可以看到Gabor滤波器更适合人类视觉,它适合应用于图像处理领域。
SVM支持向量机是Vapnik等人提出的一种新的机器学习方法。SVM的基本思想是在线性情况下,从两种样本中找到最佳分类原始空间平面。在线性不可分情况下,加入松弛变量分析,将数据从低维空间映射到高维空间,使非线性情况变成线性情况,找到最优分类原始空间平面。支持向量机利用结构风险最小化原理在属性空间中构造最优分类超平面,使支持向量机分类器得到全局最优结果。SVM是从线性可分情况的最优分类曲面发展而来的,其基本思想如图所示:
3.部分核心代码
function FaceCell = func_FaceCell_Update(images,net,FaceCell,FaceRange,levels);
while(1==1)
[i,j] = find(FaceCell.state==1,1);
if isempty(i)
break;
end
%人脸区域
face_areas = images(i-FaceRange:i+FaceRange,j-FaceRange:j+FaceRange);
FaceCell.state(i,j) =-1;
%预测
FaceCell.net(i,j) = sim(net,func_image_feature(face_areas));
if FaceCell.net(i,j) < -0.95
for i2=i-3:i+3
for j2=j-3:j+3
try
FaceCell.state(i2,j2)=-1;
end
end
end
continue;
elseif FaceCell.net(i,j) < -1*levels continue;
elseif FaceCell.net(i,j) > 0.95
for i2=i-FaceRange:i+FaceRange
for j2=j-FaceRange:j+FaceRange
try
FaceCell.state(i2,j2)=-1;
end
end
end
elseif FaceCell.net(i,j) > levels
elseif FaceCell.net(i,j) < levels
end
for i4=-1:1
for j4=-1:1
i3 = i+i4;
j3 = j+j4;
if (FaceCell.state(i3,j3) == -1 || FaceCell.net(i3,j3)~=-1)
continue;
end
face_areas = images(i3-FaceRange:i3+FaceRange,j3-FaceRange:j3+FaceRange);
FaceCell.net(i3,j3) = sim(net,func_image_feature(face_areas));
if FaceCell.net(i3,j3) > 0.95
for i2=i3-FaceRange:i3+FaceRange
for j2=j3-FaceRange:j3+FaceRange
try
FaceCell.state(i2,j2)=-1;
end
end
end
continue;
end
if FaceCell.net(i3,j3) > levels
FaceCell.state(i3,j3) = 1;
else
FaceCell.state(i3,j3) =-1;
end
end
end
end
function FacePic = func_face_results(images,FaceCell,FaceRange,levels,rr,cc);
[Face_reigon,fnum] = bwlabeln(imdilate(imregionalmax(FaceCell.net > levels),strel('disk',2,4)),4);
Face_Matrix = regionprops(Face_reigon,'centroid');
Face_Area = zeros(rr,cc);
for i = 1:fnum
xpos = fix(Face_Matrix(i).Centroid(2));
ypos = fix(Face_Matrix(i).Centroid(1));
Face_Area(xpos,ypos) = 1;
end
Face_Area = func_recs(Face_Area,[19 19],FaceRange);
FacePic(:,:,1) = images;
FacePic(:,:,2) = images;
FacePic(:,:,3) = images;
for i = 1:rr
for j=1:cc
if Face_Area(i,j) == 1
FacePic(i,j,1) = 255;
FacePic(i,j,2) = 255;
FacePic(i,j,3) = 0;
end
end
end
4.操作步骤与仿真结论
5.参考文献
[01]Terrillon J C, Shirazi M N, Fukamachi H, et al. Comparative performance of different skin chrominance models and chrominance spaces for the automatic detection of human faces in color images[C]//Proceedings. Fourth IEEE International Conference on Automatic Face and Gesture Recognition, 2000: 54-61.
[02]Jones M J, Rehg J M. Statistical color models with application to skin detection[J]. International Journal of Computer Vision, 2002, 46(1): 81-96.A10-40