当前位置:   article > 正文

基于gabor特征提取和SVM支持向量机的人脸识别matlab仿真_特征识别支持向量机

特征识别支持向量机

目录

一、理论基础

二、核心程序

三、仿真结论


一、理论基础

       支持向量机是一种用于分类和回归的机器学习算法,其在人脸识别中常用于人脸的分类。SVM的目标是找到一个超平面,使得不同类别的样本能够被尽可能大的间隔分开,同时最小化分类错误。Gabor滤波器是一种用于提取图像纹理特征的滤波器,其能够捕捉不同尺度和不同方向的纹理信息。在人脸识别中,Gabor滤波器可以用来提取人脸图像中的纹理特征,以增强人脸图像的边缘和纹理细节。

如上图所示,其步骤为:

  1. 数据准备:收集人脸图像数据集,对每个人脸图像进行标注。

  2. Gabor特征提取:对每张人脸图像使用一组Gabor滤波器进行卷积,得到Gabor响应图像。从每个响应图像中提取特征,形成特征向量。

  3. 数据划分:将数据集划分为训练集和测试集,用于SVM模型的训练和测试。

  4. SVM训练:使用训练集的Gabor特征向量和对应的标签,训练一个SVM分类器。

  5. 人脸识别:对测试集中的人脸图像,提取Gabor特征,然后使用训练好的SVM模型预测其标签。

  6. 评估性能:计算人脸识别的准确率、召回率等指标,评估模型性能。

        这里,关于图片特征的提取,请先看这次我们补充发你的garbor特征提取论文,我们是利用    garbor变换进行特征提取的。以二维形式存在的人脸图像所包含的数据信息是非常多的,而且,这些数据中还包含了很多与人身份并没有多少关系的冗余信息,例如,表情、光线条件等。因此,不能将这些数据直接作为人脸的代表特征来进行识别,也就是必须首先进行特征提取。特征提取的定义为:当原始特征的数量很大,或者说样本是处于一个高维空间中的向量时,通过映射(或变换)的方法用低维空间来表示。如上所述,由于人脸的维数在通常情况下很高,特征提取的成败就对整个识别阶段的效果有决定性的影响。甚至可以这样认为:在某种意义上,人脸识别过程的成败就决定于特征提取的好坏,因此,如何有效的进行特征提取就成为人脸识别科研人员不得不面对的关键性问题。鉴于特征提取的重要性,也有人将它独立作为整个人脸识别过程中的一个阶段。这里,其主要操作时提取特征,并将特征结果向量化,使二维的特征矩阵变为一维的特征向量,从而方便操作。

        首先,这里面的数据gabor特征数据,具体的理论要看这次提供给你的文献(之前没有给你)

其主要的思想是这样的:

首先要了解二维的gabor函数:

这里的feature就是根据gabor函数得到的特征参数组。这个参数是用来在提取特征的时候,参与运算的。

       SVM是20世纪90年代由Vapnik等人提出的,来源于统计学习理论的一种新的数据分类技术。其主要思想就是通过一个非线性变换将原始的数据变换到一个高维的特征空间,并在新的空间实现最优分类。

        上述的最优分类函数其最终的分类判别函数以及它的求解过程只涉及样本之间的内积运算。可见,要解决一个特征空间中的最优线性分类问题,只需知道这个空间的内积运算即可。 

