PIE SDK主成分变换

1.算法功能简介

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

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

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

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

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


示例代码


 1 /// <summary>
 2 /// 主成分正变换
 3 /// </summary>
 4 /// <param name="sender"></param>
 5 /// <param name="e"></param>
 6 private void toolStripButton1_Click(object sender, EventArgs e)
 7 {
 8     //1、参数设置
 9     PIE.CommonAlgo.ForwardPCA_Exchange_Info info = new ForwardPCA_Exchange_Info();
10     info.m_strInputFile = @"D:\data\02.测试数据\World\World.tif";
11     info.m_nOutDataType = 5;//float32
12     info.m_strOutputResultFile = @"D:\PCPT.tif";//输出文件
13     info.m_strOutputStatsFile = @"D:\PCPT.pcasta";//输出统计文件
14     info.m_nPCBands = 3;//输出的主成分波段数
15     info.m_strFileTypeCode = "GTiff";//文件格式类型
16     info.m_bOutputLikeEnvi = true;//零均值处理
17     info.m_bPCBandsFromEigenvalus = false;//是否根据特征值排序PCA波段
18     info.m_bCovariance = false;//统计使用矩阵 true 协方差矩阵 false 使用相关系矩阵  前提是
19 bPCBandsFromEigenvalus为true,设置的才有效
20     //2、创建算法对象
21     ISystemAlgo algo = AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.TransformForwardPCAAlgo");
22     if (algo == null) return;
23     algo.Params = info;
24
25     //3、执行算法
26     bool result = AlgoFactory.Instance().ExecuteAlgo(algo);
27     if (result != true) return;
28     ILayer layer = LayerFactory.CreateDefaultLayer(info.m_strOutputResultFile);
29     mapControlMain.ActiveView.FocusMap.AddLayer(layer);
30     mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
31 }
32
33
34 /// <summary>
35 /// 主成分逆变换 (对主成分正变换的结果做逆变换,得到正变换之前的影像数据)
36 /// </summary>
37 /// <param name="sender"></param>
38 /// <param name="e"></param>
39 private void toolStripButton2_Click(object sender, EventArgs e)
40 {
41     //1、参数设置
42     PIE.CommonAlgo.InversePCA_Exchange_Info info = new InversePCA_Exchange_Info();
43     info.m_strInputPcaFile = @"D:\PCPT.tif";//输入文件 主成分正变换结果
44     info.m_strInputStatsFile = @"D:\PCPT.pcasta";//pac统计文件
45     info.m_strOutputResultFile = @"D:\InversePC.tif";//逆变换结果
46     info.m_strFileTypeCode = "GTiff";//输出结果
47     info.m_nOutDataType = 5;//float32
48
49     //2、创建算法对象
50     ISystemAlgo algo = AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.TransformInversePCAAlgo");
51     if (algo == null) return;
52     algo.Params = info;
53
54     //3、执行算法并加载结果图层
55     bool result = AlgoFactory.Instance().ExecuteAlgo(algo);
56     if (result != true) return;
57     ILayer layer = LayerFactory.CreateDefaultLayer(info.m_strOutputResultFile);
58     mapControlMain.ActiveView.FocusMap.AddLayer(layer);
59     mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
60 }

2.4. 示例截图

图一、主成分正变换

图二:主成分逆变换

原文地址:https://www.cnblogs.com/PIESat/p/11202621.html

时间: 2024-10-04 11:38:58

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

PIE SDK彩色空间变换

1. 算法功能简介 使用彩色空间变换工具可以将三波段红.绿.蓝图像变换到一个特定的彩色空间,并且能从所选彩色空间变换回 RGB.两次变换之间,通过对比度拉伸,可以生成一个色彩增强的彩色合成图像.此外,颜色亮度值波段或亮度波段可以被另一个波段(通常具有较高的空间分辨率)代替,生成一幅合成图像(将一幅图像的色彩特征与另一幅图像的空间特征相结合). 彩色变换的一般工作流程:选择波段进行 RGB 合成显示→进行彩色变换→进行其他的图像处理→进行彩色逆变换→RGB 合成显示. PIE SDK支持算法功能的

PIE SDK傅里叶变换

1.算法功能简介 傅里叶变换能把遥感图像从空域变换到只包含不同频域信息的频域中.原图像上的灰度突变部位(如物体边缘).图像结构复杂的区域.图像细节及干扰噪声等,经傅里叶变换后,其信息大多集中在高频区:而原图像上灰度变化平缓的部位,如植被比较一致的平原.沙漠和海面等,经傅里叶变换后,大多集中在频率域中的低频区.在频率域平面中,低频区位于中心部位,而高频区位于低频区的外围,即边缘部位. 傅里叶变换是可逆的,即对图像进行傅里叶变换后得到的频率函数再做反向傅里叶变换,又可以得到原来的图像.从纯粹的数学意

