1.算法功能简介

   主成分变换(Principal Component Analysis,PCA)又称K-L(Karhunen-Loeve)变换或霍特林(Hotelling)变换,是基于变量之间的相关关系,在尽量不丢失信息前提下的一种线性变换的方法,主要用于数据压缩和信息增强。

  主成分正变换,一般意义的K-L变换就是指正变换,该过程通过对图像进行统计,在波段协方差矩阵的基础上计算特征值,构造主成分。根据主成分与特征值的关系,可以选择少数的主成分作为输出结果。

  主成分逆变换,如果在正变换中选择的主成分数目与波段/变量数目相同,那么逆变换结果将完全等同于原始影像。如果选择的主成分数目少于波段数逆变换结果相当于压抑了图像中的噪声。受选择的主成分数目的影响,逆变换结果图像的各个“波段”与原始图像波段可能会有较大的差异而不再具有原始图像波段的物理意义。

  PIESDK提供了正变换和逆变换的算法,只需要设置对应的参数条件就可以执行,下面介绍下两种算法使用方法。

下面的示例代码需要安装DevExpress三方界面库

2.算法功能实现说明

2.1. 实现步骤

第一步

算法参数设置

第二步

算法执行

第三步

结果显示

2.2. 算法参数

算法名称

主成分正变换

C#算法DLL

PIE.CommonAlgo.dll

C#算法名称

PIE.CommonAlgo.TransformForwardPCAAlgo

参数结构体

ForwardPCA_Exchange_Info

参数说明

m_strInputFile

String

输入文件

m_strOutputResultFile

String

输出影像路径

m_strOutputStatsFile

String

输出统计文件

m_strFileTypeCode

String

输出文件类型

m_nPCBands

int

输出波段数量

m_nOutDataType

int

输出文件类型

0、字节型(8位);

1、无符号整形(16位);

2、整形(16位);

3、无符号长整形(32位);

4、长整形(32位);

5、浮点型(32位);

6、双精度浮点型(64位)

m_eigenvalues

IList<string>

特征值 -返回

m_bPCBandsFromEigenvalus

bool

根据特征值排序选择PCA波段

m_bOutputLikeEnvi

bool

零均值处理

m_bCovariance

bool

统计使用矩阵 -true- 使用协方差矩阵 -false- 使用相关系数矩阵

m_accumulate_contribute

IList<string>

百分比 -返回

算法名称

主成分逆变换

C#算法DLL

PIE.CommonAlgo.dll

C#算法名称

PIE.CommonAlgo.TransformInversePCAAlgo

参数结构体

InversePCA_Exchange_Info

参数说明

m_m_nOutDataType

int

输出文件字节类型

0、字节型(8位);

1、无符号整形(16位);

2、整形(16位);

3、无符号长整形(32位);

4、长整形(32位);

5、浮点型(32位);

6、双精度浮点型(64位)

m_strFileTypeCode

String

输出文件格式

m_strInputPcaFile

String

输入PCA结果文件

m_strInputStatsFile

String

输入PCA结果统计文件

m_strOutputResultFile

String

输出文件路径

2.3. 示例代码

项目路径

百度云盘地址下/PIE示例程序/10.算法调用/图像处理/ImageTransform

数据路径

百度云盘地址下/PIE示例数据/栅格数据/04.World/World.tif

视频路径

百度云盘地址下/PIE视频教程/10.算法调用/图像处理/主成分变换.avi

示例代码

 /// <summary>
