参考:
https://blog.csdn.net/duanyule_cqu/article/details/54975867
该篇文章主要是使用PCA对一幅图像进行处理,并提取和显示该图像经过PCA的变换后的各主成分。
这里就直接贴代码,PCA原理的部分相信大家都看了许多,其实看来看去,不去实践一个具体的目的,总还有些概念不是很清楚的。

PCA对图像处理的特点

*疑问:
经过PCA变换排在前面的主成分就一定没有噪声吗?
我觉得是不一定的。也就是说排在前面的主成分未必很“纯”。
通过PCA变换,可以把多波段图像中的有用信息集中到数量尽可能少的新的主成分图像中,并使这些主成分图像之间互不相关,从而大大减少总的数据量。但PCA变换对噪声比较敏感,即信息量大的主成分分量,信噪比(信号与噪声的比)不一定高,当某个信息量大的主成分中包含的噪声的方差大于信号的方差时,该主成分分量形成的图像质量就差, PCA变换用于融合处理并不是为了减少噪声,而是通过该变换,使得多光谱影像在各个波段具有统计独立性,即这些波段间的数据互不相关,便于分别采用相应的融合策略。

提取并显示PCA 的各主成分

主代码

>> mul = imread('PCA/low.jpg');
>> extract_pca(mul);

实现 PCA的代码