二、核心程序

  1. function images_facefind = func_facefind(net,images,Nums2);
  2. %注意,这个参数和训练库的头像图片的大小相关
  3. len_pixel = round(19/2)-1;
  4. %计算图片的大小
  5. [rr,cc]=size(images);
  6. %判决门限
  7. levels = Nums2;
  8. %人脸模板
  9. tmp_face1 = 'Library_picture\TRAIN\temp\1.png';
  10. tmp_face2 = 'Library_picture\TRAIN\temp\2.png';
  11. %计算每个图片的最大值
  12. Image1 = double(images);
  13. maxs = max(max(Image1));
  14. mins = min(min(Image1));
  15. C1 = ((Image1-mins)/(maxs-mins) - 0.5) * 2;
  16. Image2 = double(imread(tmp_face1));
  17. maxs = max(max(Image2));
  18. mins = min(min(Image2));
  19. C2 = ((Image2-mins)/(maxs-mins) - 0.5) * 2;
  20. Image3 = double(imread(tmp_face2));
  21. maxs = max(max(Image3));
  22. mins = min(min(Image3));
  23. C3 = ((Image3-mins)/(maxs-mins) - 0.5) * 2;
  24. %识别参数初始化
  25. Cell.state = int8(imregionalmax(double(conv2(C1,C2,'same')))|imregionalmax(double(conv2(C1,C3,'same'))));
  26. Cell.state(1:len_pixel,:) = -1;
  27. Cell.state(end-len_pixel:end,:) = -1;
  28. Cell.state(:,1:len_pixel) = -1;
  29. Cell.state(:,end-len_pixel:end) = -1;
  30. Cell.net = -1*ones(rr,cc);
  31. %进行无限循环,搜索和神经网络匹配的区域
  32. while(1==1)
  33. [i,j]=find(Cell.state==1,1);
  34. %搜索完毕,则退出循环
  35. if isempty(i)break;end
  36. %搜索人脸区域
  37. face_areas = images(i-len_pixel:i+len_pixel,j-len_pixel:j+len_pixel);
  38. Cell.state(i,j) = -1;
  39. %通过神经网络进行测试预测
  40. Cell.net(i,j) = sim(net,func_image_feature(face_areas));
  41. if Cell.net(i,j) < -0.95
  42. for i2=i-3:i+3
  43. for j2=j-3:j+3
  44. try Cell.state(i2,j2)=-1;end
  45. end
  46. end
  47. continue;
  48. elseif Cell.net(i,j) < -1*levels continue;
  49. elseif Cell.net(i,j) > 0.95
  50. for i2=i-len_pixel:i+len_pixel
  51. for j2=j-len_pixel:j+len_pixel
  52. try Cell.state(i2,j2)=-1;end
  53. end
  54. end
  55. elseif Cell.net(i,j) > levels
  56. elseif Cell.net(i,j) < levels
  57. end
  58. %======================================================================
  59. for i4=-1:1
  60. for j4=-1:1
  61. i3=i+i4;
  62. j3=j+j4;
  63. if (Cell.state(i3,j3) == -1 || Cell.net(i3,j3)~=-1)continue;end
  64. face_areas = images(i3-len_pixel:i3+len_pixel,j3-len_pixel:j3+len_pixel);
  65. Cell.net(i3,j3) = sim(net,func_image_feature(face_areas));
  66. if Cell.net(i3,j3) > 0.95
  67. for i2=i3-len_pixel:i3+len_pixel
  68. for j2=j3-len_pixel:j3+len_pixel
  69. try
  70. Cell.state(i2,j2)=-1;
  71. end
  72. end
  73. end
  74. continue;
  75. end
  76. if Cell.net(i3,j3) > levels
  77. Cell.state(i3,j3) = 1;
  78. else
  79. Cell.state(i3,j3) = -1;
  80. end
  81. end
  82. end
  83. %======================================================================
  84. end
  85. [MM,aresxy_number] = bwlabeln(imdilate(imregionalmax(Cell.net > levels),strel('disk',2,4)),4);
  86. CentroidMatrix = regionprops(MM,'centroid');
  87. aresxy = zeros(rr,cc);
  88. for i = 1:aresxy_number
  89. aresxy(fix(CentroidMatrix(i).Centroid(2)),fix(CentroidMatrix(i).Centroid(1))) = 1;
  90. end
  91. aresxy = func_recs(aresxy,[19 19],len_pixel);
  92. images_facefind(:,:,1) = images;
  93. images_facefind(:,:,2) = images;
  94. images_facefind(:,:,3) = images;
  95. for i = 1:rr
  96. for j=1:cc
  97. if aresxy(i,j)==1
  98. images_facefind(i,j,1)=255;
  99. images_facefind(i,j,2)=255;
  100. images_facefind(i,j,3)=0;
  101. end
  102. end
  103. end
  104. A10-16

三、仿真结论

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
  

闽ICP备14008679号