事例布景
主成分剖析是一种经过降维技能把多个标量转化为少量几个主成分的多元统计办法,这些主成分能够反映原始的大部分信息,一般表示为原始变量的线性组合。为了使这些主成分所包含的信息互不重,则要求各主成分之间互不相关。
主成分剖析能够有用削减数据的维度,并使提取的成分与原始数据的差错到达均方最小,可用于数据的紧缩和模式识别的特征提取。本章经过采用主成分剖析去除了图画数据的相关性,将图画信息浓缩到几个主成分的特征图画中,有用地完成了图画的紧缩,一起能够依据主成分的内容康复不同的数据图画,满意对图画紧缩、重建的不同层次的需求。
基础理论及代码完成
主成分剖析(PCA)经过核算,挑选少量几个主重量来代表多变量的方差(即协方差)结构,是一种有用的特征提取办法。数字图画是二维矩阵,对其经过PCA处理来提取特征,能够在必定份额上保存原始图画的特征信息,而且能够大大削减核算量。因而,PCA图画紧缩处理归于–种降维办法,它经过对高维图画块向量空间进行降维处理,将多变量的图画块数据表进行最佳归纳简化,导出少量几个主重量,从而完成在必定份额上保存原始图画信息,又能坚持图画块之间的不相关性,从而保证图画紧缩成果的有用性。
主成分剖析:
本节经过编写函数pcaimage来完成对图画进行PCA紧缩的目的,经过传入图画矩阵、主成分装备、子块大小来进行PCA处理,回来紧缩重构的图画矩阵、紧缩比、贡献率信息,详细代码如下所示。
function [coeff,score,rate]=pcasample(X,p)
[V,D]=eig(X'*X);
for i=1:size(V,2)
[~,idx]=max(abs(V(:,i)));
V(:,i)=V(:,i)*sign(V(idx,i));
end
[lambda,locs]=sort(diag(D),'descend');
V=V(:,locs);
coeff=V(:,1:p);
score=X*V(:,1:p);
rate=sum(lambda(1:p))/sum(lambda);
图画和样本转换:
在一般情况下,数字图画矩阵能够视为二维数组,为了将图画数组转换为样本矩阵,需求首先对图画进行子块划分,然后将每个子块拉伸成一维,最终将所有子块组合成一个样本矩阵。其间,MATLAB自带的im2col()函数能够完成二维数组的分块及向量整合。
有一点需求留意,im2col()是将 每个子块拉伸成列向量,col2im()是 将列向量重组成子块,而样本矩阵是每行一个样本,在进行主成分剖析时,就要相对样本矩阵进行转置。别的,im2col()和 col2im()函数只能对二维数组进行操作,如果是三位彩色图画,则需求自己编写图画分块和重组函数,或许先将彩色图转换为灰度图。
根据主成分剖析的图画紧缩:
主成分剖析(PCA)经过核算,挑选少量几个主重量来代表多变量的方差(即协方差)结构,是一种有用的特征提取办法。数字图画是二维矩阵,对其经过PCA处理来提取特征,能够在必定份额上保存原始图画的特征信息,而且能够大大削减核算量。因而,PCA图画紧缩处理归于–种降维办法,它经过对高维图画块向量空间进行降维处理,将多变量的图画块数据表进行最佳归纳简化,导出少量几个主重量,从而完成在必定份额上保存原始图画信息,又能坚持图画块之间的不相关性,从而保证图画紧缩成果的有用性。
本节经过编写函数pcaimage来完成对图画进行PCA紧缩的目的,经过传入图画矩阵、主成分装备、子块大小来进行PCA处理,回来紧缩重构的图画矩阵、紧缩比、贡献率信息,详细代码如下所示。
function [Ipca,ratio,contribution]=pcaimage(I,pset,block)
if nargin<1
I=imread('football.jpg');
end
if nargin<2
pset=3;
end
if nargin<3
block=[16 16];
end
if ndims(I)==3
I=rgb2gray(I);
end
X=im2col(double(I),block,'distinct')';
[n,p]=size(X);
m=min(pset,p);
[coeff,score,contribution]=pcasample(X,m);
X=score*coeff';
Ipca=cast(col2im(X',block,size(I),'distinct'),class(I));
ratio=n*p/(n*m+p*m);
为了比较不同参数下履行PCA图画紧缩的效果,本实验挑选在循环结构中调用pcaimage()程,并装备不同数量的主成分参数来对图画进行紧缩和重构,比较紧缩比和贡献率,详细代码如下所示:
clc; clear all; close all;
I=imread('liftingbody.png');
k=1;
figure('Units', 'Normalized', 'Position', [0 0 1 1]);
for p=1:5:20
[Ipca,ratio,contribution]=pcaimage(I,p,[24 24]);
subplot(2,2,k);
imshow(Ipca)
title(['主成分个数=',num2str(p),...
',紧缩比=',num2str(ratio),...
',贡献率=',num2str(contribution)],'fontsize',14);
k=k+1;
end
由图能够看出,根据主成分剖析的图画紧缩技能具有很高的紧缩比,一起到达高信噪比。例如,主成分个数为16时,紧缩比到达16.43;主成分个数为50时,紧缩比达.到5.26,此时肉眼根本无法辨识失真。