数据说明:采用的数据源是从别人那里拷的2012年全年的Sea Surface Temperature(海标温度,SST)数据,一直想找一份比较好的主成分分析数据,也没找到。

Matlab自身有主成分分析的函数princomp,其中返回的第二个数据就是样本经过K-L变换后的各个成分数据,第三个参数就是特征值大小。(第一个参数貌似是协方差矩阵,我还没看)

PCA的基本原理:
  一般图像的线性变换可以表示为:

y=Tx,

  式中X为待变换图像数据矩阵,Y为变换后的数据矩阵,T为实现这一线性变换的变换矩阵。如果变换矩阵T是正交矩阵,并且它是由原始图像数据矩阵X的协方差矩阵S的特征向量所组成,则该线性变换成为主成分分析,并且成Y矩阵的每一行矢量为变换后的一个主成分。

  具体的算法步骤为:

马上要走了,偷个懒,直接把握之前做的一个PPT放出来了(话说也真是懒啊,这n多年没更新一点内容能不懒嘛!!!(⊙o⊙)…)

以下为代码实现部分:

close all;
clear all;
clc; %% PCA_Test path = 'data\sst\2012\';
filelist = dir('data\sst\2012\*.sst.txt');
len = length(filelist);
% savepath = 'data\sst_pic\'; figure;
% 读取文件
for i = 1:len
filename = [path filelist(i).name];
date = filename(15:20);
sst_data(i,:) = dlmread(filename);%读取 min_val = min(sst_data(i,:));
max_val = max(sst_data(i,:)); pic = reshape(sst_data(i,:),360,180);
pic = rot90(pic);
subplot(4,3,i),imshow(pic,[min_val max_val]),title(date);
colormap;
% % 保存数据图像
% pic = reshape(sst_data(i,:),360,180);
% pic = rot90(pic);
% strI = int2str(i);
% save_path = [savepath strI '.tif'];
% imwrite(pic,save_path); end % 取得样本数据
X = sst_data';
tempX = X; % 取样本大小:维度m,样本数n
[m n] = size(X); % 求各样本平均值
meanVal = mean(X); % 样本矩阵中心化
X = X - repmat(meanVal,64800,1); % 计算协方差
S = X' * X ./ (m - 1); %".*"表示矩阵元素对应相乘 % 计算特征值eg和特征向量Ev
[Ev eg] = eig(S); % 由大到小排列对应
Ev = fliplr(Ev);
eg = fliplr(eg); % % 特征向量转置
% EvT = Ev'; % 得到新的成分
Y = tempX * Ev; % 将各个成分进行输出
figure;
for i = 1:n
outpic = Y(:,i); min_num = min(outpic);
max_num = max(outpic); outpic = reshape(outpic,360,180);
outpic = rot90(outpic);
%outtitle = ['特征值=' num2str(latent(i))];
subplot(4,3,i),imshow(outpic,[min_num max_num]),title(outtitle);%显示,并输出特征值
colorbar;
end

处理的结果对比显示:

主成分结果显示(按照特征值由大到小):

这个结果是和它内部的函数运算出来的结果是一样的:

% PCA
[coeff score latent] = princomp(sst_data');
[m,n] = size(score);
%
figure;
for i = 1:len
outpic = score(:,i); min_num = min(outpic);
max_num = max(outpic); outpic = reshape(outpic,360,180);
outpic = rot90(outpic);
outtitle = ['特征值=' num2str(latent(i))];
subplot(4,3,i),imshow(outpic,[min_num max_num]),title(outtitle);%显示,并输出特征值
colorbar;
end

唉哟,这个博客园居然对Matlab着色显示的时候都不怎么想要支持,看来还是我程序界都不怎么用Matlab哦

正在写Python的实现方式,过两天有时间了再放上来看看吧~~~

有点仓促,就此搁笔。

2016年1月11日22:38

原文链接:http://www.cnblogs.com/leonwen/p/5122811.html

matlab实现主成分分析(遥感图像处理)的更多相关文章

  1. 在matlab中进行遥感影像地理坐标的相互转换

    在matlab中进行图像处理,一般使用的都是图像本地坐标,以左上角(1,1)开始.处理完成后,如果要将结果在带地理坐标的遥感影像中显示,或者需要输出成shp文件,就需要涉及到本地坐标和地理坐标的转换, ...

  2. GDAL 遥感图像处理后的数据保存为图像文件的实现方法

    在遥感图像处理中,GDAL库不仅能读取和处理大部分的遥感图像数据,而且还能够实现图像处理后将数据保存为图像的功能. 本文就详细介绍如何将内存中的图像数据保存为.tif格式. 首先,遥感数据处理完,保存 ...

  3. MATLAB做主成分分析(PCA)

    简单的主成分分析.第一次见识PCA,我的认识是,尽量用更少的维度来描述数据,以达到理想(虽不是最好,但是''性价比''最高)的效果. %% 主成分分析降维 clear; % 参数初始化 inputfi ...

  4. 在matlab中实现遥感影像和shp文件的结合显示

    clc;close all;clear; road=shaperead('boston_roads.shp'); %读取shape文件 figure, mapshow('boston.tif'); % ...

  5. 基于Qt的遥感图像处理软件设计总结

     开发工具 VS2008+Qt4.8.0+GDAL1.9  要点 接口要独立,软件平台与算法模块独立,平台中各接口设计灵活,修改时容易. 设计软件时一步步来,每个功能逐一实现,某个功能当比较独立时可以 ...

  6. 分形在遥感和GIS中的应用

    GIS等高线化简 遥感图像的追踪 分形matlab实现:分形应用于遥感图像处理             低分辨率和高分辨率图形它们的形状是相似的(图像增强) 贪吃蛇和蚁群算法:试想管中窥豹,一只小蚂蚁 ...

  7. Matlab复习

    Matlab是刚好两年前(大三)接触的,那时一些课程(遥感图像处理.计量地理学......)要涉及简单的数学建模的问题.Matlab在那些资深的开发者看来可能是一门有点边缘化的东西,虽然也能做开发,能 ...

  8. Qt 实现遥感图像显示时的连动效果

    遥感图像处理时少不了ENVI,用过ENVI的人都知道,打开图像时或图像处理完后,在缩略图上移动鼠标时,鼠标周围的图像信息会在大的视图中实时的显示,即大图会跟着小图中的鼠标移动,这即是图像的连动效果.如 ...

  9. MATLAB中文论坛帖子整理(GUI)

    MATLAB中文论坛帖子整理(GUI) 目   录  1.GUI新手之——教你读懂GUI的M文件... 10 2.GUI程序中改变current directory引起的问题... 15 3.GUI中 ...

随机推荐

  1. Nginx Cache-Control

    转自:https://www.cnblogs.com/sfnz/p/5383647.html HTTP协议的Cache-Control指定请求和响应遵循的缓存机制.在请求消息或响应消息中设置 Cach ...

  2. Kubernetes Ingress 部署

    Kubernetes Ingress 部署 Pod与Ingress的关系• 通过service相关联• 通过Ingress Controller实现Pod的负载均衡- 支持TCP/UDP 4层和HTT ...

  3. 《 .NET并发编程实战》扩展阅读 - 元胞自动机 - 1 - 为什么要学元胞自动机

    先发表生成URL以印在书里面.等书籍正式出版销售后会公开内容.

  4. C# vb .NET生成QR二维码

    二维码比条形码具有更多优势,有些场合使用二维码比较多,比如支付.通过将某些数据生成二维码,就可以实现一码走天下.那么如何在C#,.Net平台代码里生成二维码呢?答案是使用SharpBarcode! S ...

  5. PHP MySQL数据分页

    SQL SELECT语句查询总是可能导致数千条记录.但是在一个页面上显示所有结果并不是一个好主意.因此,我们可以根据要求将此结果划分为多个页面.分页意味着在多个页面中显示您的查询结果,而不是仅将它们全 ...

  6. animations与transition

    transition过渡 和animation 动画 要知道 transition过渡和animation动画都是实现元素运动的一种方式.区别在于: transition过渡需要人为触发,例如点击触发 ...

  7. 使用python实现后台系统的JWT认证

    介绍 JWT协议似乎已经应用十分广泛,JSON Web Token--一种基于token的json格式web认证方法.基本的原理是,第一次认证通过用户名密码,服务端签发一个json格式的token.后 ...

  8. CentOS7 配置 SSH监听多个端口方法

    一.修改ssh默认端口,防止暴力破解,让系统安全多一点点: i. 在配置文件/etc/ssh/sshd_config文件中修改 Port #AddressFamily any #ListenAddre ...

  9. 第五篇:Python函数基础篇

    本篇介绍什么是函数.函数的特性.函数的定义.函数的调用.以及函数的参数.以及关于全局变量和局部变量的使用等等. 一.什么是函数: 函数是最基本的一种代码抽象方式,为了实现某种特定的功能而组织的带名字的 ...

  10. Delphi-面向对象

    1.面向过程2.基于对象3.面向对象 抽象:将同类事物向上抽取的过程 派生(继承): 编程中的继承指的是类和类之间的关系,称为派生. 封装:将不必要的暴漏的细节隐藏起来. 多态:一类事物以多种形态存在 ...