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. 4-7 3D绘图

    In [1]: import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D % ...

  2. 如何在docker镜像里安装pycuda和numba?

    其实,安装numba还好,直接pip install numba就可以. 但pycuda就不那么友好了. 默认安装时,可能会报如下错误: src/:: fatal error: curand.h: N ...

  3. 201871010108-高文利《面向对象程序设计(java)》第十一周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址> ht ...

  4. STOMP 客户端 API 整理

    STOMP(Simple Text-Orientated Messaging Protocol) 面向消息的简单文本协议WebSocket是一个消息架构,不强制使用任何特定的消息协议,它依赖于应用层解 ...

  5. Spring Cloud微服务安全实战_4-2_常见的微服务安全整体架构

    这个图适用于中小公司的微服务架构 微服务:SpringBoot 写的Rest服务 服务注册与发现:微服务所必备的.每个微服务都会到上边去注册.不管是微服务之间的调用,还是服务网关到微服务的转发,都是通 ...

  6. 第一章、Go安装与Goland破解

    1.1.安装Go 安装包下载:https://studygolang.com/dl 一直点下一步安装即可,默认是安装在“C:\Go”,如果自己换成其它目录则需添加环境变量. 1.2.Liteide l ...

  7. python中使用rsa加密

    前提不多说, 为什么使用RSA加密请自行搜索,直接正为: 一. 生成公钥及私钥, 并保存 二. 使用公钥加密, 私钥解密 后记: 通常使用中, 会先对数据进行bas64加密, 再对加密后的内容使用rs ...

  8. [知识点]最近公共祖先LCA

    UPDATE(20180822):重写部分代码. 1.前言 最近公共祖先(LCA),作为树上问题,应用非常广泛,而求解的方式也非常多,复杂度各有不同,这里对几种常用的方法汇一下总. 2.基本概念和暴力 ...

  9. [LeetCode] 104. Maximum Depth of Binary Tree 二叉树的最大深度

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  10. 【Arch安装】

    [Arch安装]不完整,凭记忆补充 1,制作安装介质(请跳转链接:https://www.archlinux.org/download/) 2,从UEFI模式启动后,按照官方WIKI向导操作(http ...