文档介绍:: .
主分量分析原理与应用
PCA算法
姓名:丁宪成系另比电信学院专业:电磁场与微波学号:31100A进行图像的去噪原理:噪声一般都是高频信号,通过小波N层分解,可以得到图像的图像的高频系数和低频系数,我们通过对高频系数进行处理,得到修正的高频系数,通过小波的重构还原出原来的图像,从而减小噪声,PCA就应用于对高频系数进行处理的过程中。
4:运行结果:
人脸识别:()
z1=;z2=;z3=,所以第二幅图为要识别出的图形,这个结果很容易通过下面比对图像得到。
图像特征提取:在matlab命令窗口中输入:x1=imread('');x1=rgb2gray(x1);%转换成灰度图像imshow(x1)a1=im2double(x1);%uint8类型转换成double类型y1=pca(a1);figure;imshow(y1)运行的结果为:
原图特征提取后的图
:()
不含噪声图像加噪声后的图像
去噪后的图像5:实验要用到的图像为:
:(算法程序)PCA算法m为信号
%程序说明:y=pca(x)程序中x为m*n阶的混合数据矩阵,个数,n为采样点数%y为k*n的主分量矩阵functiony=pca(x)%去均值meanValue=mean(x');x=x-diag(meanValue)*ones(size(x));covarianceMatrix=cov(x');%计算协方差矩阵[a,b]=eig(covarianceMatrix);%计算协方差矩阵的特征值和特征向量%去掉较小的特征值rankTolerance=1e-5;%指定的阈值c=diag(b);c=fliplr(c');d=fliplr(a);l=length(c);fori=1:l
ifc(i)<rankTolerancec(i:l)=[];d(:,i:l)=[];break;
endend%输出主分量y=d'*x;:
%读入图像进行PCA验证%去取背景
x1=rgb2gray(x1);
%转换成灰度图像
a1=im2double(x1);
%uint8类型转换成double类型
y1=pca(a1);
%调用pca
x2=imread('');
%读入第二幅图像,要识别的图像
background=imopen(x1,strel(‘disk',15));%提取图像背景x1=imsubtract(x1,background);
%去掉背景
background=imopen(x2,strel(‘disk',15));%提取图像背景x2=imsubtract(x2,background);x2=rgb2gray(x2);a2=im2double(x2);y2=pca(a2);x3=imread('');%读入第三幅要识别的图像background=imopen(x3,strel(‘disk',15));%提取图像背景
x3=imsubtract(x3,background);x3=rgb2gray(x3);a3=im2double(x3);y3=pca(a3);z1=sum(sum(y1.*conj(y1)));z2=sum(sum(y2.*conj(y2)));z3=sum(sum(y3.*conj(y3)));ifabs(z1-z2)<abs(z1-z3)考图像逼近%去掉背景信息
%求y1主分量对应的总能量%求y2主分量对应的总能量%求y3主分量对应的总能量%判断能量相差大小,越小说明与参
fprintf('所识别的图像是第二幅图像\n');else
fprintf('所识别的图像是第三幅图像\n');endPCA用于图像的特征提取修改PCA输出的程序即可:
%输出主分量[e,f]=size(x);x1=zeros(e,f);k1=length(c);forj=1:f
fori=1:k1x1(:,j)=x1(:,j)+d(:,i)'*x(:,j)*d(:,i);
endendy=x1;(此时的PCA程序是重构程序)x1=imread('');x1=rgb2gray(x1);a1=im2double(x1);imsho