function [vector ,value,tempMul] = my_pca(mul)
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% % % 该函数用来实现多光谱图像的PCA算法
% % %    param:
% % %          mul--输入的多光谱图像也可以是多通道的
% % %          value--特征值从大到小排列
% % %          vector--特征向量对应特征值排列,一列是一个特征向量
% % %          tempMul--mul的reshape成pixels*bands形式的2维矩阵
% % %
% % %  @author:chaolei
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
mul=double(mul)/255;
[r ,c ,bands]=size(mul);
pixels = r*c;
% reshape成pixels*channel
mul = reshape(mul, [pixels,bands]);
tempMul = mul;
% 求各通道的均值
meanValue =  mean(mul,1);% 数据去中心化
mul = mul - repmat(meanValue,[r*c,1]);
% 求协方差矩阵
correlation = (mul'*mul)/pixels;
%求特征向量与特征值
[vector ,value] = eig(correlation);
% 特征值和特征向量从大到小排序
vector = fliplr(vector);
value = fliplr(value);
value = flipud(value);end

提取并显示PCA的各主成分

function extract_pca(mul)
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% % % 该函数用来抽取并显示pca的各个主成分
% % %   param:
% % %       mul--输入图像是多光谱图像或者高光谱图像
% % %  @author:chaolei
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
[r,c,bands]=size(mul);
[vector,~,tempMul]= my_pca(mul);
% Y=AX(X中列为样本,若X行为样本,则Y =XA)
% PCA正变换
PC = tempMul*vector;
% 提取多光谱图像的各个主成分
for i = 1:bandsoutPic = PC(:,i);min_value = min(outPic);max_value = max(outPic);outPic = reshape(outPic,[r,c]);figure;str = sprintf('%s%d%s','第',i,'主成分');imshow(outPic,[min_value,max_value]);title(str);
%     filename = sprintf('%d%s',i,'.jpg');
%     imwrite(outPic,filename);
end
end

结果




实现PCA进行压缩

原本这一小节不想写的,可是觉得自己对用PCA进行压缩一直不清楚。所以还是要赘述一下,写一点代码。从上面的分析中可以看出,由于我输入的图像是3通道的,也即只有3个特征,所以只有3个主成分。
那我们要思考的是如何进行图像压缩?针对这个实例,以前理解的误区在于,即使我选取了2个或者1个主成分,可是我PCA逆变换回去的图像仍是和原始图像一样的尺寸。那这怎么叫压缩呢?
后来帮大金明实现提取PCA的主成分的过程中,理解了这个PCA压缩的概念。假设我们选取其中最前面的2个主成分。从图中可以看出这2个主成分已经包括了大部分的信息。那么我们的PCA压缩实现的就是存储这2个主成分,并且存储2个主成分对应的特征向量。这样算起来其实我们大约少存储了原图像一个通道的数据。也就是实现了压缩。下面贴一下代码。

function  pca_comp_show(mul,n)
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% % % 该函数用来显示经过PCA压缩后的图像
% % %  param:
% % %     mul--输入的多光谱或者高光谱图像
% % %     n--指定用多少个主成分
% % % @author:chaolei
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
[vector ,value,tempMul] = my_pca(mul);
% 使用其中最重要的n个主成分,并还原到原图像大小
% PCA逆变换
% 原始数据reshape*特征向量矩阵*特征向量矩阵'
re = tempMul*vector(:,1:n)*vector(:,1:n)';
[r,c,bands] =size(mul);
comp = reshape(re,[r,c,bands]);str =sprintf('%d%s',n,'个主成分');
figure;imshow(comp);title(str);
end

提取PCA变换后的图像的各主成分(matlab代码)相关推荐

  1. matlab仿真点目标,sar合成孔径雷达图像点目标仿真报告(附matlab代码).docx

    sar合成孔径雷达图像点目标仿真报告(附matlab代码).docx SAR图像点目标仿真报告徐一凡1SAR原理简介合成孔径雷达(SyntheticApertureRadar,简称SAR)是一种高分辨 ...

  2. 显著性图matlab,cvpr14_saliency_code 2014上的关于图像显著性区域的检测matlab代码。 271万源代码下载- www.pudn.com...

    文件名称: cvpr14_saliency_code下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 4413 KB 上传时间: 2014-09-07 下载次 ...

  3. 基于神经网络多项式插值的图像超分辨重构研究-附Matlab代码

    ⭕⭕ 目 录 ⭕⭕ ✳️ 一.引言 ✳️ 二.基于单帧图像的超分辨率重构技术 ✳️ 2.1 最近邻域插值法 ✳️ 2.2 双线性插值法 ✳️ 2.3 双三次插值法(Keys'插值) ✳️ 三.神经网络 ...

  4. matlab实现photoshop,photoshop图像滤镜——素描算法(含matlab代码)

    二.photoshop图像滤镜--素描算法 素描的算法,网络上有多种,但是效果并不是特别理想.熟悉photoshop的朋友都知道,把彩色图片打造成素描的效果仅仅需要几步操作:1.去色:2.复制去色图层 ...

  5. matlab 浮雕算法,photoshop图像滤镜——浮雕算法(含matlab代码)

    一.photoshop图像滤镜--浮雕算法 浮雕的算法是对图像的每一个点进行卷积处理,采用的矩阵如下 [100:00 0:00-1]: 假设原图像为X,处理后的图像为Y ,也就是说,对于坐标为(i,j ...

  6. 一种基于卷积神经网络的图像去雾研究-含matlab代码

    目录 一.绪论 二.去雾卷积网络 2.1 特征提取 2.2 多尺度映射 2.3 局部均值 2.4 非线性回归 三.实验与分析 四.Matlab代码获取 一.绪论 雾是一种常见的大气现象,空气中悬浮的水 ...

  7. 【图像检测】基于形态学实现图像目标尺寸测量系统附matlab代码

    1 简介 介绍了一种基于机器视觉技术的目标外观尺寸检测系统.,通过数字图像处理技术获取柚子的纵径,横径,表面积等外观尺寸参数. 2 部分代码 coin_width=1.1000;coin_height ...

  8. photoshop图像滤镜——素描算法(含matlab代码)

    二.photoshop图像滤镜--素描算法 素描的算法,网络上有多种,但是效果并不是特别理想.熟悉photoshop的朋友都知道,把彩色图片打造成素描的效果仅仅需要几步操作:1.去色:2.复制去色图层 ...

  9. 基于最小均方误差linear minimum mean square error(LMMSE)插值算法的图像超分辨重构研究-附Matlab代码

    ⭕⭕ 目 录 ⭕⭕ ✳️ 一.引言 ✳️ 二.图像复原基本原理 ✳️ 三.基于多通道LMMSE图像复原法 ✳️ 3.1 最小均方误差LMMSE插值理论 ✳️ 3.2 理论公式对应的Matlab关键代码 ...

  10. 关于图像显著性(MR)matlab代码详解

    本代码内容是关于Saliency Detection via Graph-Based Manifold Ranking的算法详解,想要运行此代码还需要一系列的文件,单纯此代码无法演示结果的. 可以在网 ...

最新文章

  1. UOJ #53.线段树区间修改
  2. Linux服务器init 5启动图形界面,报错Retrigger failed udev events的解决方法
  3. 泛型技巧系列:简单类型选择器
  4. Java配置dbeaver_ubuntu我的工具安装 eclipse、dbeaver、jdk、kdesvn、
  5. JPA EntityManager详解
  6. 华为服务器euleros系统,euleros服务器版本
  7. 基于JFinal框架开发的企业办公系统-JFinalOA v1.1源码
  8. 【Vue2.0】—github小案例(二十三)
  9. 7723java之战,满江红4之江山美人
  10. 快速查找对方IP地址经典技巧汇总
  11. 微信模板消息发送实例
  12. Houdini 笔记2
  13. SEO入门:网站站内优化流程
  14. linux wireshark 中文,Wireshark (简体中文)
  15. ValueError: Object arrays cannot be loaded when allow_pickle=False 异常的多种处理方式
  16. 影评:雨天的水彩画 《爱有天意》观感(转)
  17. 移动端:js判断苹果ios各类机型
  18. 电容笔有必要买吗?双十一性价比高的电容笔推荐
  19. 关于更换无线网卡后Win10连接上蓝牙耳机后没声音的问题
  20. 手绘PS云毕业照片走红网络,身为预备役程序员的我却把好好的青春回忆变成了暗黑系恐怖片

热门文章

  1. python连续小波变换_连续小波变换CWT(2)
  2. java 生成条形码_Springboot生成二维码,怎么搞?
  3. Java进阶:SpringMVC中获取web.xml中的全局参数
  4. SQL:postgresql中判断字段是否为某个值的方法IN操作符
  5. 计算机社团招新个人简历,大学社团招新面试自我介绍五篇
  6. 会安装oracle数据库吗,搭建安装oracle数据库
  7. 23种设计模式(0)——概述
  8. boost boost::asio::read read_some receive 区别
  9. 机器学习笔记【二】逻辑回归与分类(2):感知机学习算法与逻辑回归的区别,牛顿方法
  10. 分布式存储系统学习笔记(一)—什么是分布式系统(3)—复制