PIE SDK PCA融合

1.算法功能简介 PCA 融合分三步实现,首先将多光谱数据进行主成分变换,然后用高分辨单波段替换第一主成分波段,最后进行主成份逆变换得到融合图像. PIE支持算法功能的执行,下面对PCA融合算法功能进行介绍. 2.算法功能实现说明 2.1. 实现步骤 第一步 算法参数设置 第二步 算法执行 第三步 结果显示 2.2. 算法参数 算法名称 PCA融合 C#算法DLL PIE.CommonAlgo.dll C#算法名称 PIE.CommonAlgo.PansharpFuseAlgo 参数结构体 Pa

PIE SDK Command&amp;&amp;Tool工具命令一览表

PIE SDK Command&&Tool工具命令一览表 编号 模板 名称(中文) Command&Tool 程序集 备注 1 数据管理 加载栅格数据 PIE.Controls.RasterCommand PIE.Controls.dll 2 加载矢量数据 PIE.Controls.VectorCommand 3 加载科学数据集数据 PIE.Controls.ScientificDatasetCommand 4 加载环境数据 PIE.Controls.LoadHJDataComma

PIE SDK 鹰眼图

1. 功能简介 鹰眼图,是GIS的一个基本功能,在鹰眼图上可以可以像从空中俯视一样查看地图框中所显示的地图在整个图中的位置. PIE SDK支持鹰眼图的功能实现:下面就具体介绍一下. 2. 功能实现说明 2.1. 实现思路及原理说明 第一步 在鹰眼图pannel内加载地图文档 第二步 当地图范围发生变化时MapHawkEyePmdControl_OnExtentUpdated(),鹰眼图发生变化事件 第三步 当点击鹰眼图是主地图发生相应操作事件MapHawkEyeControl_MouseDow

PIE SDK同态滤波

1.算法功能简介 同态滤波是减少低频增加高频,从而减少光照变化并锐化边缘或细节的图像滤波方法. 同态滤波的流程为:空间域图像→对数运算→傅里叶正变换→同态滤波――傅里叶逆变换→指数运算→同态滤波结果.不同空间分辨率的遥感图像,使用同态滤波的效果不同.如果图像中的光照可以认为是均匀的,那么,进行同态滤波产生的效果不大.但是,如果光照明显是不均匀的,那么同态滤波有助于表现出图像中暗处的细节. PIE SDK支持算法功能的执行,下面对同态滤波算法功能进行介绍. 2.算法功能实现说明 2.1. 实现步骤

PIE SDK组件式开发综合运用示例

1. 功能概述 关于PIE SDK的功能开发,在我们的博客上已经分门别类的进行了展示,点击PIESat博客就可以访问,为了初学者入门,本章节将对从PIE SDK组件式二次开发如何搭建界面.如何综合开发进行详细的讲解. 2. 功能实现 2.1.界面搭建 最终的界面如下图所示: 图1最终结果图 2.1.1 新建项目 选择“Window窗体应用程序”,设置程序的名称和保存路径即可.(新建完成后可以将程序的窗体名称右键重命名为“FormMain”,,将窗体界面的属性的Text设置名称为“PIE应用程序”

PIE SDK 基于Dot net bar实现比例尺控件

最近在搭建主界面的过程中,为了界面美观大方,使用了Dot net bar.但是,在Dot net bar的状态栏中放置PIE SDK自带的比例尺控件,运行主界面程序后,比例尺控件始终不显示比例尺信息,得不到想要的效果.如果使用Windows Form自带的状态栏,则能够正常显示比例尺信息.我猜想,可能是PIE SDK自带的比例尺控件与Dot net bar不兼容.我参考了官方博客(https://www.cnblogs.com/PIESat/p/10272779.html),利用Dot net

R in action读书笔记(19)第十四章 主成分和因子分析

第十四章:主成分和因子分析 本章内容 主成分分析 探索性因子分析 其他潜变量模型 主成分分析(PCA)是一种数据降维技巧,它能将大量相关变量转化为一组很少的不相关变量,这些无关变量称为主成分.探索性因子分析(EFA)是一系列用来发现一组变量的潜在结构的方法.它通过寻找一组更小的.潜在的或隐藏的结构来解释已观测到的.显式的变量间的关系. PCA与EFA模型间的区别 主成分(PC1和PC2)是观测变量(X1到X5)的线性组合.形成线性组合的权重都是通过最大化各主成分所解释的方差来获得,同时还要保证个