图像处理方面的知识也学了一段时间了,总是光看理论的话,感觉联系不上实际,第一次把理论综合的实现出来,对这些理论的印象才感觉的更深刻,也能够为后续的学习打下良好的基础。

PCA是比较老的算法,但是可靠性挺好,对于我这种新手,练练手还是不错的。

下面开始对这些算法说一说我自己的理解,如果有不正确的地方还请各位牛人指点。

主成分分析(PCA)是多变量分析中一项很老的技术,源于通信理论中的K-L变换,它考虑的是对于d维空间中的n个向量X1,X2......Xn,如何在低维空间中进行表示,这需要对其空间进行变换。

变换具体的表示如下:

其中即为对样本的一种近似表示,是样本的均值,

就是在d'维空间中的主成份分量,也就是经过PCA提取后的一组特征。

是这d'维空间的一组基。

这样即为原样本在d'维空间的一种近似。

看到这,还不知道和是如何计算得到的,具体的推理过程就不细说了,想知道的可以自行查阅相关资料,我只写一下他们的计算公式。

是散布矩阵S的前d‘个特征向量,是散布矩阵S的前d‘个特征值,而散布矩阵S为,其中Z为样本矩阵X中的每个样本减去样本均值后得到的矩阵。

S是d*d的矩阵,计算量很大,幸运的是有一种快速计算的方法,这里我们考虑,一般情况下样本数目n原小于样本维数d,所以R的尺寸远小于散布矩阵S。

设是R的特征向量为,则有

对上式两边同时左乘,得

说明为散布矩阵S的特征值,至此,可以计算小矩阵R的特征向量来得到散布矩阵S的特征向量。

当计算出散布矩阵S的特征向量和特征值时,就可以对样本进行表示了。

假设计算的是前20个特征值和特征向量,那么样本就可以用这20个特征值对其进行表示,这也就是样本的主成份。

快速PCA计算的matlab实现代码如下:

function [ pcaA   V] =fastPCA( A,k )



%输入:A------样本矩阵,每行为一个样本

%         k------降维至k维

%输出:pcaA----降维后K维样本特征向量组成的矩阵,每行一个样本,列数k为降维后的样本特征维数

%     V-------主成分分量

[r,c]=size(A);

%样本均值

meanVec = mean(A);

%计算协方差矩阵的转置 covMatT

Z=(A-repMat(meanVec,r,1));

covMatT =Z*Z';

%计算covMatT的前k个本征值和本征向量

[V D] = eigs(covMatT,k);

%得到协方差矩阵covMatT'的本征向量

V = Z'*V;

%本征向量归一化为单位本征向量

for i=1:k

    V(:,i)=V(:,i)/norm(V(:,i));

end





pcaA = Z*V;





end

基于PCA的特征提取的更多相关文章

  1. 基于PCA的人脸识别步骤

    代码下载:基于PCA(主成分分析)的人脸识别 人脸识别是一个有监督学习过程,首先利用训练集构造一个人脸模型,然后将测试集与训练集进行匹配,找到与之对应的训练集头像.最容易的方式是直接利用欧式距离计算测 ...

  2. opencv基于PCA降维算法的人脸识别

    opencv基于PCA降维算法的人脸识别(att_faces) 一.数据提取与处理 # 导入所需模块 import matplotlib.pyplot as plt import numpy as n ...

  3. 基于PCA和SVM的人脸识别

    程序中采用的数据集是ORL人脸库,该人脸库共有400副人脸图像,40人,每人10幅,大小为112*92像素,同一个人的表情,姿势有少许变化. 程序的流程主要分为三部分,数据的预处理(PCA降维和规格化 ...

  4. 基于PCA和SVM的人脸识别系统-error修改

    ------------------------------------------------- Undefined function or variable 'W'. Error in class ...

  5. pca图像识别

    代码下载:基于PCA(主成分分析)的人脸识别 人脸识别是一个有监督学习过程,首先利用训练集构造一个人脸模型,然后将测试集与训练集进行匹配,找到与之对应的训练集头像.最容易的方式是直接利用欧式距离计算测 ...

  6. Atitti 图像处理 特征提取的科技树 attilax总结

    Atitti 图像处理 特征提取的科技树 attilax总结 理论 数学,信号处理,图像,计算机视觉 图像处理 滤波 图像处理 颜色转换 图像处理 压缩编码 图像处理 增强 图像处理 去模糊 图像处理 ...

  7. A tutorial on Principal Components Analysis | 主成分分析(PCA)教程

    A tutorial on Principal Components Analysis 原著:Lindsay I Smith, A tutorial on Principal Components A ...

  8. 基于3D卷积神经网络的人体行为理解(论文笔记)(转)

    基于3D卷积神经网络的人体行为理解(论文笔记) zouxy09@qq.com http://blog.csdn.net/zouxy09 最近看Deep Learning的论文,看到这篇论文:3D Co ...

  9. 人脸和性别识别(基于OpenCV)

    描写叙述 人脸识别包含四个步骤 人脸检測:定位人脸区域,仅仅关心是不是脸: 人脸预处理:对人脸检測出来的图片进行调整优化. 收集和学习人脸:收集要识别的人的预处理过的人脸,然后通过一些算法去学习怎样识 ...

随机推荐

  1. script标签的位置

    1.在我们编写代码的时候,会在页面内使用<script>标签来写JS,虽然理论上script标签的位置放在哪里可以,但是还是有一点区别的. 2.为什么很多人把script标签放在底部: 初 ...

  2. 如何使用easyUI

    一.简介 以下内容来自百度: jQuery EasyUI是一组基于jQuery的UI插件集合,而jQuery EasyUI的 目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.开发者不 ...

  3. mysql主从监控

    要求:检测myslq从库状态,跳过固定的错误号,每隔30秒检测一次,如果符合条件自动跳过或者是重启从库 1)取出mysql从库的关键字 [root@localhost scripts]# mysql ...

  4. linux查看系统版本

       RHEL7.0以下,查看系统版本的方式: [rusky@rheltest1 ~]$ cat /proc/version Linux version -.el6.x86_64 (mockbuild ...

  5. 【iOS开发之静态库、动态库】

    什么是库? 库 就是程序代码的集合, 是共享程序代码的一种方式,库一般分两类:开源库和闭源库.github中共享一般是开源库:闭源库分为:静态库和动态库,闭源库不开放源代码,是经过编译的二进制文件,一 ...

  6. 安装Node.js

    1.window下安装Node.js 安装git,方便使用命令行. 网址:http://www.git-scm.com/download/ 下载后直接安装即可 接着安装Node.js https:// ...

  7. WPF单线程定时器 简单实例

    //窗体加载完毕 void MyMessageBox_Loaded(object sender, RoutedEventArgs e) { //启动定时期倒计时,多线程计时 //System.Thre ...

  8. SQL流程控制语句学习(三):while break continue

    1.while语法 while   布尔表达式 {sql语句或语句块} break  --跳出本层循环 {sql语句或语句块} continue  --跳出本次循环 {sql语句或语句块} 2.whi ...

  9. 网络NSURLSession

    简单下载图片 dispatch_queue_t queue =dispatch_queue_create(NULL, DISPATCH_QUEUE_CONCURRENT); dispatch_asyn ...

  10. CentOS 5设置服务器hostname、DNS和IP

    CentOS 5如何设置服务器主机名.DNS?设置主机名hostname编辑/etc/hostname文件写入:116.23.14.25 centostest.com其中116.23.14.25 表示 ...