/// 主成分正变换
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripButton1_Click(object sender, EventArgs e)
{
//1、参数设置
PIE.CommonAlgo.ForwardPCA_Exchange_Info info = new ForwardPCA_Exchange_Info();
info.m_strInputFile = @"D:\data\02.测试数据\World\World.tif";
info.m_nOutDataType = ;//float32
info.m_strOutputResultFile = @"D:\PCPT.tif";//输出文件
info.m_strOutputStatsFile = @"D:\PCPT.pcasta";//输出统计文件
info.m_nPCBands = ;//输出的主成分波段数
info.m_strFileTypeCode = "GTiff";//文件格式类型
info.m_bOutputLikeEnvi = true;//零均值处理
info.m_bPCBandsFromEigenvalus = false;//是否根据特征值排序PCA波段(如果为true,m_nPCBands 为0个波段)
info.m_bCovariance = true;//统计使用矩阵 true 协方差矩阵 false 使用相关系矩阵 前提是
bPCBandsFromEigenvalus为true,设置的才有效
//2、创建算法对象
ISystemAlgo algo = AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.TransformForwardPCAAlgo");
if (algo == null) return;
algo.Params = info; //3、执行算法
bool result = AlgoFactory.Instance().ExecuteAlgo(algo);
if (result)
{
if (info.m_nPCBands == && info.m_bPCBandsFromEigenvalus)
{
PIE.CommonAlgo.ForwardPCA_Exchange_Info info1 = algo.Params as PIE.CommonAlgo.ForwardPCA_Exchange_Info;
PIE.Plugin.FrmPCABandSelect frm = new PIE.Plugin.FrmPCABandSelect();
frm.Init(info1.m_eigenvalues, info1.m_accumulate_contribute);
if (frm.ShowDialog() != DialogResult.OK) return;
info1.m_nPCBands = frm.nOutBandCount;//选择输出的波段号
algo.Params = info1;
result = AlgoFactory.Instance().ExecuteAlgo(algo);
}
}
if (result == false) return;
mapControlMain.AddLayerFromFile(info.m_strOutputResultFile, );
mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
} /// <summary>
/// 主成分逆变换 (对主成分正变换的结果做逆变换,得到正变换之前的影像数据)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripButton2_Click(object sender, EventArgs e)
{
//1、参数设置
PIE.CommonAlgo.InversePCA_Exchange_Info info = new InversePCA_Exchange_Info();
info.m_strInputPcaFile = @"D:\PCPT.tif";//输入文件 主成分正变换结果
info.m_strInputStatsFile = @"D:\PCPT.pcasta";//pac统计文件
info.m_strOutputResultFile = @"D:\InversePC.tif";//逆变换结果
info.m_strFileTypeCode = "GTiff";//输出结果
info.m_nOutDataType = ;//float32 //2、创建算法对象
ISystemAlgo algo = AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.TransformInversePCAAlgo");
if (algo == null) return;
algo.Params = info; //3、执行算法并加载结果图层
bool result = AlgoFactory.Instance().ExecuteAlgo(algo);
if (result != true) return;
ILayer layer = LayerFactory.CreateDefaultLayer(info.m_strOutputResultFile);
mapControlMain.ActiveView.FocusMap.AddLayer(layer);
mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
}

2.4. 示例截图

图一、主成分正变换

图二:主成分逆变换

PIE SDK主成分变换的更多相关文章

  1. PIE SDK最小噪声变换

    1.算法功能简介 最小噪声分离变换是用于判定图像数据内在的维数(即波段数),分离数据中的噪声,减少随后处理中的计算需求量. MNF 本质上是两次层叠的主成分变换.第一次变换(基于估计的噪声协方差矩阵) ...

  2. 图像处理中的数学原理具体解释20——主成分变换(PCA)

    欢迎关注我的博客专栏"图像处理中的数学原理具体解释" 全文文件夹请见 图像处理中的数学原理具体解释(总纲) http://blog.csdn.net/baimafujinji/ar ...

  3. PIE SDK主/次要分析

    1.算法功能简介 主要分析功能是采用类似卷积滤波的方法将较大类别中的虚假像元归到该类中,首先定义一个变换核尺寸,然后用变换核中占主要地位(像元最多)类别数代替中心像元的类别数,次要分析相反,用变换核中 ...

  4. PIE SDK彩色空间变换

    1. 算法功能简介 使用彩色空间变换工具可以将三波段红.绿.蓝图像变换到一个特定的彩色空间,并且能从所选彩色空间变换回 RGB.两次变换之间,通过对比度拉伸,可以生成一个色彩增强的彩色合成图像.此外, ...

  5. PIE SDK缨帽变换

    1.算法功能简介 缨帽变换是根据多光谱遥感中土壤.植被等信息在多维光谱空间中信息分布结构对图像做的经验性线性正交变换. PIE 支持对 Landsat MSS. Landsat 5 TM.Landsa ...

  6. PIE SDK傅里叶变换

    1.算法功能简介 傅里叶变换能把遥感图像从空域变换到只包含不同频域信息的频域中.原图像上的灰度突变部位(如物体边缘).图像结构复杂的区域.图像细节及干扰噪声等,经傅里叶变换后,其信息大多集中在高频区: ...

  7. PIE SDK小波变换

    1.算法功能简介 小波变换是一种信号的时间——尺度分析方法,具有多分辨率分析的特点,而且在时频两域都具有表征信号局部特征的能力,是一种窗口大小固定不变但其形状可变,时间窗和频率窗都可变的时频局部化分析 ...

  8. PIE SDK PCA融合

    1.算法功能简介 PCA 融合分三步实现,首先将多光谱数据进行主成分变换,然后用高分辨单波段替换第一主成分波段,最后进行主成份逆变换得到融合图像. PIE支持算法功能的执行,下面对PCA融合算法功能进 ...

  9. PIE SDK Command&&Tool工具命令一览表

    PIE SDK Command&&Tool工具命令一览表 编号 模板 名称(中文) Command&Tool 程序集 备注 1 数据管理 加载栅格数据 PIE.Controls ...

