基于PCA简单的人脸识别opencv实现-图像处理学习笔记
来源:互联网 发布:域名转出申请表 编辑:程序博客网 时间:2024/04/30 00:41
思路简述
PCA即主成分分析。计算主成分的目的是将高维数据投影到较低维空间。给定 n 个变量的 m 个观察值,形成一个 n ′ m 的数据矩阵, n 通常比较大。
按自己的理解就是,将一个空间的数据投影到一个子空间里,实现降维,并且变换到特定的子空间,会使相似的数据聚合在一起,不同类的数据图像分开的远些(所以就用到变换空间),在这个子空间里实现数据的比较分析更容易些。
实现步骤
1。读取训练样本
将人脸数据库加载到内存中,每幅图像用一个行向量表示,将所有数据库中图像用一个矩阵来表示。
for (int i = 1;i <= 250;i++) { data = imread(path +to_string(i)+"\\1.png", CV_LOAD_IMAGE_GRAYSCALE); data.reshape(1, 1).row(0).convertTo(row_tmp, CV_32FC1); row_copy(row_tmp, database, i * 2 - 2); data = imread(path + to_string(i) + "\\2.png", CV_LOAD_IMAGE_GRAYSCALE); data.reshape(1,1).row(0).convertTo(row_tmp, CV_32FC1); row_copy(row_tmp, database, i * 2 - 1); }
注意一定要读取灰度图,并且转换成CV_32FC1
求特征向量(特征脸)
int number_principal_compent = 10;//保留最大的主成分数(特征向量数)(为对应特征值(贡献度)最大前十的特征向量) //构造pca数据结构 PCA pca(database, Mat(), CV_PCA_DATA_AS_ROW, number_principal_compent);//Mat为掩码 对象为整个矩阵不用操作 Mat eigenvectors = pca.eigenvectors.clone();
求出每个训练样本和测试样本在子空间中的投影系数
Mat cv=pca.project(database);Mat test = pca.project(testimage);
计算每个训练样本和测试样本的欧式距离,取其中最小的为识别图片
vector< double > distance
for (int i = 0;i < cv.rows;i++) { distance[i]=norm(test,cv.row(i)); }auto smallest = min_element(begin(distance), end(distance)); cout << "min element is " << *smallest << " at position " << std::distance(std::begin(distance), smallest) << std::endl;
1 0
- 基于PCA简单的人脸识别opencv实现-图像处理学习笔记
- 简单理解基于PCA的人脸识别
- opencv学习-pca人脸识别
- 基于PCA的人脸识别的Matlab实现代码
- [机器学习]基于OpenCV实现最简单的数字识别
- [机器学习]基于OpenCV实现最简单的数字识别
- [机器学习]基于OpenCV实现最简单的数字识别
- [机器学习]基于OpenCV实现最简单的数字识别
- [机器学习]基于OpenCV实现最简单的数字识别
- 基于PCA实现人脸识别
- 利用Python实现基于PCA算法的人脸识别
- matlab实现基于PCA的人脸识别算法
- 基于MATLAB的PCA人脸识别实现
- 【OpenCV学习笔记 006】基于类的图像处理
- 图像识别 python+opencv的简单人脸识别
- 图像识别 python+opencv的简单人脸识别
- OpenCV的PCA人脸识别
- OpenCV的PCA人脸识别
- linux Cent OS6.5 安装nodeJS(分分钟搞定)
- 手把手入门神经网络系列(2)_74行代码实现手写数字识别
- 5个不同的数比较7次解析
- AndroidHttp通信 HTTP Client与HttpURLConnection的区别
- 服务器接受客户端图片
- 基于PCA简单的人脸识别opencv实现-图像处理学习笔记
- mac+virtualbox+ubuntu 共享文件夹
- 简单的文本加密
- PAT1012
- SSH login to Aliyun ubuntu server without password
- C++学习笔记(3)
- 怎样使用nat和桥接方式解决虚拟机联网问题
- 参数文件损坏或丢失
- spring4.0 源码分析 DefaultListableBeanFactory和XmlBeanDefinitionReader(二)