matlab实现人脸识别
来源:互联网 发布:小学生必读书目 知乎 编辑:程序博客网 时间:2024/06/09 19:03
前面在python学习中实现了人脸检测,下面我将在matlab中实现人脸识别。
人脸识别技术中被广泛采用的区域特征分析算法,它融合了计算机图像处理技术与生物统计学原理于一体,利用计算机图像处理技术从视频中提取人像特征点,利用生物统计学的原理进行分析建立数学模型,即人脸特征模板。利用已建成的人脸特征模板与被测者的人的面像进行特征分析,根据分析的结果来给出一个相似值。通过这个值即可确定是否为同一人。 基本算法:
1.基于人脸特征点的识别算法(Feature-based recognition algorithms);
2.基于整幅人脸图像的识别算法(Appearance-based recognition algorithms);
3.基于模板的识别算法(Template-based recognition algorithms);
4.利用神经网络进行识别的算法(Recognition algorithms using neural network);
5.利用线性回归进行识别的算法;
6.利用稀疏表示进行识别的算法;
人脸识别主要包括四个方面:人脸采集----图像预处理-------人脸特征提取--------匹配与识别。
对于任何人脸识别方法来说,最难的都是第四步。这里主要用最小距离法,寻找和待识别图片最为接近的训练图片。思路是:思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。
下面是操作过程:
一:在线获取100张128*128的灰度人脸图像。
vid = videoinput('winvideo',1);
for i=1:100
pause(0.5);
frame = getsnapshot(vid);
img=rgb2gray(ycbcr2rgb(frame));
img=imresize(img,[128,128]);
path=strcat(strcat('.\train\',num2str(i)),'.bmp');
imwrite(img,path);
end
stop(vid);
delete(vid);
close all
二,训练(一)中得到的人脸图像
global cankao
global W
global img_pj
global wts
global path
global img_path
% 批量读取指定文件夹下的图片128*128
path = uigetdir;
img_path = dir(strcat(path,'\*.bmp'));
img_num = length(img_path);
imagedata = [];
if img_num >0
for j = 1:img_num
img_name = img_path(j).name;
temp = imread(strcat(path, '/', img_name));
temp = double(temp(:));
imagedata = [imagedata, temp];
end
end
wts = size(imagedata,2);
% 中心化 & 计算协方差矩阵
img_pj = mean(imagedata,2);
for i = 1:wts
imagedata(:,i) = imagedata(:,i) - img_pj;
end
covMat = imagedata'*imagedata;
[COEFF, latent, explained] = pcacov(covMat);
% 选择构成95%能量的特征值
i = 1;
proportion = 0;
while(proportion < 95)
proportion = proportion + explained(i);
i = i+1;
end
p = i - 1;
% 特征脸
W = imagedata*COEFF; % N*M阶
W = W(:,1:p); % N*p阶
% 训练样本在新座标基下的表达矩阵 p*M
cankao = W'*imagedata;
msgbox(['训练完成'])
三,读取图像并识别
global im
global cankao
global W
global imgpj
global wts
global path
global img_path
im = double(im(:));
objectone = W'*(im - imgpj);
distance = 100000000;
for k = 1:wts
temp = norm(objectone - cankao(:,k));
if(distance>temp)
aimone = k;
distance = temp;
aimpath = strcat(path, '/', img_path(aimone).name);
axes( handles.axes2 )
imshow(aimpath)
end
end
训练图像如下:
识别结果:
- matlab实现人脸识别
- matlab实现人脸识别
- 人脸识别LBP的MATLAB实现
- 说话人识别matlab实现
- 基于PCA的人脸识别的Matlab实现代码
- matlab实现基于PCA的人脸识别算法
- 利用matlab实现最大连通域的人脸识别
- Matlab实现简单的人脸识别程序
- 利用matlab实现最大连通域的人脸识别
- 基于MATLAB的PCA人脸识别实现
- matlab实现人脸识别---PCA与最近邻法
- HOG人脸识别-matlab
- face recognition matlab code 人脸识别
- Matlab PCA+SVM人脸识别(一)
- PCA人脸识别 MATLAB 源代码
- Matlab PCA+SVM人脸识别(一)
- matlab 简单的人脸识别
- 利用MATLAB进行人脸识别
- 《C++primer(第五版)》学习之路-第五章:语句
- Linux 编程和系统管理新手入门
- 编写学习的java几种常用数组的排序方法,给大家分享一下
- java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
- 数据库存储引擎
- matlab实现人脸识别
- Vijos 1943 上学路上 容斥+组合数+逆元法
- shell 打印偶数行奇数行
- Java代码块执行顺序
- kafka的一些认识
- android getActionBar()报空指针异常
- python和ruby语法的简单对比
- 有限责任公司股权激励范例:股权期权协议书
- Android中级教程之----Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)