随机推荐

  1. [原创]Appium与Appium desktop的区别

    1.两者都属于Appium 服务端 2.二者最新版本如下:地址:https://github.com/appium/appium-desktop/releases Appium 服务端支持的:地址:h ...

  2. c# 第五节 第一个控制台程序、第一个桌面、快捷键、注释

    本节内容: 1:控制台程序的创建 2:第一个桌面程序 3:快捷键 4:注释 一.第一个控制台程序: 这就是控制台程序: 打开你的vs2015,按如下操作 二.第一个桌面程序 比如当我们删除一个东西会弹 ...

  3. 201871010124-王生涛 《面向对象程序设计(java)》第八周学习总结

    博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...

  4. CF1256(div3 java题解)

    A: 题意:给定A个N元,B个一元,问是否可以凑成S元. 思路:A*i+j=S 即 A*I<=S<=A*I+B 即min(S/N,A)+B>=S: /* @author nimphy ...

  5. day39_8_23mysql的其他内容(视图等)

    一.视图 MySQL中有一种比较方便的表,就是视图(view). 什么是视图? 视图就是通过查询获得一张虚拟表,然后将其保存,下次可以直接使用这个视图. 使用视图就可以不需要重复查询/连接表,在代码层 ...

  6. 配置 application.properties

    # 数据库链接信息mysql.driver=com.mysql.cj.jdbc.Drivermysql.url=jdbc:mysql://localhost:3306/mydemo?character ...

  7. zz“深度高斯模型”可能为深度学习的可解释性提供概率形式的理论指导

    [NIPS2017]“深度高斯模型”可能为深度学习的可解释性提供概率形式的理论指导?亚马逊机器学习专家最新报告 专知 [导读]在NIPS 2017上,亚马逊机器学习专家Neil Lawrence在12 ...

  8. 1.Vue前端核心分析

    1.Vue SoC:关注点分离原则 网络通信:axios 页面跳转:vue-router 页面管理:vuex Vue-UI:ICE.ElementUI 集大成者:MVVM+虚拟DOM 2.MVVM 异 ...

  9. 牛客CSP-S提高组赛前集训营1———2019.10.29 18:30 至 22:00

    期望得分:100+0+10 实际得分:40+0+0 考炸了... T1:题目链接 究竟为什么会这样,,, 仔细研读我的丑代码 发现... 枯辽.... #include<cstdio> # ...

  10. LOJ6686 Stupid GCD(数论,欧拉函数,杜教筛)

    做题重心转移到 LOJ 了. 至于为什么,如果你知道“……”的密码,就去看吧. LOJ 上用户自创题大多数都不可做,今天看到个可做题(而且还是个水题),就来做了一发. 明显枚举立方根.(以下令 $m= ...