预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

一、简介 PCA(PrincipalComponentsAnalysis)即主成分分析,是图像处理中经常用到的降维方法,大家知道,我们在处理有关数字图像处理方面的问题时,比如经常用的图像的查询问题,在一个几万或者几百万甚至更大的数据库中查询一幅相近的图像。这时,我们通常的方法是对图像库中的图片提取响应的特征,如颜色,纹理,sift,surf,vlad等等特征,然后将其保存,建立响应的数据索引,然后对要查询的图像提取相应的特征,与数据库中的图像特征对比,找出与之最近的图片。这里,如果我们为了提高查询的准确率,通常会提取一些较为复杂的特征,如sift,surf等,一幅图像有很多个这种特征点,每个特征点又有一个相应的描述该特征点的128维的向量,设想如果一幅图像有300个这种特征点,那么该幅图像就有300*vector(128维)个,如果我们数据库中有一百万张图片,这个存储量是相当大的,建立索引也很耗时,如果我们对每个向量进行PCA处理,将其降维为64维,是不是很节约存储空间啊?对于学习图像处理的人来说,都知道PCA是降维的,但是,很多人不知道具体的原理,为此,我写这篇文章,来详细阐述一下PCA及其具体计算过程: 二、PCA原理 1、原始数据: 为了方便,我们假定数据是二维的,借助网络上的一组数据,如下: x=[2.5,0.5,2.2,1.9,3.1,2.3,2,1,1.5,1.1]Ty=[2.4,0.7,2.9,2.2,3.0,2.7,1.6,1.1,1.6,0.9]T 2、计算协方差矩阵 什么是协方差矩阵?相信看这篇文章的人都学过数理统计,一些基本的常识都知道,但是,也许你很长时间不看了,都忘差不多了,为了方便大家更好的理解,这里先简单的回顾一下数理统计的相关知识,当然如果你知道协方差矩阵的求法你可以跳过这里。 (1)协方差矩阵: 首先我们给你一个含有n个样本的集合,依次给出数理统计中的一些相关概念: 均值: 标准差: 方差: 既然我们都有这么多描述数据之间关系的统计量,为什么我们还要用协方差呢?我们应该注意到,标准差和方差一般是用来描述一维数据的,但现实生活我们常常遇到含有多维数据的数据集,最简单的大家上学时免不了要统计多个学科的考试成绩。面对这样的数据集,我们当然可以按照每一维独立的计算其方差,但是通常我们还想了解这几科成绩之间的关系,这时,我们就要用协方差,协方差就是一种用来度量两个随机变量关系的统计量,其定义为: 从协方差的定义上我们也可以看出一些显而易见的性质,如: 需要注意的是,协方差也只能处理二维问题,那维数多了自然就需要计算多个协方差,比如n维的数据集就需要计算CN2【此乃组合数基本公式】个协方差,那自然而然的我们会想到使用矩阵来组织这些数据。给出协方差矩阵的定义: 这个定义还是很容易理解的,我们可以举一个简单的三维的例子,假设数据集有三个维度{x,y,z},则协方差矩阵为 可见,协方差矩阵是一个对称的矩阵,而且对角线是各个维度上的方差。 (2)协方差矩阵的求法: 协方差矩阵计算的是不同维度之间的协方差,而不是不同样本之间的。下面我们将在matlab中用一个例子进行详细说明: 首先,随机产生一个10*3维的整数矩阵作为样本集,10为样本的个数,3为样本的维数。 [cpp]viewplaincopy MySample=fix(rand(10,3)*50) 根据公式,计算协方差需要计算均值,那是按行计算均值还是按列呢,我一开始就老是困扰这个问题。前面我们也特别强调了,协方差矩阵是计算不同维度间的协方差,要时刻牢记这一点。样本矩阵的每行是一个样本,每列为一个维度,所以我们要按列计算均值。为了描述方便,我们先将三个维度的数据分别赋值: [cpp]viewplaincopy dim1=MySample(:,1); dim2=MySample(:,2); dim3=MySample(:,3); %计算dim1与dim2,dim1与dim3,dim2与dim3的协方差: sum((dim1-mean(dim1)).*(dim2-mean(dim2)))/(size(MySample,1)-1)%得到74.5333 sum((dim1-mean(dim1)).*(dim3-mean(dim3)))/(size(MySample,1)-1)%得到-10.0889 sum((dim2-mean(dim2)).*(dim3-mean(dim3)))/(size(MySample,1)-1)%得到-10***000 %搞清楚了这个后面就容易多了,协方差矩阵的对角线就是各个维度上的方差,下面我们依次计算: std(dim1)^2%得到108.3222 std(dim2)^2%得到260.6222 std(dim3)^2%得到9